名称: NitroPlus 描述: 封包: .pak 作者: 痴漢公賊 (glanser@163.com) 版本: 1.0.1 成熟度: 开发版 【TODO】 1. 支持version 1的pak封包。 2. 加入对.npp和.npa两种格式的支持。 3. 有些不能提取的.pak是视频文件,请用播放器直接观看。 【.pak封包文件说明】 实际类型是有目录的封包资源文件。 元数据根据实际用途,是png、jpg、ogg、ini、nps(脚本)、txt(脚本)等。 首部: u32 version; // 1、2、3或4 根据version字段的不同,分为4种不同的封包。 【.pak(Ver2)封包文件说明】 首部: u32 version; // 2 u32 index_entries; // 资源文件数 u32 uncomprlen; // 索引段解压后的长度 u32 comprlen; // zlib压缩的索引段长度 u32 unknown1; // 0 或 0x100(和is_compr有关?) s8 magic[256]; // 通常是游戏的英文名称 索引段:zlib压缩,索引项长度变长 u32 name_length; // 资源文件名长度 s8 *name; // 资源文件名 u32 offset; // 资源文件数据偏移(从索引段结尾算起) u32 uncomprlen; // 解压后的数据长度 u32 act_length; // 实际的数据长度 u32 is_compr; // 是否经过zlib压缩(0 - 没有经过zlib压缩;1 - 经过zlib压缩) u32 comprlen; // zlib压缩的数据长度(如果is_compr为0,则该字段为0) 数据: 紧接在索引段之后;对于is_compr为0的情况,数据为明文;如果is_compr为1,则需要解压缩。 【.pak(Ver3)封包文件说明】 首部: u32 version; // 3 u32 index_entries; // 资源文件数 u32 uncomprlen; // 索引段解压后的长度 u32 comprlen; // zlib压缩的索引段长度 u32 unknown[2]; s8 magic[256]; // 通常是游戏的英文名称 索引段:zlib压缩,索引项长度变长 u32 name_length; // 资源文件名长度 s8 *name; // 资源文件名 u32 offset; // 资源文件数据偏移(从索引段结尾算起) u32 uncomprlen; // 解压后的数据长度 u32 act_length; // 实际的数据长度 u32 is_compr; // 是否经过zlib压缩(0 - 没有经过zlib压缩;1 - 经过zlib压缩) u32 comprlen; // zlib压缩的数据长度(如果is_compr为0,则该字段为0) 数据: 紧接在索引段之后;对于is_compr为0的情况,数据为明文;如果is_compr为1,则需要解压缩。 注意:ver3存在一个变种,格式和ver4完全一样,但是只有version字段是3。 【.pak(Ver4)封包文件说明】 首部: u32 version; // 4 s8 magic[256]; // xor解密用key(通常是游戏的英文名称) u32 xor_factor; // xor解密comprlen字段用 u32 uncomprlen; // 索引段解压后的长度(加密) u32 index_entries; // 资源文件数(加密) u32 comprlen; // zlib压缩的索引段长度(加密) 索引段:zlib压缩,索引项长度变长 u32 name_length; // 资源文件名长度 s8 *name; // 资源文件名,同时也是xor解密用key u32 offset; // 资源文件数据偏移(从索引段结尾算起)(加密) u32 uncomprlen; // 解压后的数据长度(加密) u32 next_offset; // 下一个索引项在索引段的偏移(加密) u32 is_compr; // 是否经过zlib压缩(0 - 没有经过zlib压缩;1 - 经过zlib压缩)(加密) u32 comprlen; // zlib压缩的数据长度(如果is_compr为0,则该字段为0)(加密) 数据:加密 紧接在索引段之后;对于is_compr为0的情况,数据需要经过xor解码(最多对前1024字节进行解码);如果is_compr为1,则整个解压后的数据进行完全xor解码。 【ChangeLog】 2007-8-19 22:41 ver 1.0.1 支持ver3的一个变种 2007-5-10 0:13 ver 0.9.0 第一版发布