Il2CppDumper 完整指南:10 分钟还原 Unity IL2CPP 游戏的类结构

📅 2026/8/27 2:10:34
Il2CppDumper 完整指南:10 分钟还原 Unity IL2CPP 游戏的类结构
Il2CppDumper 完整指南10 分钟还原 Unity IL2CPP 游戏的类结构【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper你拿到的游戏目录里有GameAssembly.dll和global-metadata.dat两个文件但用 dnSpy、ILSpy 这类 .NET 反编译工具打开前者只会一片空白。这是 IL2CPP 编译的结果——Unity 把 C# 代码先转成 C 再编译成原生二进制普通反编译器已经读不懂它。Il2CppDumper 就是干这件事的它解析这两个文件把游戏的类、字段、方法、结构体信息还原出来并生成能导入 IDA、Ghidra、Binary Ninja 的分析脚本。写 Unity 游戏想反查接口、做安全研究、学习游戏架构的人都用得上它。下面按装好 → 跑通 → 用输出 → 排错的顺序讲一遍。IL2CPP 让反编译器失效Il2CppDumper 补上这一环先解释两个关键词。IL2CPP 是 Unity 的编译链路C# 代码经中间层转成 C再由编译器产出 PEWindows 可执行文件格式、ELFLinux/Android 可执行文件格式、Mach-OmacOS/iOS 可执行文件格式等原生二进制。global-metadata.dat是 Unity 随游戏一起打包的元数据文件位于Assets/il2cpp_data/Metadata里面存着类型名、方法名、字段等骨架信息但不含代码本身。Il2CppDumper 的工作分三步读global-metadata.dat拿到全部类型、方法、字段的定义定位二进制里的代码注册表把每个方法对应到实际地址把两者拼起来输出dump.cs、可反编译的 DummyDll、供逆向工具用的脚本它支持 Unity 5.3 到 2022.2 的版本区间覆盖下面这些平台的可执行文件平台文件格式文件位置WindowsPE游戏根目录的GameAssembly.dllAndroidELF / ELF64libs/arm64-v8a/libil2cpp.soiOS / macOSMach-O主程序中的UnityFrameworkNintendo SwitchNSO主程序文件工具会自动解压WebWebAssembly.wasm文件各格式的识别与解析逻辑分别放在 ExecutableFormats 目录的PE.cs、Elf.cs、Macho.cs、NSO.cs、WebAssembly.cs等文件里想深入看实现可以从这里入手。安装 Il2CppDumper克隆、编译、拿到可执行文件工具基于 .NET 开发需要 .NET 6.0 或 8.0 SDK。下面命令的作用是把源码克隆到本地git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper编译 Release 版本并产出可执行文件dotnet build -c Release编译完成后可执行文件在Il2CppDumper/bin/Release/net8.0/下连同config.json、ida.py、ghidra.py等脚本一起拷出即可使用。如果不想自己编译也可以直接下载发行版Release里预编译好的压缩包解压即用两者行为一致。第一次运行两个文件加一个输出目录命令行用法只有三个参数——可执行文件、global-metadata.dat、输出目录Il2CppDumper.exe executable-file global-metadata output-directory参数顺序无所谓程序会按文件头魔数自动判断哪个是 metadataProgram.cs里通过0xFAB11BAF识别第三个参数是目录就当作输出目录。以 Windows 版游戏为例假设游戏放在D:\Games\MyGame运行Il2CppDumper.exe D:\Games\MyGame\GameAssembly.dll D:\Games\MyGame\Il2CppData\global-metadata.dat D:\out正常时控制台会依次打印Metadata Version: xxx——识别出的 Unity 版本Il2Cpp Version: xx——选用的二进制解析器版本Searching...——自动搜索代码注册表Dumping...→Done!——开始写出结果如果自动搜索失败程序会退到手动模式提示你输入CodeRegistration和MetadataRegistration两个十六进制基址从 IDA 里搜il2cpp_codegen相关字符串即可定位。另外程序会检测输入是否是内存 dump 出来的文件若是会要求输入 dump 基址这一节后面报错章节细讲。看懂输出dump.cs、DummyDll 和 il2cpp.h输出全部落在你指定的目录里各文件分工如下文件作用dump.cs最核心的文本所有类、字段、方法、偏移的文本转储直接搜索用DummyDll/还原出的 .NET 程序集代码体为空但类型签名完整script.json方法地址表供 ida.py / ghidra.py / Binary Ninja 插件消费il2cpp.hC 结构体头文件描述游戏对象在内存里的布局stringliteral.json所有字符串字面量方便全局搜文案两个主要用法只想知道类和方法长什么样打开DummyDll里的 DLL用 dnSpy、ILSpy 浏览。这是还原的空壳程序集但命名空间、继承关系、方法签名都真实可用它还能配合 UtinyRipper、UABE 提取MonoBehaviour、MonoScript。要看内存布局读il2cpp.h。做内存修改、定位对象字段偏移时这个头文件比任何反编译都准。生成逻辑在 Outputs 目录Il2CppDecompiler.cs负责dump.csStructGenerator.cs负责结构体和 JSONDummyAssemblyExporter.cs负责 DummyDll。把 Il2CppDumper 接进 IDA、Ghidra 或 Binary Ninjadump.cs能告诉你有什么但看不到函数具体怎么实现。要看实现得把方法地址灌进逆向工具这正是那批 Python 脚本干的事。逆向工具脚本 / 插件用法IDAida.pyIDA 7.x 用ida_py3.py在 IDA 里运行自动导入script.json建函数IDAida_with_struct.py额外读取il2cpp.h把结构体应用进 IDAGhidraghidra.py在 Ghidra 脚本窗口运行Ghidraghidra_wasm.py配合 wasm 插件分析.wasm目标Binary NinjaIl2CppBinaryNinja插件目录放到插件目录加载脚本放在项目根目录Il2CppDumper/ida.py、Il2CppDumper/ghidra.py、Il2CppDumper/Il2CppBinaryNinja。标准流程是先用 Il2CppDumper 生成输出 → 在 IDA/Ghidra 里打开游戏的GameAssembly.dll或libil2cpp.so→ 运行对应脚本 → 所有方法名、结构体自动就位然后按名字跳转分析。config.json 里真正有用的几个开关所有行为开关集中在 Il2CppDumper/config.json按需改完再跑即可。默认配置大致如下{ GenerateDummyDll: true, GenerateStruct: true, ForceIl2CppVersion: false, ForceVersion: 16, ForceDump: false, NoRedirectedPointer: false }配置项什么时候用DumpMethod/DumpField/DumpFieldOffset等 7 项控制dump.cs里写不写对应信息嫌文件大就关GenerateDummyDll/GenerateStruct不想生成的产物就设falseDummyDllAddToken是否在 DummyDll 里保留 token 注释RequireAnyKey结束后是否按任意键退出ForceIl2CppVersionForceVersion老版本 il2cpp 二进制识别不准时强制指定解析器版本ForceDump程序没识别出是内存 dump 文件时强制按 dump 处理NoRedirectedPointer部分设备 dump 出的文件指针未重定向需设trueForceIl2CppVersion是最常被忽略的一项。比如 Android 上 Unity 2020 版本的目标可能需要把ForceVersion改成16才能正确解析metadata 版本不受影响只影响二进制解析器的选择。遇到三种报错和内存 dump 文件怎么办这是新手卡得最多的地方按报错逐条对照。1.ERROR: Metadata file supplied is not valid metadata file.选错了文件或global-metadata.dat被游戏加密了。先用十六进制编辑器确认文件头是BAAF11BA小端。若确实被加密解密工作超出本工具范围作者也明确拒绝为此提 issueroot 过的安卓设备可以配合作者的 Zygisk 项目从内存中拿到未加密内容。2.ERROR: Cant use auto mode to process file, try manual mode.自动搜索注册表失败。先确认 PC 目标选的是GameAssembly.dll或*Assembly.dll而不是 exe 本体。确认无误就按提示手动输入两个基址或带着样本去项目 issues 反馈。3.ERROR: This file may be protected.二进制被加了保护壳。通用解法在游戏运行时用内存修改工具如 GameGuardian把libil2cpp.so从进程内存里 dump 出来再用 Il2CppDumper 加载这个 dump 文件可绕过大部分保护。内存 dump 文件会多一步交互。程序检测到 ELF 文件可能是 dump 产物时会打印Detected this may be a dump file.并要求输入 dump 基址十六进制输入0则强制继续。此时ForceDump和NoRedirectedPointer两个配置项就派上用场了含义见上一节的表。用 Il2CppDumper 批量处理多个游戏一次分析一个游戏很快但如果你有十几款游戏要过一遍逐个手动跑就受不了了。命令行接口就是为脚本化的下面脚本的作用是把./games/下每个游戏子目录里的两个文件依次送进工具#!/bin/bash for d in ./games/*/; do name$(basename $d) Il2CppDumper.exe $d/GameAssembly.dll \ $d/Il2CppData/global-metadata.dat \ ./output/$name done注意各游戏目录结构可能不同Android 的 so 在libs/下、metadata 路径也不同建议先用find或目录约定统一一下。每款游戏的输出独立放在output/游戏名/方便后续用dump.cs做跨游戏的文本检索。最后Il2CppDumper 的价值在于它把IL2CPP 游戏没法反编译变成了先还原骨架再进逆向工具看实现。按上面顺序走一遍——装好、跑通、接进 IDA——就能进入日常分析节奏。提醒一句法律边界本内容仅面向安全研究与学习分析对象应限于你有授权或有合法依据的软件避免触碰商业游戏的服务条款。【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考