新版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字节:

EntrChnk的偏移值;
第31-34字节:NameChnk的偏移值;

二、名称区的变化

名称区的第一大变化是取消了原来跟在NameChnk标志后的4个字节的名称区尺寸信息,估计官方也发现了,这个数据本来就是可有可无的。这一变化是无法忽视的,因为若不对此数据进行处理,文件名将无法正确读取。

名称区的第二大变化是在每个文件名用“|”隔开,不过这个变化对于我们的解包操作并无影响,因为在文件列表区的数据中,已经自动将“|”所在的位置“过滤”掉了。

我们只要针对上述两大块的变化,对原有的解包代码进行处理,就可以完成新SMPAK格式的解包操作。

本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客

原文地址:https://www.cnblogs.com/emagic/p/2612724.html