前段时间,受朋友之托。研究一款游戏的pak文件结构,并写出其解压缩代码。
之所以在标题中用“ADPACK32为文件头”是因为虽然后缀都是.pak,但是不同游戏其实现格式就不同。
为了便于观察,在这里我将用一个比较小的文件来做分析。内容如下:

从图中可以观察出以下几点:
1.00H一行是文件头
2.10H的到80H是文件名列表
3.以10H起始到80H,每隔20H就会出现一个文件名 ,多方对比之后发现文件索引块长度20H。前12字节是文件名。后面4字节是文件存储的其实字节位置。中间16字节未知,我觉得是路径之类的东西。如果哪位参透了这16字节的含义,还请指教(shyandsy@tom.com)。但他不影响我们提取数据。
和别的pak文件对比一下,又会发现
1.00H到0BH是完全一样的 =====》ADPACK32。。。。
2.0C到0F是高字节在后的数,这个数乘以20H再加上10H就是数据区启始位置
3.0C到0F是高字节在后的数,这个数乘以20H再加上10H就是数据区启始位置
这样我们就可以提取到包中所有文件。在这里谢谢驱动开发网的网友们对我的支持。
