Il2CppDumper:Unity逆向工程工具 开发者的IL2CPP二进制解析解决方案
Il2CppDumper是一款专注于Unity游戏引擎IL2CPP二进制文件解析的逆向工程工具,能够帮助开发者从编译后的C++字节码中还原出C#类、方法和字段信息,同时支持生成可用于逆向分析的伪代码文件。该工具特别适用于Unity游戏的二次开发、漏洞分析和代码审计场景,解决了IL2CPP编译后元数据与二进制文件分离导致的逆向困难问题,为开发者提供了从机器码到高级语言的桥梁。
解析核心功能:掌握工具的核心能力
还原IL2CPP元数据:从二进制中提取关键信息
通过解析global-metadata.dat文件和对应平台的可执行文件(如ELF、PE或MachO格式),Il2CppDumper能够重建类型定义、方法签名和字段布局。核心处理逻辑位于Il2Cpp/Metadata.cs中,通过元数据与二进制文件的交叉引用,实现从内存地址到C#代码结构的映射。
生成多格式输出文件:满足不同逆向场景需求
工具支持生成多种实用文件,包括:
- 伪代码头文件:包含类结构和方法声明,路径为项目根目录下的
il2cpp.h - IDA/Ghidra辅助脚本:如
ida.py和ghidra.py,可直接导入反编译工具实现符号自动命名 - Dummy DLL文件:通过
Outputs/DummyAssemblyExporter.cs生成的伪程序集,可用于静态分析工具加载
跨平台二进制支持:覆盖主流游戏运行环境
项目的ExecutableFormats/目录下实现了对多种二进制格式的解析,包括Windows平台的PE.cs、Linux的Elf.cs、macOS的Macho.cs以及WebAssembly的WebAssembly.cs,确保在不同游戏平台上都能准确提取IL2CPP信息。
快速上手流程:分场景操作指南
基础用户:图形界面引导模式
-
准备必要文件
收集目标应用的两个核心文件:- IL2CPP编译后的可执行文件(如
libil2cpp.so或GameAssembly.dll) - 元数据文件
global-metadata.dat(通常位于应用的Data/Managed目录)
常见问题提示:若找不到元数据文件,需检查Unity项目是否启用了IL2CPP编译选项
- IL2CPP编译后的可执行文件(如
-
启动解析工具
运行项目根目录下的Il2CppDumper.exe,在弹出的文件选择对话框中依次选择可执行文件和元数据文件。
常见问题提示:若提示文件格式不支持,需确认目标文件是否为工具支持的格式(可查看ExecutableFormats/目录下的支持列表) -
获取解析结果
工具自动在当前目录生成输出文件,包括伪代码头文件和脚本文件。基础用户推荐优先查看script.json,其中包含结构化的类型和方法信息。
常见问题提示:输出目录文件过多时,可通过config.json中的GenerateScript选项控制生成内容
高级用户:命令行参数调优
-
通过命令行指定参数
使用如下命令直接指定输入文件和输出目录:Il2CppDumper.exe "path/to/GameAssembly.dll" "path/to/global-metadata.dat" -o "output/directory"常见问题提示:命令行参数不生效时,可通过
--help查看完整参数列表 -
集成到自动化流程
可将工具集成到逆向工程流水线中,通过Utils/Il2CppExecutor.cs中的API实现自定义解析逻辑,或使用hopper-py3.py等脚本直接与反编译工具联动。
常见问题提示:API调用时需注意元数据版本兼容性,可通过ForceVersion配置强制指定IL2CPP版本
高级配置指南:定制化解析方案
配置文件参数调优:提升解析效率的关键设置
| 配置项 | 类型 | 默认值 | 功能说明 | 使用建议 |
|---|---|---|---|---|
GenerateDummyDll |
bool | true | 是否生成伪DLL文件 | 进行静态分析时建议开启,可导入dnSpy等工具 |
DumpMethodOffset |
bool | false | 是否输出方法内存偏移 | 调试或动态分析时启用,需配合反编译工具使用 |
ForceIl2CppVersion |
bool | false | 是否强制指定IL2CPP版本 | 解析异常时尝试开启,需设置ForceVersion参数 |
RequireAnyKey |
bool | true | 程序结束时是否等待按键 | 命令行自动化场景建议设为false |
DummyDllAddToken |
bool | true | 是否在伪DLL中添加原Token | 需要保持与原始程序集兼容性时开启 |
配置文件路径:项目根目录下的config.json,修改后需重启工具生效
处理特殊场景:解决复杂解析问题
处理加密元数据
当global-metadata.dat被加密时,可通过IO/Lz4DecoderStream.cs中的解压逻辑扩展解密功能,或使用Utils/SectionHelper.cs手动定位内存中的元数据区域。
适配自定义IL2CPP版本
对于非标准IL2CPP实现,可修改Il2Cpp/Il2CppClass.cs中的类型解析逻辑,或通过ForceVersion配置模拟已知版本的解析行为。
优化大型项目解析
解析包含数万类型的大型项目时,建议关闭DumpAttribute和DumpProperty等非关键输出,通过config.json中的max_depth参数限制递归解析深度。
总结:释放IL2CPP逆向工程潜力
Il2CppDumper通过直观的操作流程和灵活的配置选项,降低了Unity IL2CPP二进制文件的逆向门槛。无论是游戏开发者进行兼容性测试,还是安全研究员分析漏洞,都能通过该工具快速获取关键代码结构。项目持续维护的ExecutableFormats/模块确保了对新平台的支持,而丰富的脚本工具链则实现了与主流逆向软件的无缝集成。通过合理配置config.json和利用命令行参数,开发者可以构建高效的逆向工作流,充分发挥IL2CPP二进制文件的分析价值。
项目源码和最新版本可通过官方仓库获取,建议定期更新以获得对新Unity版本的支持。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0211- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
MarkFlowy一款 AI Markdown 编辑器TSX01