网易NPK文件解包实战:unnpk工具5步拆开NeoX引擎资源包
【免费下载链接】unnpk解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。项目地址: https://gitcode.com/gh_mirrors/un/unnpk
从游戏目录里拖出一个叫script.npk的文件,双击打不开,扔进十六进制编辑器全是乱码——这是许多想研究《阴阳师》《魔法禁书目录》等网易游戏的玩家遇到的第一个坎。本文介绍的unnpk就是专门解决这个问题的 C 语言命令行工具:它负责解包网易 NeoX 引擎的 NPK 资源文件,并顺带提供一条完整的脚本解密链,让"资源提取"和"逻辑分析"都能在一台 Linux 或 macOS 机器上完成。
一个打不开的文件,和一个下午
假设你刚从模拟器里导出了游戏的数据目录,里面有十几个.npk,每个几十到几百 MB。你想确认两件事:包里到底装了什么?有没有自己想要的立绘和配置?没有工具的情况下,这只能靠猜——换扩展名、逐个试打开方式,效率极低。
unnpk 的定位很朴素:把 NPK 当作一个"压缩目录"来看待,unnpk负责解包,mapnpk负责体检,tools/下的三个 Python 脚本负责对付加密脚本。三者合起来,就是一套从"看到资源"到"看懂逻辑"的最小工具链。
这份工具解决什么问题:一张表看清适用人群
| 典型用户 | 想解决的问题 | 用 unnpk 能得到什么 |
|---|---|---|
| 美术素材收集者 | 提取立绘、场景图、UI 素材 | 文件按 MIME 类型归类输出,自动补扩展名 |
| 游戏机制研究者 | 查看角色数值、技能与玩法配置 | 解包后直接翻 JSON/配置文件,配合解密看逻辑 |
| 逆向工程学习者 | 理解 NPK 格式与资源保护机制 | mapnpk 结构报告 + 可复现的完整解密链 |
它不需要图形界面,不依赖特定版本的游戏客户端,核心就两个可执行文件,适合在服务器、开发机或普通桌面上跑。
最小路径:三条命令完成第一次解包
先把源码拿到本地并编译,项目依赖 zlib 和 libmagic(用于识别文件类型),按系统装好依赖后执行:
git clone https://gitcode.com/gh_mirrors/un/unnpk cd unnpk make依赖安装按平台略有差别:macOS 用brew install libmagic,Debian/Ubuntu 用sudo apt-get install libmagic-dev,CentOS 用sudo yum install file-libs file-devel。编译成功后,目录里会出现unnpk和mapnpk两个可执行文件。
解包一条命令即可:
./unnpk script.npk script这句命令把script.npk解包到script目录。unnpk 会先打印一张文件清单,包含索引、偏移量、压缩前后大小、是否 zlib 压缩、MIME 类型和扩展名,然后按 MIME 类型把文件写进对应的子目录。包内文件通常以偏移量的十六进制命名(比如0A0D60DC),unnpk 用 libmagic 探测真实类型后补上.png、.json、.py这类扩展名,省去你面对一堆无后缀文件时的猜谜环节。
拆包之前的体检:mapnpk 帮你提前看清包内结构
面对一个陌生 NPK,先别急着全量解包。用mapnpk做一次"体检"更划算:
./mapnpk -i script.npk -o structure.md默认输出是 markdown 格式的报告;想喂给表格软件就加-f csv,想把偏移量按十进制看就加-t int。mapnpk不解压任何资源,只读取文件映射表并输出报告,所以对大文件也很快。对想学文件格式的人来说,map 区偏移量的读取位置(文件头 0x14 处)、每条文件记录 7 个 32 位字段的布局,都是现成的入门教材。
阴阳师 script.npk 脚本解密:从加密字节到可读代码的三级跳
解包只是第一步。阴阳师的script.npk里是加密的 Python 字节码,直接看是乱码。以解包出的0A0D60DC文件为例,完整链路是三段:
./tools/script_redirect.py 0A0D60DC > 0A0D60DC.out ./tools/pyc_decryptor.py 0A0D60DC.out 0A0D60DC.pyc uncompyle2 -o 0A0D60DC.py 0A0D60DC.pyc三条命令各干一件事:第一条用 rotor 解密、zlib 解压并反转字节顺序,还原出被 redirect 逻辑处理过的字节码;第二条按 opcode 映射表把错位的指令纠正回标准 Python 2.7 顺序;第三条用 uncompyle2 反编译成可读的.py。
tools/里的script_redirect.py是依据逆向得到的 redirect.py 改写而来,opcode 映射表维护在pymarshal.py中。有个值得注意的细节:redirect.py 本身也以 pyc 形式藏在script.npk里(3.0.3(1) 版本对应文件FB54F059),意味着加密参数并非不可重新推导——解包其他网易游戏时,这个思路可以复用。
三个容易翻车的细节
- 编译报错找不到 magic.h:libmagic 没装全。按上面分平台的命令补装依赖再
make即可。 - 解密脚本直接 ImportError:
script_redirect.py和pyc_decryptor.py都是 Python 2 脚本,依赖 rotor 和 marshal;uncompyle2 也只服务于 Python 2 字节码。请先确认环境是 Python 2.7。 - 解出来的文件没有扩展名:unnpk 会尽力识别,识别不出的文件用
file命令手动判断类型,再补扩展名即可。另外 README 明确建议使用 Linux、macOS 或 FreeBSD,Windows 上编译依赖较折腾,不推荐。
最后一步:从使用者到贡献者
跑通上面的流程后,你可以把命令组合成批处理脚本,一次性解包整个目录下的多个 NPK;也可以翻开tools/里的三个 Python 脚本,把 opcode 映射表和 rotor 密钥当作研究入口。项目欢迎补充文档与 PR——如果你解包了其他网易游戏,发现 redirect 参数不同,把发现写进 README 就是很实在的贡献。
解包工具的价值不在"破解",而在把黑盒变白盒:理解格式、研究逻辑、学习逆向。下一次面对打不开的 NPK 文件时,你已经有了一条从克隆到解包、再到解密脚本的完整路径。
更多资料:项目根目录的 README.md(含阴阳师 script.npk 完整解密步骤)与 tools/ 目录内的脚本注释,是继续深入的最短路径。
【免费下载链接】unnpk解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。项目地址: https://gitcode.com/gh_mirrors/un/unnpk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考