Dnf资源包格式分析,参考的是这篇文章:http://blog.csdn.net/leexuany/article/details/3849051
提取工具的代码我放到github上了:https://github.com/langresser/dnfextrator
虽然上文已经有比较详尽的分析了,但是真正实现好一个资源提取工具还是花了我两天的时间。这里把需要注意的地方记录下来。
1、npk包的格式:
struct NPK_Header
{
char flag[16]; // 文件标识 "NeoplePack_Bill"
int count; // 包内文件的数目
};
struct NPK_Index
{
unsigned int offset; // 文件的包内偏移量
unsigned int size; // 文件的大小
char name[256];// 文件名
};
char decord_flag[256] = "puchikon@neople dungeon and fighter DNF";
解npk包非常好处理,读取完NPK_Header紧接着根据里面的count数目循环读取NPK_Index,读取完毕后,就可以根据里面的offset定位到指定位置读取img文件。现在的dnf包npk包内的文件名是加密过的,要用decord_flag异或NPK_Index中的name才能获取实际文件名。decord_flag总共有256个字节,剩余部分用"DNF"三个字母填满,最后一个字节置0。读取文件名时可以像这样解密:
char temp[256