上午公司斷網,晚上失眠頭痛沒精神,于是隨便打開了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會為每一個聲音文件
加密?;蛘咧槐4媛曇粑募木唧w數據,而聲音文件文件頭則只保存一份(因為所有文件的
文件頭很有可能全部是一樣的)。后來稍微搜索了下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編譯好的可執行文件,另聲明:本文及相關工具代碼只作學習研究
用,任何后果與作者無關。