Il2Cpp Dumper 配合 — 从 IL2CPP 二进制生成 dummy dll 喂给 AssetStudio
为什么需要 Il2CppDumper
Unity 现在默认用 IL2CPP 后端打包——C# 代码提前编译成原生机器码,游戏包里没有 Managed 目录。AssetStudio 反序列化 MonoBehaviour 需要程序集目录(DLL 里有类型定义和字段名),但 IL2CPP 游戏没有 DLL。
Perfare 为 AssetStudio 配套写了 Il2CppDumper——它能从 IL2CPP 编译产物里提取所有类型信息,生成假的 DLL(dummy dll),AssetStudio 把这些 dummy dll 当真实 DLL 用就能反序列化 MonoBehaviour。
准备文件
Il2CppDumper 需要两个文件:
| 文件 | 从哪里来 |
|---|---|
libil2cpp.so 或 GameAssembly.dll | 游戏 APK 解压后在 lib/ 目录下(安卓)或游戏根目录下(Windows) |
global-metadata.dat | 游戏 APK 解压后在 assets/bin/Data/Managed/ 目录下 |
完整流程
第一步:准备工作目录
把 APK 当 zip 解开,找到:
APK/
├── lib/arm64-v8a/libil2cpp.so ← IL2CPP 编译产物
└── assets/bin/Data/Managed/
└── global-metadata.dat ← 类型元数据
把这两个文件复制到 Il2CppDumper 的可执行文件所在目录,方便操作。
第二步:跑 Il2CppDumper
Il2CppDumper 也是绿色软件,下载解压后直接运行:
Il2CppDumper.exe
libil2cpp.so ← 第一个参数,IL2CPP 二进制
global-metadata.dat ← 第二个参数,类型元数据
跑起来后 Il2CppDumper 会输出:
| 产物 | 用途 |
|---|---|
DummyDll/ 目录 | 最重要——fake DLL,喂给 AssetStudio 用 |
script.json | 所有脚本的类型定义(可直接搜索) |
DummyAssembly.dll | 所有类型打包在一起的假 DLL |
il2cpp.h | IL2CPP 内部类型头文件(逆向用) |
第三步:喂 dummy dll 给 AssetStudio
回到 AssetStudio,第一次选中 MonoBehaviour 时弹窗让你选程序集目录——直接选 DummyDll 目录就行。AssetStudio 会扫描里面所有 dummy DLL,找到类型定义,然后就能正确反序列化 MonoBehaviour。
版本兼容性
| Unity 版本 | Il2CppDumper 要求 |
|---|---|
| Unity 2017 | Il2CppDumper v5.6+ |
| Unity 2018-2020 | Il2CppDumper v6.0+ |
| Unity 2021+ | Il2CppDumper v6.5+ |
| Unity 6 / 6000.x | 需要最新版 Il2CppDumper(可能还没发布,先用 AssetStudioMod 试试看) |
Il2CppDumper 目前在维护模式,新版本 Unity 出来时更新可能滞后。如果跑 Il2CppDumper 报错:
- 检查 Unity 版本对不对;
- 换最新版 Il2CppDumper;
- 还不行 → 说明 IL2CPP 格式有变化,等社区跟进或手动 patch。
常见问题
Il2CppDumper 跑不起来(闪退 / 报格式错误)
libil2cpp.so架构不对——安卓游戏可能有 arm64-v8a、armeabi-v7a、x86 三种架构,选对你设备的;global-metadata.dat被加密了——部分厂商加了 metadata 加密,Il2CppDumper 打不开;- Unity 版本太新——Il2CppDumper 还没适配。
AssetStudio 喂了 dummy dll 还是解析失败
- dummy dll 是从另一个版本的游戏里生成的——每个游戏版本的 IL2CPP 产物都不一样,必须用对应版本的 Il2CppDumper 产物;
- Unity 版本太新——AssetStudioMod 也可能还没适配新的 TypeTree;
- DummyDll 目录没完整复制——Il2CppDumper 生成的是一个目录(里面一堆 fake dll),不是单个 DummyAssembly.dll。