loop_in_codes

低调做技术__欢迎移步我的独立博客 codemaro.com 微博 kevinlynx

DNF游戏声音资源提取

    上午公司断网,晚上失眠头痛没精神,于是随便打开了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编译好的可执行文件,另声明:本文及相关工具代码只作学习研究
用,任何后果与作者无关。

posted on 2009-05-12 22:50 Kevin Lynx 阅读(5144) 评论(2)  编辑 收藏 引用 所属分类: 通用编程

评论

# re: DNF游戏声音资源提取[未登录] 2009-05-13 09:08 dophi

- -! wow, a cracker..
  回复  更多评论   

# re: DNF游戏声音资源提取 2009-05-13 14:12 0668

不错哦,要是有分析过程就更好了  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理