Il2CppDumper:Unity il2cpp逆向工程完全指南
核心功能解析
Il2CppDumper作为一款针对Unity il2cpp的逆向工程工具,提供了全面的元数据提取与代码还原能力。该工具通过解析il2cpp可执行文件和全局元数据,实现对Unity应用程序的类型定义、方法实现、字段布局等关键信息的提取与重建。
元数据解析引擎
元数据解析引擎是Il2CppDumper的核心组件,负责处理global-metadata.dat文件。该模块能够识别并提取IL2CPP运行时所需的各类元数据信息,包括类型定义、方法签名、字段描述以及属性信息等。通过精准解析元数据结构,工具能够重建原始C#代码的类型层次和成员关系。
⚠️ 注意:元数据解析对文件版本兼容性要求较高,不同Unity版本生成的元数据结构可能存在差异。
常见问题
Q: 元数据解析失败提示"invalid metadata version"如何解决?
A: 此问题通常由于元数据版本与工具不兼容导致。可尝试启用ForceIl2CppVersion配置项并指定正确的Unity版本号,如"2019.4.0"。
可执行文件分析器
可执行文件分析器支持多种平台格式,包括Windows PE、Linux ELF、macOS Mach-O以及WebAssembly等。该组件能够定位并提取il2cpp代码段、方法表、字符串字面量等关键数据,为后续的代码还原提供基础。
常见问题
Q: 分析ELF文件时提示"section .il2cpp not found"如何处理?
A: 该错误表示在目标文件中未找到il2cpp专用段。可能原因包括:文件不是il2cpp编译产物、加壳保护或段名被修改。可尝试使用SearchSection工具手动指定代码段范围。
代码生成模块
代码生成模块负责将解析得到的元数据和代码信息转换为可阅读的C#代码和辅助脚本。该模块支持生成结构体定义、方法声明、字段布局等内容,并可选择生成用于逆向工具(如IDA、Ghidra)的辅助脚本。
常见问题
Q: 生成的Dummy DLL无法被反编译工具识别怎么办?
A: 确保配置中GenerateDummyDll和DummyDllAddToken均设置为true。生成的DLL文件需与原始程序集名称保持一致,且需放置在反编译工具的默认搜索路径下。
操作流程指南
执行基础提取流程
基础提取流程适用于大多数常规逆向场景,可快速获取目标程序的基本结构信息。
-
准备工作文件
收集目标应用程序的两个核心文件:- il2cpp可执行文件(如
libil2cpp.so、GameAssembly.dll等) - 元数据文件
global-metadata.dat
- il2cpp可执行文件(如
-
运行提取命令
在工具目录下执行以下命令启动提取流程:./Il2CppDumper -
文件选择交互
程序启动后将提示选择il2cpp可执行文件和元数据文件,按提示分别输入文件路径或通过文件选择对话框选择。 -
等待处理完成
工具将自动分析文件并生成输出,处理进度会实时显示。完成后将在当前目录生成以下文件:il2cpp.h:类型和方法定义头文件script.json:元数据信息JSON文件DummyDll目录:包含生成的Dummy DLL文件
⚠️ 注意:处理大型应用可能需要较长时间,请确保程序有足够的内存和磁盘空间。
进阶操作指南
进阶操作适用于需要自定义提取规则或处理复杂场景的用户。
-
使用命令行参数
直接通过命令行参数指定输入文件和配置,跳过交互过程:./Il2CppDumper --executable=./libil2cpp.so --metadata=./global-metadata.dat --config=custom.json -
批量处理模式
通过配置文件设置批量处理规则,实现多文件自动化提取:./Il2CppDumper --batch=batch_config.json -
集成逆向工具
生成适用于逆向分析工具的辅助脚本:- IDA Pro:
ida.py或ida_with_struct.py - Ghidra:
ghidra.py或ghidra_with_struct.py - Binary Ninja:
il2cpp_header_to_binja.py
使用方法示例(IDA Pro):
- 在IDA中加载目标二进制文件
- 执行
File > Script file... - 选择生成的
ida_with_struct.py脚本 - 脚本将自动导入类型定义和函数签名
- IDA Pro:
⚠️ 注意:不同逆向工具的脚本需匹配对应版本,使用前请确认脚本兼容性。
高级配置技巧
解析配置文件参数
配置文件config.json提供了丰富的参数选项,可精确控制提取行为。以下是主要配置项说明:
| 配置项 | 类型 | 默认值 | 推荐设置 | 说明 |
|---|---|---|---|---|
| DumpMethod | bool | true | true | 控制是否输出方法信息 |
| DumpField | bool | true | true | 控制是否输出字段信息 |
| DumpProperty | bool | true | true | 控制是否输出属性信息 |
| DumpAttribute | bool | true | false | 控制是否输出自定义属性信息 |
| DumpFieldOffset | bool | false | true | 控制是否输出字段偏移量 |
| DumpMethodOffset | bool | false | true | 控制是否输出方法偏移量 |
| DumpTypeDefIndex | bool | false | false | 控制是否输出类型定义索引 |
| GenerateDummyDll | bool | true | true | 控制是否生成Dummy DLL |
| GenerateScript | bool | true | true | 控制是否生成逆向工具脚本 |
| DummyDllAddToken | bool | true | true | 控制是否在Dummy DLL中添加Token信息 |
| RequireAnyKey | bool | true | false | 控制程序结束时是否需要按任意键退出 |
| ForceIl2CppVersion | bool | false | false | 控制是否强制使用指定IL2CPP版本 |
| ForceVersion | string | "" | 空值 | 当ForceIl2CppVersion为true时指定IL2CPP版本号 |
⚠️ 注意:配置文件修改后需重启程序才能生效。建议修改前备份原始配置。
性能优化配置
对于大型项目,可通过以下配置优化提取性能:
-
选择性提取
禁用不需要的输出项,减少处理时间和内存占用:{ "DumpAttribute": false, "DumpTypeDefIndex": false, "GenerateScript": false } -
内存控制
在处理超大文件时,可通过环境变量限制内存使用:export IL2CPPDUMPER_MAX_MEMORY=4096 # 单位:MB ./Il2CppDumper -
增量提取
通过设置IncrementalMode(实验性功能)实现增量提取,仅处理变更部分:{ "IncrementalMode": true, "IncrementalCachePath": "./cache" }
常见问题
Q: 处理大型文件时出现内存溢出如何解决?
A: 除增加系统内存外,可尝试:1) 禁用不必要的输出项;2) 启用增量提取模式;3) 使用64位版本的工具;4) 分阶段提取不同模块。
版本兼容性处理
不同Unity版本的IL2CPP实现存在差异,处理时需注意版本兼容性:
-
Unity 5.x-2017.x
这些版本的元数据结构较为稳定,但需注意32位与64位的区别。推荐配置:{ "ForceIl2CppVersion": true, "ForceVersion": "2017.4.39" } -
Unity 2018.x-2019.x
引入了新的元数据格式,需使用支持v2格式的工具版本。推荐配置:{ "ForceIl2CppVersion": true, "ForceVersion": "2019.4.0" } -
Unity 2020.x及以上
元数据结构变化较大,需使用最新版本的Il2CppDumper。推荐配置:{ "ForceIl2CppVersion": true, "ForceVersion": "2020.3.0" }
⚠️ 注意:版本号需精确到次要版本,如"2019.4.39"而非"2019.4"。
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