Il2CppDumper技术拆解:Unity逆向实践路径
【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper
Unity IL2CPP技术将C#代码编译为C++二进制文件,在提升性能的同时也为逆向分析带来挑战。本文围绕Il2CppDumper工具展开技术拆解,从IL2CPP二进制解析原理到元数据提取实践,提供系统化的Unity逆向解决方案。
痛点剖析:IL2CPP逆向的核心挑战
IL2CPP编译过程会剥离C#类型信息,传统逆向工具难以直接解析二进制文件中的方法签名和类结构。主要痛点包括:元数据加密导致类型信息丢失、多平台二进制格式差异、Unity版本迭代带来的解析逻辑变化,以及大型项目的性能处理瓶颈。
核心价值:技术原理与功能定位
Il2CppDumper通过解析global-metadata.dat文件和对应平台的二进制可执行文件,重建IL2CPP类型系统。其核心价值体现在:
- 类型信息还原:从元数据中提取类、方法、字段的完整定义
- 地址映射生成:建立二进制函数地址与C#方法签名的对应关系
- 跨平台适配:统一处理不同架构的可执行文件格式
- 逆向工具联动:生成适配IDA、Ghidra等工具的辅助文件
全平台适配:架构支持与技术实现
工具通过模块化设计支持多平台二进制格式解析:
| 平台 | 核心实现类 | 文件格式 | 架构支持 |
|---|---|---|---|
| Windows | PEClass | PE | x86/x64 |
| Android | ElfClass | ELF | ARM/ARM64 |
| iOS | MachoClass | Mach-O | ARM64 |
| Web | WebAssemblyClass | WASM | 32/64位 |
| Switch | NSOClass | NSO | AArch64 |
核心实现位于ExecutableFormats目录,通过抽象基类ElfBase、MachoBase等统一接口,适配不同平台的二进制解析逻辑。
实战指南:环境配置与操作流程
环境校验与准备
确保系统已安装.NET 6.0运行时环境,执行以下脚本验证环境:
# 检查.NET版本 dotnet --version # 克隆项目仓库 git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper # 构建项目 dotnet build Il2CppDumper/Il2CppDumper.csproj -c Release验证要点:构建成功后在
bin/Release/net6.0目录生成可执行文件
多平台文件定位策略
| 平台 | 二进制文件路径 | 元数据文件路径 |
|---|---|---|
| Windows | GameAssembly.dll | Data/Managed/global-metadata.dat |
| Android | lib/armeabi-v7a/libil2cpp.so | assets/bin/Data/Managed/global-metadata.dat |
| iOS | Payload/Game.app/Frameworks/UnityFramework.framework/UnityFramework | Payload/Game.app/Data/Managed/global-metadata.dat |
| WebGL | Build/UnityLoader.js旁的.wasm文件 | Build/Data/global-metadata.dat |
三种运行模式详解
命令行基础模式
Il2CppDumper <binary-file> <metadata-file> <output-directory>验证要点:输出目录生成
il2cpp.h、script.json和DummyDll目录
配置文件驱动模式创建config.json自定义输出选项:
{ "OutputFormat": 0, "UseHeader": true, "GenerateDummyDll": true, "UnityVersion": "2020.3.0f1" }验证要点:配置文件需与可执行文件同目录,或通过
--config参数指定路径
问题速解:常见错误排查流程
元数据解析失败
- 验证文件完整性:检查
global-metadata.dat大小是否正常 - 确认版本匹配:不同Unity版本元数据格式存在差异
- 尝试指定版本:使用
--unity-version参数强制指定解析逻辑
二进制文件识别错误
- 检查文件架构:确保选择正确的CPU架构版本
- 验证文件完整性:使用
file命令检查二进制文件格式 - 手动指定格式:通过
--format参数强制指定文件格式(pe/elf/macho/nso/wasm)
进阶策略:配置优化与输出应用
配置参数决策指南
| 参数 | 取值范围 | 适用场景 | 性能影响 |
|---|---|---|---|
| OutputFormat | 0-3 | 0:默认 1:仅头文件 2:仅JSON 3:仅伪程序集 | 0最高,3最低 |
| ThreadCount | 1-8 | 大型项目建议4-8线程 | 线程数越高内存占用越大 |
| SearchMethod | 0-1 | 0:快速搜索 1:深度搜索 | 1模式准确率高但速度慢 |
| ForceIl2CppVersion | 24-29 | Unity 5.6+对应24-29 | 版本不匹配时必须指定 |
输出文件应用场景
- il2cpp.h:导入IDA/Ghidra进行类型定义解析
- script.json:用于自动化分析脚本开发,包含完整方法映射
- DummyDll:通过dnSpy加载查看类结构和继承关系
- structs.h:提供二进制级别的数据结构定义
资源地图:学习路径与工具生态
官方文档
- 基础使用:docs/basic.md
- 高级配置:docs/advanced.md
- 版本变更:docs/changelog.md
社区工具集
- IDA插件:tools/ida_plugins/
- Ghidra脚本:tools/ghidra_scripts/
- 自动化分析:tools/auto_analyzer/
学习路径
- IL2CPP内部结构:推荐《Unity IL2CPP Internals》
- 逆向工具链实践:掌握IDA+Ghidra+dnSpy联动使用
- 自动化脚本开发:基于Python解析script.json实现批量分析
- 版本适配技巧:跟踪Unity官方IL2CPP实现变化
【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考