ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Unity IL2CPP 逆向工具 Il2CppDumper:3 步走通从 GameAssembly.dll 到分析产物的完整工作流

Unity IL2CPP 逆向工具 Il2CppDumper:3 步走通从 GameAssembly.dll 到分析产物的完整工作流 Unity IL2CPP 逆向工具 Il2CppDumper3 步走通从 GameAssembly.dll 到分析产物的完整工作流【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper拿到目标游戏的 GameAssembly.dll用 dnSpy 打开提示格式不支持ILSpy 也解析不了程序集。这是因为游戏走的是 IL2CPP把 C# 字节码翻译成 C 再编译为原生代码的管线原始的 IL 元数据已经不在二进制内部。IL2CPP 逆向工具 Il2CppDumper 就是针对这个场景它把原生二进制和 global-metadata.dat 对照起来重建类型体系并产出后续二进制分析所需的文件。工具定位IL2CPP 反编译与普通反编译的差距传统 C# 反编译器读取程序集内的 IL还原出可读代码。IL2CPP 产物里没有这一层类型信息搬进了 global-metadata.dat方法体已编译为原生指令。Il2CppDumper 不提供反编译出的 C#而是基于元数据数据库重建类型地图给出结构体定义和原生偏移供二进制阶段使用。对比项传统 C# 反编译器Il2CppDumper输入.NET 程序集IL 字节码原生二进制 global-metadata.dat输出可读 C# 源码dump.cs、il2cpp.h、DummyDll 等方法体可还原只有签名与原生偏移适用对象纯 C# / Mono 工程IL2CPP 编译的 Unity 游戏️ 编译并运行 Il2CppDumpergit clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper dotnet build -c Release工程同时面向 net6.0 与 net8.0 目标装好对应 .NET SDK 即可编译。产物在输出目录 bin/Release/net8.0 下可执行文件、config.json以及 ida.py、ghidra.py 等脚本模板。不带参数直接运行Windows 上会进入选择文件的对话框模式。 从输入文件到输出产物global-metadata.dat 解析全流程第 1 步准备两个输入。一个是 IL2CPP 可执行文件Windows 是 GameAssembly.dllAndroid 是 libil2cpp.so另一个是 global-metadata.dat位置因平台而异一般在游戏的数据目录里。程序通过文件头魔数0xFAB11BAF自动区分两者命中魔数按元数据处理否则按二进制处理。第 2 步三参数运行。Il2CppDumper.exe GameAssembly.dll global-metadata.dat output/参数可省略进入对话框模式输出目录缺省时默认为可执行文件所在目录。第 3 步按用途读四类产物。dump.cs类型、方法、字段签名的完整文本适合直接搜索类名和 API。DummyDll/用 Mono.Cecil 重建的空壳程序集组放进 dnSpy 或 ILSpy 浏览类层级、命名空间与源工程一致。il2cpp.h包含全部 C 结构体定义的头部文件导入反汇编器做类型标注。script.json ida.py / ghidra.pyJSON 存地址表脚本在逆向工具里读取它批量注册类型、函数和 vtable。前两类服务于看结构后两类服务于分析原生代码。以最常见的 GameAssembly 分析为例四类产物一次全部生成不需要分平台重复处理。 多平台文件对照Windows 到 WASM平台常见文件名二进制格式WindowsGameAssembly.dllPEAndroidlibil2cpp.soELF / ELF64iOS / macOSUnityFrameworkMach-ONintendo Switch主程序文件NSOWebAssembly目标 .wasm 文件WASM项目对上述格式分别做了解析器换成对应平台文件后后续流程完全一致。⚙️ config.json 进阶开关与高频报错排查可执行文件启动时读取同目录的 config.json开关较多最常用的是这三个GenerateDummyDll是否生成 DummyDll 空壳程序集。只要签名文本就关掉能省时间。DumpMethodOffset / DumpFieldOffset是否输出方法、字段的原生偏移与二进制对照时必备默认保持开启。ForceIl2CppVersion ForceVersionIL2CPP 版本没被正确识别时手动指定版本号强制解析。两个高频报错ERROR: Metadata file supplied is not valid metadata file元数据头部校验失败。先确认选中的确实是 metadata 文件文件头魔数应为 0xFAB11BAF文件完好但校验仍失败说明游戏加密了 metadata需要从进程内存等途径取得未加密版本再解析。ERROR: This file may be protected解析 ELF 分段时报出通常 .so 被加密或段结构被改动。处理思路一从运行中的进程内存 dump 出原始文件再分析思路二与同版本未加密构建做段表比对定位被改动的部分。 实战分析一款 Android 手游的 IL2CPP 结构解包 APK取出lib/arch/下的 libil2cpp.so 与 il2cpp_data 数据目录中的 global-metadata.dat。先做 metadata 头部校验校验不过就走内存 dump拿到有效文件。两文件放入工作目录用命令行执行解析并指定输出目录。先读 dump.cs抽查类名与命名空间是否符合预期再打开 DummyDll 确认类层级与继承关系。在 Ghidra 或 IDA 中加载二进制与 script.json运行对应脚本完成类型注册。选一个已知核心方法例如游戏主循环入口确认地址与签名标注正确后再展开细化分析。上下游工具定位dnSpy / ILSpy消费 DummyDll负责类型体系与属性信息的浏览不涉及原生代码。IDA / Ghidra消费 il2cpp.h 与 script.json负责原生代码阶段的类型标注与函数级分析。Zygisk-Il2CppDumperAndroid 环境位于 Il2CppDumper 上游从进程内存 dump 未加密的二进制与 metadata解决输入文件无效的问题。合规边界分析对象应是你有权检查的软件用途限于安全研究、技术学习与自有产品的兼容性维护。尊重游戏开发者的版权不把分析结果用于破解保护或批量提取数据。对外发布衍生产物与研究结论前确认符合相关平台条款与适用地区法规。流程的输入固定为两个文件输出固定为一套产物难度集中在版本匹配与受保护文件的获取上。跑通一次之后新的目标基本是重复同一流程。建议先自己用 Unity 做一个 IL2CPP 小工程导出 GameAssembly.dll 和 global-metadata.dat把上面的步骤完整走一遍。【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进