UMD文件有二种格式类型,一种叫文本格式,另外一种叫动漫格式.文本格式中的文字流是用ZLIB进行压缩的,今天我们就先来了解一下文本格式的UMD文件吧.文本格式类弄的UMD文件的组成格式如下:1.前4个字节组合必须是:0xde9a9b89 (如果不是此格式,即不为UMD文件)目前不知道这串数字代表什么意思.按照常规别的文件开头前几个字符都是自己的格式类型.因为UMD没有官方的文件格式说明,所以不知道具体的意思.相信大致也代表这个意思吧.因为这对解析文件没有任何意义,所以不用去追究!2.第5到9个字节为:0x23 0x01 0x00 0x08 0x01(必须的)3.第10个字节为:0x01/0x02.注0x01代表文本格式的UMD文件,0x02代表动漫格式的UMD文件4.接下来2个字节的随机数.没有任何意义,可以扔掉.(呵呵,记住目前是第12个字节了)5.第13个字节为:0X23(必须的)6.解析接下来的2个字节0X02 0X00.即为数据类型.目前数据类型为2.代表的意思是以下的数据代表文件的TITLE.那下面让我们观注如何解析TITLE吧.(呵呵.目前好像是第16个字节了吧)7.第17个字节0X00(必须的)8.解析第18个字节值.该字节的组成是:TITLE的长度*2 + 5.所以你要得到TITLE的长度必须要减五.另外TITLE的长度为什么要*2,因为UMD是用UNICODE编码文件数据的.9.注意现在就不能按多少个标准字节记数了,因为文件不一样,TITLE不一样.长度也不一样了.那就继续看吧.再读TITLE长度个字节,就得到了TITLE的数据.10.TITLE数据读完后,接下来1个字节是:0X23也就是'#'字符(必须的)11.解析接下来的2个字节0X03 0X00.即为数据类型.目前数据类型为3.代表的意思是以下的数据代表文件的Author.12.接下来1个字节是0X00(必须的)13.接下来解析1个字节,该字节的组成Author的长度*2 + 5.所以你要得到Author的长度必须要减五.注意!!!大家会发现TITLE和Author的解析过程是一样的,哈哈.你非常厉害.确实解析是一样的.即然这样我就不再重复费话了.因为下面涉及到的解析都是这个流程.14.下面会解析到year = 4,mouth = 5,day = 6,gender = 7,publisher = 8,Vendor = 9.OK解析完成以上的数据后UMD的基本信息你已经得到了.
解析完成vendor数据后,下面会是什么数据呢?让我们继续看吧!!接下来就是解析内容长度了.15.紧接着的第1个字节:0X23 也就是'#'(大家会发现,UMD是用#来进行数据隔离的)16.解析2个字节:0x0B 0x00 数据类型为1117.接下来2个字节:0X00 0X09(必须的)18.接下来4个字节:代表内容长度.19.内容长度解析完成,用分隔符'#'.所以接下1个字节是0X2320.接下来2个字节代表数据类型.0X83章节偏移量.21.接下来2个字节:0X01 0X0922.接下来4个字节:代表一个随机数,目前看来是起同步作用的.23.接下来1个字节:0X36 也就是'$'钱字符了.哈哈.24.接下来4个字节:也是随机数.但是和22的随机数一样25.接下来4个字节:代表偏移量的长度*4 + 9.所以偏移量的长度为:你解析出来的(len - 9)/4.26.接下来偏移量长度个字节:每个字节代表:每节章节的偏移地址.27.偏移量数据块解析完成了.接下来又是数据分隔符'#' 0X2328.接下来2个字节:数据类型0X84 .章节标题29.接下来2个字节:0X01 0X09(必须的)30.接下来4个字节:随机数31.接下来1个字节:钱分隔符32.接下来4个字节:随机数.二次随机数要相等33.接下来4个字节:代表 (标题长度*2 + 1) + 934.接下来取得每个标题的数据.分析一下:为了取得每个标题的数据,如果有三个标题显然要取三次.OK.那如何取呢?我们先来解释第一个标题是如何取的.接下来1个字节:标题的长度*2 = count.接下来count个字节:就是标题的内容数据.其他的标题同样的方法.接着取即可.那标题取完后,接下来的数据会是什么呢?想必现在应该章节类的数据了吧.好那让我们继续看吧!35.接下来1个字节:钱字符36.接下来4个字节:随机数37.接下来4个字节:数据流的长度 + 9 = count38.接下来数据流长度个字节就是数据了.(注意目前的注意是ZLIB压缩的数据)接下来UMD做了安全处理.生成三个随机数.如果随机数有二个相同.处理一些数据.如果不相同就不处理.39.让我们看看相等的情况吧.下面的数据可能会有下面二种情况的组合出现.(1)接下来1个字节:'#'分隔符接下来2个字节数据类型:0XF1 0X00接下来2个字节:0X00 0X15接下来16个字节空数据(2)接下来1个字节:'#'分隔符接下来2个字节数据类型:0X0A 0X00接下来2个字节:0X00 0X09接下来4个字节:随机数40.接下来1个字节:'#'分隔符41.接下来2个字节:数据类型 0X81 0X0042.接下来2个字节:0X01 0X0943.接下来4个字节:随机数44.接下来1个字节:钱字符45.接下来4个字节:随机数46.接下来4个字节: (页面数*4 + 9) = count47.接下来页面数*4个字节.48.接下来1个字节:'#'分隔符49.接下来2个字节:0X82 0X00数据类型//封面图50.接下来3个字节:0X01 0X0A 0X0151.接下来4个字节:随机数52.接下来1个字节:钱字符53.接下来4个字节:随机数54.接下来4个字节:封面长度 + 955.接下来封面长度个字节56.接下来1个字节:'#'分隔符57.接下来2个字节:0X0C 0X00数据类型58.接下来2个字节:0X0C 0X00数据类型//结束吧!!!59.接下来2个字节:0X01 0X0960.接下来4个字节:整个文件长度//到此为此我们的UMD文件解析完成.总算是把UMD解析这一块走了一遍。也算是把UMD文件搞清楚了。
http://blog.sina.com.cn/s/blog_5ccfd2d50100bo2x.html