新版SMPAK文件格式揭秘
SuperMemo官方最近将Extreme English系列更新到2012版,此版加入了大量的图片和语音,其中包括大家一直在期待的例句语音。
从官方下载到的升级包(需购买,每个级别的课程售价9.9欧元)不再象以前那样可以直接使用,因为官方重新定义了SMPAK(包括SMDIF)包的格式,即便你拿到升级包,你还是需要输入激活码,通过官方服务器的验证后方可使用。要想绕过这一关,最可行的方案就是,对新老升级包及原课程包进行解包操作,合并后再进行打包操作,生成新的课程包。
不过,由于官方已对SMPAK格式进行了改动,要对新升级包进行解包,必须修改之前的解包代码。
事实上,改动的部分并不算多,主要的修改有以下几个部分的内容:
一、文件头部
头部的变化主要在于文件列表区偏移值(EntrChnk)和名称区偏移值(NameChnk),这两个值的位置若计算错误的话,整个解包操作将无法完成,改动后,头部的信息由原来的20字节扩大到34字节.
前12字节内容不变:
8字节:-SMArch-
2字节:版本号,00 02
2字节:锁定标识,03 00
第13-26字节:推测此处储存的是与激活课程相关的代码;
第27-30字节:
第31-34字节:NameChnk的偏移值; 二、名称区的变化
名称区的第一大变化是取消了原来跟在NameChnk标志后的4个字节的名称区尺寸信息,估计官方也发现了,这个数据本来就是可有可无的。这一变化是无法忽视的,因为若不对此数据进行处理,文件名将无法正确读取。
名称区的第二大变化是在每个文件名用“|”隔开,不过这个变化对于我们的解包操作并无影响,因为在文件列表区的数据中,已经自动将“|”所在的位置“过滤”掉了。
我们只要针对上述两大块的变化,对原有的解包代码进行处理,就可以完成新SMPAK格式的解包操作。