news 2026/8/27 10:19:32

Il2CppDumper 使用指南:用两个文件逆向 Unity IL2CPP 游戏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Il2CppDumper 使用指南:用两个文件逆向 Unity IL2CPP 游戏

Il2CppDumper 使用指南:用两个文件逆向 Unity IL2CPP 游戏

【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper

你手里有一款 Unity 游戏,C# 代码已被 IL2CPP 编译成 C++。你拿到的只有GameAssembly.dlllibil2cpp.so,传统 C# 反编译器对这种二进制无能为力——类名、方法、字段信息全都藏在二进制和元数据里。Il2CppDumper 就是为这种情况准备的逆向工具:给它 IL2CPP 可执行文件和global-metadata.dat,它能还原全部类型、方法签名和字段定义(不含方法体代码),并顺带生成可直接导入 IDA、Ghidra、Binary Ninja 的脚本和结构体头文件。

它支持 PE、ELF、ELF64、Mach-O、NSO、WASM 六种可执行格式,覆盖 Windows、Android、iOS/macOS、Switch 和 Web 平台,兼容 Unity 5.3 至 2022.2 的元数据版本(新版 il2cpp 支持也在持续跟进)。

环境准备与安装

你只需要 .NET 6.0 或 8.0 运行时,源码用 CLI 直接编译,没有额外的依赖步骤:

git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper dotnet build -c Release

编译完成后,可执行文件位于Il2CppDumper/bin/Release/net8.0/目录。在 Windows 上双击它可进入交互模式(弹出文件选择框);在 Linux/macOS 上则走命令行。

第一次完整运行:输入两个文件,得到一个输出目录

先记住一条命令行格式,后面所有场景都从它展开:

Il2CppDumper.exe <可执行文件> <global-metadata.dat> <输出目录>

以 Windows 版游戏为例,三个参数分别是什么:

  1. 可执行文件——各平台对应的文件不一样:Windows 是GameAssembly.dll*Assembly.dll(注意不是游戏主程序 exe);Android 是libil2cpp.so;iOS/macOS 是 UnityFramework 内的二进制;Switch 是 NSO 格式的主程序文件;Web 是.wasm文件。
  2. 元数据文件——global-metadata.dat,通常在游戏目录的Data/Managed/下,Android 在il2cpp_data/下。
  3. 输出目录——省略则输出到程序当前目录。

程序会根据文件头自动识别格式,不需要你手动声明。如果它判断出你喂的是一个内存 dump 文件(比如 ELF),会提示你输入内存基地址;交互模式下 Mach-O Fat 二进制还会让你选 32 位或 64 位。

运行完成后,输出目录里有什么

跑完之后按使用顺序看这几组文件,比孤立地记住文件名更容易上手:

  • DummyDll/:还原出的程序集文件夹,用 dnSpy 或 ILSpy 打开,能逐类查看类型、方法、字段和特性。方法体是空的,只有签名。这个文件夹也是提取MonoBehaviour/MonoScript引用的来源,资产提取工具常依赖它。
  • dump.cs:全部元数据的文本版,方法偏移、字段偏移都在里面,适合直接grep定位目标方法。
  • il2cpp.h:C++ 结构体头文件,描述全部类的内存布局。
  • script.json + ida.py / ghidra.py / Il2CppBinaryNinja/:把script.json配合对应脚本导入逆向工具,方法地址会自动命名、类型自动应用。WASM 目标用ghidra_wasm.py
  • ida_with_struct.py / ghidra_with_struct.py:在 IDA 或 Ghidra 里读取il2cpp.h并套用结构体信息。
  • stringliteral.json:全部字符串字面量清单,搜字符串定位代码时很实用。

报错了怎么办

ERROR: Metadata file supplied is not valid metadata file.说明global-metadata.dat选错了,或者游戏对它做了加密混淆。先确认文件本身是否拿对;如果文件确实被加密,这个程序不负责解密,去找未加密的来源或对应的解密方案。Android 场景下,有 root 设备可以直接从内存里取未加密的文件来绕过。

ERROR: This file may be protected.可执行文件带保护。用 GameGuardian 一类的工具从游戏内存中 dump 出libil2cpp.so,再交给 Il2CppDumper 加载,按提示输入基地址,可绕过大部分保护。已 root 的设备同样有专门方案可绕几乎全部保护。

ERROR: Can't use auto mode to process file, try manual mode.自动搜索注册入口失败了。最常见的原因是选错可执行文件——Windows 平台必须是*Assembly.dll。若确认文件没错,程序接下来会提示手动输入 CodeRegistration 和 MetadataRegistration 两个地址,通过其他方式(调试器断点等)拿到后填入即可继续。

从能用到用好

💡 所有行为开关都在可执行文件旁边的config.json里,日常最常动的是三组:

  • 强制版本:低版本 il2cpp 的二进制可能选不对解析器,把ForceIl2CppVersion设为true,再用ForceVersion指定版本号,例如 Android v20 的二进制设成 16 才能正常工作。
  • dump 文件:加载内存 dump 时把ForceDump设为true强制识别;部分设备 dump 出的文件还需NoRedirectedPointertrue,把指针当未重定向处理。
  • 输出控制DumpMethodDumpFieldDumpMethodOffset等决定 dump.cs 里输出哪些信息;GenerateDummyDllGenerateStructGenerateScript控制对应产物是否生成;DummyDllAddToken控制是否附带 token。

批量处理一批游戏,套一层循环就行:

for game in ./games/*; do ./Il2CppDumper "$game/GameAssembly.dll" \ "$game/Data/Managed/global-metadata.dat" \ "./output/$(basename "$game")" done

谁适合用它

  • 安全研究员:先还原类型与方法全貌,再回 IDA 定位验证、反作弊相关逻辑。
  • 游戏机制学习者:用 ILSpy 浏览 DummyDll,看类层次和方法签名,理解一款游戏的整体结构。
  • 资产工具链用户:从 DummyDll 提取MonoBehaviour/MonoScript的引用信息,喂给资源提取工具。

边界与提醒

⚠️ 工具的 il2cpp 版本必须与目标游戏匹配,解析不到关键数据时优先尝试ForceVersion参数。另外请只把逆向结果用于安全研究、学习和个人用途,遵守相关平台的服务条款,分析前备份原始文件。

下一步

当你能走通"两个文件 → 输出目录 → 导入 IDA"这条链路,基本流程就通了。接下来挑一个体积较小的 IL2CPP 游戏,把从 dump 到逆向工具里看见函数名的完整流程亲手做一遍。

【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 10:19:18

SpringBoot+JDK17实战:从零构建采购管理系统

1. 背景与项目价值 1.1 为什么要做采购管理系统 在校招、社招简历里&#xff0c;“管理系统”类项目永远是出镜率最高的选题之一。但在实际面试中&#xff0c;面试官最常问的一句话是&#xff1a;“这个系统是你自己从头写的吗&#xff1f;核心模块有哪些&#xff1f;有没有遇…

作者头像 李华
网站建设 2026/8/27 10:18:03

FCC认证BLE模块AMB2621开发实战:从硬件设计到认证合规

1. 项目概述与模块选型思考 1.1 FCC-Certified AMB2621 Bluetooth Smart Module 到底是什么 做硬件这行久了&#xff0c;你会发现一个很有意思的现象&#xff1a;很多刚入行的工程师拿到一个蓝牙模块&#xff0c;第一反应是翻datasheet看引脚定义、看AT指令集、看电流参数&…

作者头像 李华
网站建设 2026/8/27 10:17:55

组合数计算全攻略:从原理到实战的决策框架与避坑指南

1. 项目概述&#xff1a;为什么我们需要“一张图全解组合数”&#xff1f; 组合数&#xff0c;这个在高中数学课本里就出现的概念&#xff0c;对很多人来说&#xff0c;可能就停留在 C(n, m) 这个符号和 n! / (m! * (n-m)!) 这个公式上。当年考试&#xff0c;背下来、会算&…

作者头像 李华
网站建设 2026/8/27 10:17:18

基于SpringBoot的面试刷题平台系统的设计与实现毕业设计项目源码

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/8/27 10:16:25

蓝桥杯国赛CB组真题深度解析:从算法思维到实战技巧

1. 从“刷题”到“破局”&#xff1a;深度复盘2022蓝桥杯国赛CB组真题又到了备赛季&#xff0c;看着手边一沓沓的真题&#xff0c;你是不是也感觉陷入了“刷题-遗忘-再刷题”的循环&#xff1f;特别是像蓝桥杯国赛这种级别的竞赛&#xff0c;题目早已超越了基础语法的考查&…

作者头像 李华
网站建设 2026/8/27 10:13:10

MATLAB数据处理:从算数思维到建模思维的工程化实践

1. 从“算数”到“建模”&#xff1a;MATLAB数据处理的核心思维转变 很多刚开始接触数学建模的同学&#xff0c;拿到MATLAB的第一反应往往是&#xff1a;这不就是个高级计算器吗&#xff1f;输入几个数&#xff0c;调用几个函数&#xff0c;得出结果。这种想法在应对简单作业时…

作者头像 李华