
3关拿下Unity IL2CPP逆向黑盒Il2CppDumper实战速通指南【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper当你第一次用 dnSpy 打开一个 Unity 手游的安装包却找不到 Assembly-CSharp.dll 时心里大概会咯噔一下——C# 代码去哪了再试着把 libil2cpp.so 拖进反编译器屏幕上只剩一片不知所云的机器码。别慌这不是你操作有误而是 Unity 的 IL2CPP 编译模式把代码焊死进了原生二进制。本文的主角 Il2CppDumperUnity il2cpp 逆向工程工具正是专门用来拆开这个黑盒的钥匙下面用三关带你从零走到进阶。一、先看三个真实卡点卡点一文件对不上。游戏目录里只有 libil2cpp.so 和 global-metadata.dat没有任何 .dll常规反编译工具全部失灵。卡点二格式报错。好不容易跑起工具却弹出Metadata file supplied is not valid metadata file怀疑文件被加密却不知道下一步该干嘛。卡点三反汇编没法看。就算解析成功IDA 里也全是裸地址函数名、结构体、参数类型一概没有等于盲人摸象。这三个问题恰好对应逆向流程的三道关卡先跑通基础解析再学会配置调优最后对抗保护机制。走完这三关你会得到一份能直接喂给 dnSpy、IDA 的地图。二、第一关入门关把黑盒拆成看得懂的 DLL【目标】从libil2cpp.soglobal-metadata.dat还原出完整类型结构。 【准备】一台装有 .NET 环境的电脑以及一个 IL2CPP 模式的 Unity 游戏文件。场景推荐工具理由还原 DLL 类型信息Il2CppDumper唯一能同时吃下二进制与元数据的解析器查看生成的 DLLdnSpy / ILSpy免费、支持浏览命名空间与类结构分析原生函数逻辑IDA Pro / Ghidra配合 Il2CppDumper 生成的脚本使用效果最佳【操作】先克隆项目并确认命令行用法git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper/Il2CppDumper Il2CppDumper.exe libil2cpp.so global-metadata.dat output程序会自动识别文件格式ELF、Mach-O、PE、NSO、WASM 都在支持列表内对应解析逻辑可查看源码中的ExecutableFormats目录随后在当前目录生成DummyDll文件夹、dump.cs、il2cpp.h以及script.json等文件。【验收】用 dnSpy 打开output/DummyDll下的 DLL左侧导航树里能看到完整的命名空间、类和字段。走到这一步说明类型信息已经重建成功。为什么这么做IL2CPP 把 C# 编译成 C 再压成机器码但类型元数据仍留在 global-metadata.dat 里。Il2CppDumper 就像一本字典把两边对照起来翻译。这好比拿到一封密信so 文件和一本密码本metadata对上了才能读出正文。三、第二关进阶关用 config.json 调出你要的细节【目标】控制输出内容让 dump.cs 按需包含方法、字段、偏移量等。 【准备】打开程序同目录下的config.json对应源码Config.cs中定义的属性。{ DumpMethod: true, DumpField: true, DumpProperty: true, DumpAttribute: true, DumpFieldOffset: true, DumpMethodOffset: true, DumpTypeDefIndex: true, GenerateDummyDll: true, GenerateStruct: true, DummyDllAddToken: true, RequireAnyKey: true, ForceIl2CppVersion: false, ForceVersion: 24.3, ForceDump: false, NoRedirectedPointer: false }【操作】按需开关做热更新分析把DumpMethodOffset、DumpFieldOffset设为true输出每个方法/字段的偏移地址只想要类型骨架关掉DumpMethod与DumpField输出更精简批量脚本调用把RequireAnyKey改为false命令结束后不会阻塞等待按键。【验收】重新运行同一命令对比 dump.cs 中是否多出了偏移量与 TypeDefIndex 列。为什么这么做dump.cs 是后续喂给 IDA/Ghidra 的原材料信息越全脚本标注越准确。这就像装修前先画户型图——你想要的插座位置偏移标得越细后期施工逆向分析越省心。四、第三关高手关对战加密 metadata 与加壳 so【目标】绕过常见保护让工具在异常输入下也能出结果。 【准备】一台 Root 的 Android 设备或模拟器加上 GameGuardian 类工具。【操作】按以下优先级排查内存 dump 绕过加壳用 GameGuardian 从游戏内存中导出libil2cpp.so再交给 Il2CppDumper 加载。程序检测到 dump 文件后会提示输入 dump 地址输入 0 可强制继续强制指定版本旧版 Unity 可能出现解析器选错的情况把ForceIl2CppVersion设为true并手动填ForceVersion手动模式兜底如果自动模式报Cant use auto mode to process file, try manual mode按提示输入CodeRegistration与MetadataRegistration两个地址可在 IDA 中查找il2cpp_codegen_register的调用点获得IDA 脚本协同解析成功后在 IDA 中执行File - Script command运行ida_with_struct.py它会读取il2cpp.h并把结构体、函数名批量标进反汇编视图。【验收】在 IDA 的函数列表里能看到带原始方法名的符号反汇编代码被注释为有意义的调用而不是一串裸地址。为什么这么做商业游戏普遍对 so 与 metadata 做保护直接在磁盘上解析当然失败。从内存 dump 拿到的数据是运行时真身等价于用 X 光拍下了保险柜打开时的内部结构再笨的办法也架不住拿到原件。五、翻车现场三条高频错误姿势❌错误做法拿到报错就认定工具坏了反复重跑原命令。 原因分析Metadata file supplied is not valid八成是 metadata 被加密或篡改工具本身无法解密版本校验逻辑见Il2Cpp/Metadata.cs中的魔数检查。 ✅正确姿势先确认文件未被混淆再走内存 dump 路线。❌错误做法用 Dummy DLL 找游戏的核心逻辑代码。 原因分析Dummy DLL 只含类型与签名不含方法体——它本就不是反编译器。 ✅正确姿势类型信息交给 dnSpy 看函数逻辑交给 IDA/Ghidra 看两者配合。❌错误做法无视平台差异拿同一个参数硬套所有游戏。 原因分析PC 版可执行文件是GameAssembly.dllAndroid 是 ELF 格式的 soiOS 是 Mach-O格式识别失败自然报错。 ✅正确姿势先确认平台必要时用ExecutableFormats目录下的对应解析类排查。六、成果验收清单成功解析 libil2cpp.so 与 global-metadata.dat无报错退出用 dnSpy 打开了 DummyDll 并定位到目标类在 dump.cs 中看到方法偏移量与字段偏移量在 IDA 中跑通ida_with_struct.py函数被正确命名。如果以上四项全部勾选恭喜你已经摸清了 Unity IL2CPP 逆向的完整链路。拆黑盒从来不是魔法而是把二进制 元数据两本账对上号的过程——现在你手里的工具链足够应付绝大多数实战场景。本文内容仅供学习与研究使用请遵守项目许可协议与相关法律法规。【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考