关于DNF的多媒体包NPK文件的那些事儿(1)
2017-08-17 11:23
573 查看
NPK文件是DNF内置多媒体文件包,曾经用过EXRPG的大家都知道,NPK文件分为贴图NPK和音效NPK两种。贴图NPK内部包含若干IMG文件,而一个IMG文件则由若干个经过压缩的图片文件构成,而NPK文件的其他部分则用由图片的各种属性数据、图片的相对位置以及校验位所构成;而音效NPK则包含若干OGG文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/05/2e4447109039652bc93ce57a37d7ecfc)
NPK文件结构
每个NPK文件由4部分构成:NPK文件头(红色框内),IMG文件索引(黄色框内),NPK校验位(蓝色框内),IMG文件序列(剩下的框内)。具体内容如下表所示:
1. NPK文件头
NPK文件头共20字节,包含一个16字节的固定的文件头字符串“NeoplePack_Bill”以及4字节的IMG文件的数目。
2. IMG文件索引表
IMG文件索引表由若干个IMG文件索引数据首尾相接构成,每个IMG文件索引有264字节,其中包含了该NPK文件中每个IMG文件的地址偏移量,所占大小和加密后的名称,在提取IMG文件时,可以直接根据对应的索引表来直接获取地址和大小,然后进行读取操作。
IMG文件索引表的结构如下所示:
IMG文件名加密方法为:文件名原字符串转换为256字节的ASCII码(不足的以0填充),然后与256字节的字符串(注意最后一位是空格):
“puchikon@neople dungeon and fighterDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNF”
的ASCII码进行按位异或运算。当然,解密和加密算法是一样的。
3. NPK文件校验位
当NPK文件里包含至少1个IMG文件时,NPK文件在IMG文件索引表的后边设置32字节的校验位。校验位根据其之前的所有内容(即NPK文件头和IMG文件索引表)的字节流的前17的整数倍,进行SHA256加密。
C++没有内置的SHA256加密算法,网上有很多开源库可供下载(https://code.csdn.net/snippets/2538665)。
NPK文件校验位在NPK中具有极其重要的位置,当一个NPK文件的校验位不匹配时,DNF游戏将视其为一个无效的NPK文件,从而不会读取该NPK文件内的资源。
4. IMG文件序列
IMG文件序列由NPK文件中所包含IMG文件数据首尾拼接而成,每个IMG文件的大小不是确定的,但是可以通过读取对应的IMG文件索引表来确定每一个IMG文件的起始位置和大小,从而读取整个IMG文件。IMG文件的详细格式见后续介绍。
NPK文件结构
每个NPK文件由4部分构成:NPK文件头(红色框内),IMG文件索引(黄色框内),NPK校验位(蓝色框内),IMG文件序列(剩下的框内)。具体内容如下表所示:
NPK文件头 | 20个字节,包括NPK文件头字符串和内含IMG文件的个数 | |
IMG文件索引表 | IMG文件1索引 | 每个IMG文件索引占264字节,包括IMG文件在整个NPK文件的地址偏移量和所占大小,以及经过一种特殊算法加密后的名字。 |
IMG文件2索引 | ||
IMG文件3索引 | ||
NPK校验位 | 32个字节,使用SHA256算法用以对NPK文件的合法性进行校验。 | |
IMG文件序列 | IMG文件1 | 所有具体的IMG文件组成的集合。 |
IMG文件2 | ||
IMG文件3 |
1. NPK文件头
NPK文件头共20字节,包含一个16字节的固定的文件头字符串“NeoplePack_Bill”以及4字节的IMG文件的数目。
2. IMG文件索引表
IMG文件索引表由若干个IMG文件索引数据首尾相接构成,每个IMG文件索引有264字节,其中包含了该NPK文件中每个IMG文件的地址偏移量,所占大小和加密后的名称,在提取IMG文件时,可以直接根据对应的索引表来直接获取地址和大小,然后进行读取操作。
IMG文件索引表的结构如下所示:
地址偏移量 | 4字节,地址偏移量 |
IMG文件大小 | 4字节,表示对应IMG文件的大小 |
IMG文件名称 | 256字节,IMG文件加密后的名称。 |
“puchikon@neople dungeon and fighterDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNF”
的ASCII码进行按位异或运算。当然,解密和加密算法是一样的。
3. NPK文件校验位
当NPK文件里包含至少1个IMG文件时,NPK文件在IMG文件索引表的后边设置32字节的校验位。校验位根据其之前的所有内容(即NPK文件头和IMG文件索引表)的字节流的前17的整数倍,进行SHA256加密。
C++没有内置的SHA256加密算法,网上有很多开源库可供下载(https://code.csdn.net/snippets/2538665)。
NPK文件校验位在NPK中具有极其重要的位置,当一个NPK文件的校验位不匹配时,DNF游戏将视其为一个无效的NPK文件,从而不会读取该NPK文件内的资源。
4. IMG文件序列
IMG文件序列由NPK文件中所包含IMG文件数据首尾拼接而成,每个IMG文件的大小不是确定的,但是可以通过读取对应的IMG文件索引表来确定每一个IMG文件的起始位置和大小,从而读取整个IMG文件。IMG文件的详细格式见后续介绍。
相关文章推荐
- 关于DNF的多媒体包NPK文件的那些事儿(9) - IMGV6
- 关于DNF的多媒体包NPK文件的那些事儿(2)
- 关于DNF的多媒体包NPK文件的那些事儿(5)- IMG文件里的指向型索引项(指向帧)的深度与有向环检测
- 关于DNF的多媒体包NPK文件的那些事儿(4)- NPK文件操作流程
- 关于DNF的多媒体包NPK文件的那些事儿(7) - IMGV5
- 关于DNF的多媒体包NPK文件的那些事儿(10) - SPK文件
- 关于DNF的多媒体包NPK文件的那些事儿(6) - IMGV4
- 关于文件类型关联的那些事
- 关于Android退出程序清空私密文件的那些事
- 关于Linux文件的那些事情之一
- 关于文件操作的那些趣味小知识之(剪切、移动和复制粘贴)
- Did not find handler method for springMVC资源文件扫描不到---关于spring的那些坑
- 关于plist文件的那些事
- 关于Linux文件的那些事情之二
- 关于javascript从txt文件中读取内容出现乱码的问题
- android关于蓝牙不能传送APK文件
- 关于delphiXE中使用idhttp下载带有中文的文件解决方法。
- 关于hosts文件找不到或者被删除的解决办法。
- 关于gitignore文件的创建与使用
- 关于windows下QT5.X编译mysql后找不到生成文件的问题