10分钟上手Unity逆向:Il2CppDumper与VS Code轻量级开发指南
你是否还在为Unity游戏的IL2CPP加密而头疼?是否需要一款无需复杂配置就能快速分析游戏逻辑的工具?本文将带你从零构建基于Il2CppDumper的逆向开发环境,通过VS Code实现一站式Unity游戏分析工作流。读完本文你将掌握:
- 3步完成Il2CppDumper环境配置
- 自动化分析Unity游戏的二进制文件
- 生成可直接用于开发的C#伪代码
- 与主流逆向工具(逆向工具A/逆向工具B)无缝协作
项目架构速览
Il2CppDumper采用模块化设计,核心功能分布在以下关键目录:
Il2CppDumper/
├── ExecutableFormats/ # 多平台二进制解析器
│ ├── PE.cs # Windows可执行文件支持
│ ├── Elf.cs # Linux/Android支持
│ └── Macho.cs # macOS/iOS支持
├── Il2Cpp/ # IL2CPP元数据处理
│ ├── Metadata.cs # 元数据解析核心
│ └── Il2CppClass.cs # 类结构定义
└── Outputs/ # 结果生成模块
├── Il2CppDecompiler.cs # 伪代码生成
└── StructGenerator.cs # 结构体导出
核心执行流程由Program.cs控制,通过Main方法协调元数据解析、二进制分析和结果导出三大环节。
环境搭建实战
准备工作
-
安装依赖
- .NET SDK 6.0+
- VS Code及C#扩展
- Unity游戏样本(需包含
global-metadata.dat)
-
获取源码
git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper cd Il2CppDumper -
编译项目
dotnet build Il2CppDumper.sln
关键配置文件
项目配置通过Config.cs管理,核心参数说明:
| 参数名 | 类型 | 作用 |
|---|---|---|
| GenerateStruct | bool | 是否生成C结构体定义 |
| GenerateDummyDll | bool | 生成可引用的伪DLL |
| RequireAnyKey | bool | 执行完成后暂停等待按键 |
核心功能解析
多平台二进制解析
Il2CppDumper支持Windows、Linux、macOS等多平台的Unity游戏文件解析,其核心在于ExecutableFormats目录下的平台适配代码。以Windows平台为例,PE文件解析流程如下:
关键代码位于PEClass.cs,定义了PE文件的结构解析:
public class DosHeader {
public ushort e_magic; // 幻数"MZ"
public uint e_lfanew; // PE头偏移
}
public class SectionHeader {
public string Name; // 节名称
public uint VirtualSize; // 虚拟大小
public uint VirtualAddress; // 虚拟地址
public uint SizeOfRawData; // 原始数据大小
}
自动化逆向流程
Program.cs中的Main方法实现了完整的逆向分析流程,核心步骤包括:
- 文件选择:通过
OpenFileDialog选择游戏主程序和元数据文件 - 初始化解析器:根据文件类型自动选择对应平台的解析器
- 元数据处理:解析
global-metadata.dat获取类型定义 - 代码提取:定位并提取IL2CPP方法实现
- 结果导出:生成伪代码、结构体定义或Dummy DLL
核心代码片段:
// 初始化元数据解析
var metadataBytes = File.ReadAllBytes(metadataPath);
metadata = new Metadata(new MemoryStream(metadataBytes));
// 根据文件类型选择解析器
switch (il2cppMagic) {
case 0x905A4D: // PE文件标识
il2Cpp = new PE(il2CppMemory);
break;
case 0x464c457f: // ELF文件标识
il2Cpp = new Elf(il2CppMemory);
break;
// 其他平台支持...
}
实战案例:分析Unity游戏
基本使用流程
-
准备文件
- 游戏主程序(如
Game.exe) - 元数据文件(
global-metadata.dat)
- 游戏主程序(如
-
执行分析
cd Il2CppDumper/bin/Debug/net6.0 ./Il2CppDumper Game.exe global-metadata.dat output/ -
查看结果
- 伪代码:
output/il2cpp_code/ - 结构体定义:
output/structs.h - Dummy DLL:
output/Assembly-CSharp.dll
- 伪代码:
高级功能:与逆向工具协作
Il2CppDumper提供多种脚本支持主流逆向工具:
-
逆向工具A集成:ida.py提供自动命名和函数创建
def set_name(addr, name): idaapi.set_name(addr, name, idaapi.SN_NOWARN) def make_function(start, end): idaapi.add_func(start, end) -
逆向工具B支持:ghidra.py实现地址解析和函数标记
-
Binary Ninja插件:Il2CppBinaryNinja/目录下提供完整插件
常见问题解决
元数据解析失败
若提示"Metadata file not found or encrypted":
- 确认
global-metadata.dat文件完整 - 尝试使用
--force参数强制解析 - 检查文件是否被Unity加密(某些游戏会加密元数据)
生成DLL无法引用
解决方法:
# 启用令牌添加功能
dotnet run -- GenerateDummyDll=true DummyDllAddToken=true
总结与扩展
Il2CppDumper凭借其轻量化设计和跨平台支持,已成为Unity逆向分析的必备工具。通过本文介绍的方法,你可以快速搭建专业的逆向开发环境。后续可探索:
- 自定义StructGenerator.cs生成特定格式的结构体
- 扩展ExecutableFormats支持新平台
- 开发VS Code扩展实现一键分析功能
项目持续维护中,更多功能请参考README.md和官方文档。如有问题欢迎提交Issue或参与贡献代码!
点赞+收藏本文,关注作者获取更多Unity逆向技巧,下期将带来"Il2CppDumper高级用法:动态调试Unity游戏"。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



