Il2CppDumper 快速上手指南:三步完成一次 Unity GameAssembly 分析
【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper
用 dnSpy 或 ILSpy 打开从游戏包里取出的 GameAssembly.dll,模块几乎是空壳:没有命名空间、没有类型、一个方法都看不到。原因是 Unity 的 IL2CPP(把 C# 代码转成 C++ 再编译的机制)在二进制里不留可反编译的字节码,传统 .NET 反编译路线在此失效。Il2CppDumper 正是为这个局面写的逆向工具:它以游戏携带的 global-metadata.dat 为线索,对照编译后二进制里的地址,把丢失的类型与结构还原出来。本文带你从零跑通一次完整分析。
定位与输入输出 🔍
一句话理解:Il2CppDumper 是"IL2CPP 结构还原器",输入两份文件,输出可读的类库和逆向辅助产物,适合做 Unity 逆向、IL2CPP 反编译与安全研究的人使用。
- 输入:IL2CPP 二进制(GameAssembly.dll / libil2cpp.so 等)+ global-metadata.dat
- 输出:DummyDll/ + dump.cs + il2cpp.h + script.json + ida.py / ghidra.py
上手三步 ⚡
第一步:拿到程序
需要 .NET SDK,克隆后编译即可(中文说明见 README.zh-CN.md):
git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper dotnet build -c Release第二步:执行命令
三个参数分别是 IL2CPP 二进制、元数据文件、输出目录:
Il2CppDumper <executable-file> <global-metadata> <output-directory>Windows 下不带参数直接运行则会弹出文件选择对话框,按提示依次挑文件即可,适合不习惯命令行的场景。
第三步:看结果
控制台依次打印 Metadata Version、Il2Cpp Version、Searching...,最后到 Done! 即完成,产物全部落在你指定的输出目录里。
产物说明:各文件拿来做什么 📦
- DummyDll/:还原后的程序集文件夹。类、方法、字段签名齐全但没有方法体,可用 dnSpy / ILSpy 直接阅读;也是提取 MonoBehaviour、MonoScript 时匹配资产的关键依据。
- dump.cs:纯文本转储,方法、字段、属性等明细是否输出可由配置控制,方便全文搜索定位。
- il2cpp.h:C++ 结构体头文件,描述每个类的成员布局,配合 ida.py 一类的脚本能把结构自动套进 IDA。
- script.json:地址与方法表数据,ida.py、ghidra.py 和 Binary Ninja 插件都消费它来完成批量重命名。
- stringliteral.json:全部字符串常量清单,快速定位二进制里的字面量。
常见报错怎么排查 🛠️
Metadata file supplied is not valid metadata file:先确认没拿错文件(应为游戏包内与二进制配套的 global-metadata.dat);若文件头签名不对,多半是游戏对元数据做了混淆或加密,这超出本工具的解密范围,root 环境下可改用内存提取工具拿未混淆的副本再分析。This file may be protected:二进制带防篡改保护。用 GameGuardian 一类工具从游戏运行内存中 dump 出 libil2cpp.so,再以 dump 文件作为输入,程序询问基地址时按提示填入(或输 0 强制继续)。Can't use auto mode to process file, try manual mode:自动搜索注册地址失败。程序会要求手动输入 CodeRegistration 与 MetadataRegistration 两个地址,可在 IDA 里定位后填入;同时复查是否选错了可执行文件,PC 平台应为 GameAssembly.dll 或 *Assembly.dll。- 解析结果与预期版本不符:老版本二进制可能要用旧解析器,通过配置强制指定解析版本号即可。
进阶:配置、批量与平台对照 🧩
所有开关集中在 config.json,常用项:
DumpMethod/DumpField/DumpAttribute等:控制 dump.cs 里输出哪些明细GenerateDummyDll/GenerateScript:开关对应产物的生成ForceDump:强制按"内存 dump 文件"处理输入NoRedirectedPointer:部分设备 dump 出来的指针未重定位时需置 trueForceIl2CppVersion+ForceVersion:手动指定 IL2CPP 解析器版本
批量处理不必另找工具:命令行形态本身无状态,用 shell 循环把多个游戏目录轮流喂给同一条命令即可;需要针对老版本调ForceVersion时,也可在批处理里先改写 config.json 再运行。
各平台目标文件对照:
| 平台 | 目标文件 | 二进制格式 |
|---|---|---|
| Windows PC | GameAssembly.dll | PE |
| Android | libil2cpp.so | ELF / ELF64 |
| iOS / macOS | UnityFramework | Mach-O |
| Nintendo Switch | 主程序 .nso | NSO |
| WebAssembly 应用 | .wasm 文件 | WASM |
使用边界 ⚖️
- 仅用于安全研究、学习或你拥有权利的项目分析
- 不用于制作作弊工具、盗版或牟利性破解
- 不公开传播反编译得到的代码与资产
- 在隔离环境中操作,分析前备份原始文件
收尾
Il2CppDumper 把不透明的 IL2CPP 二进制变回可读类库。挑一款游戏实战完整 dump。
【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考