Nuitka onefile 资源包处理工具 — 用于列出、解压、修改、重封 Nuitka onefile 程序生成的资源包。
extract 将 onefile 包解压到目录
pack 从目录重建 onefile 包并写回 EXE
replace 替换 archive 中的指定条目
verify 验证 onefile 包结构完整性
info 显示 EXE 的 onefile 资源概要信息
inspect-dll 检查 onefile 包内 DLL 的 PE 资源目录(含 Nuitka 常量 CRC 校验)
parse-constants
解析并导出 Nuitka 常量资源 (RT_RCDATA/3)
search 在常量资源中递归搜索字符串
replace-constants
修改 Nuitka 常量 section,自动修复 CRC 和处理 PE 资源扩容
config 管理 section 过滤规则
pip install -r requirements.txt依赖:
pefile— PE 文件解析zstandard— zstd 压缩/解压rsa— RSA 密钥处理
python -m nuitka_forge extract app.exe --out ./extractedpython -m nuitka_forge pack app.exe --src-dir ./extracted --out app.patched.exepython -m nuitka_forge replace app.exe --name module.dll --file ./new_module.dll --out app.patched.exepython -m nuitka_forge verify app.exepython -m nuitka_forge info app.exe# 检查提取出的 module.dll
python -m nuitka_forge inspect-dll app_extracted/module.dll
# 深度分析常量资源 payload
python -m nuitka_forge inspect-dll module.dll --constants# 显示 TLV 结构
python -m nuitka_forge parse-constants module.dll
# 在所有常量 section 中递归搜索字符串
python -m nuitka_forge search module.dll "example text"
# 导出单个 section
python -m nuitka_forge replace-constants module.dll --dump-section "__main__" -o __main__.json
python -m nuitka_forge replace-constants module.dll --dump-section "__parents_main__" -o __parents_main__.json修改导出的 JSON 后,可以一次替换一个或多个 section:
python -m nuitka_forge replace-constants module.dll \
--replace-section __main__.json __parents_main__.json \
-o module.patch.dll替换时会保留未修改 section 的原始字节。对于字符串、bytes 和
bytearray,工具会尽量沿用原始 TLV tag,只更新发生变化的 payload 和长度,
避免因为整段重编码导致资源大小异常变化。
如果新资源超过原 PE 资源槽位,工具会将资源迁移到可映射 section 的末尾,
同步更新资源 RVA、资源大小、section 大小、SizeOfImage 和 PE checksum。
因此支持不同长度的字符串修改。修改后仍需确保内容本身符合目标程序的
业务格式要求。
nuitka_forge/
├── __init__.py # 包版本信息
├── __main__.py # python -m 入口
├── core.py # 调度入口 + 公共工具(re-export 两个子模块)
├── onefile.py # ★ Nuitka 打包 EXE 处理:资源提取、zstd、archive 遍历/重建/替换、写回
├── constants.py # ★ Nuitka 常量 TLV 解析、搜索、保留编码替换
├── peutils.py # ★ 解包后 PE 文件处理:PE 资源枚举、CRC 校验/修复、常量资源替换与深度分析
├── config.py # section 过滤配置
└── cli.py # CLI 子命令
.gitignore
requirements.txt
README.md
- Nuitka onefile 资源存储在 PE 的
RT_RCDATA段(type=10, id=27) - 资源格式为
KAY头 + zstd 压缩流 - 解压后的 archive 是自定义文件表:
utf16le_filename + NUL + uint64le_size + file_bytes - 内层 DLL 可能包含 Nuitka 常量资源 (RT_RCDATA/3),并带有 CRC32 校验
- 修改任何字节后必须同步更新 CRC32,否则程序启动会报
"Error, corrupted constants object"并退出 - 常量 section 中的字符串可能嵌套在 tuple、list 或 dict 中,修改时需要保留原始 TLV 编码结构
- 常量资源变长并超过原槽位时,需要迁移资源并修正 PE 映射信息,不能直接覆盖后续资源