上午公司断网,晚上失眠头痛没精神,于是随便打开了DNF游戏目录下的资源文件。以
前一直对提取游戏资源存在好奇,需要对一些关键字节猜测其加密方式。
DNF游戏目录下soundpacks下的npk文件看起来似乎比较简单,这里直接给出文件格式,
懒得写分析思路了。
文件开头的十六个字节是一个固定字符串:NeoplePack_Bill\0。
接下来四个字节表示本npk文件里打包了多少个WAV文件。npk文件是一个包含了很多声
音或者图片的打包文件。类似这种打包文件,一般文件头都会保存一个文件列表。而这个列
表里又会附加上偏移量和大小等信息。
接下来的数据就是这里所说的列表。每一个列表项包含三个数据域:偏移、大小、文件
名。如下示意:
NeoplPack_Bill\0 (16 bytes)
file_count( 4 bytes)
item1:offset(4 bytes), size(4 bytes)
item2:offset(4 bytes), size(4 bytes)
...
itemn:offset(4 bytes), size(4 bytes)
...
文件列表之后,就是具体的每个文件的内容。开始我还在担心npk会为每一个声音文件
加密。或者只保存声音文件的具体数据,而声音文件文件头则只保存一份(因为所有文件的
文件头很有可能全部是一样的)。后来稍微搜索了下WAV的格式,只需要比对下npk中某一个
文件内容的头部是否和WAV格式的头部相同,就可以基本断定其是否加密。
结果是,npk对包内的每一个WAV文件没做加密。
然后立即写了个程序,根据文件列表中的偏移值和大小值,将每一个WAV单独取出来,就
OK了。
完整的格式为:
NeoplPack_Bill\0 (16 bytes)
file_count( 4 bytes)
item1:offset(4 bytes), size(4 bytes)
item2:offset(4 bytes), size(4 bytes)
...
itemn:offset(4 bytes), size(4 bytes)
file1
file2
...
filen
我想图片资源也应该差不多,不过图片资源肯定要复杂些。下午公司网络好了,网上搜
索了下,发现居然已经有了DNF资源提取工具了,唉。
提供下源代码和MingW编译好的可执行文件,另声明:本文及相关工具代码只作学习研究
用,任何后果与作者无关。