首页
/ 新手入门Il2CppDumper:10分钟快速掌握Unity逆向工具使用方法

新手入门Il2CppDumper:10分钟快速掌握Unity逆向工具使用方法

2026-02-04 04:52:50作者:劳婵绚Shirley

你还在为Unity游戏逆向时找不到合适的工具而烦恼?是否面对加密的global-metadata.dat文件束手无策?本文将带你10分钟掌握Il2CppDumper的核心使用方法,从环境搭建到高级配置,一站式解决Unity IL2CPP二进制文件的解析难题。读完本文你将能够:

  • 正确配置Il2CppDumper运行环境
  • 掌握命令行与图形界面两种操作方式
  • 理解输出文件结构与实用场景
  • 解决常见错误如"Metadata file not found"
  • 定制化生成C++头文件与JSON分析数据

工具简介与工作原理

Il2CppDumper是一款针对Unity IL2CPP编译产物的逆向工程工具,能够从二进制可执行文件(如libil2cpp.soGameAssembly.dll)和元数据文件(global-metadata.dat)中提取类型定义、方法签名和字段信息,生成可供逆向工具使用的辅助文件。

核心功能架构

flowchart TD
    A[输入文件] -->|PE/ELF/Mach-O| B[二进制解析模块]
    A -->|global-metadata.dat| C[元数据解析模块]
    B --> D[代码注册信息搜索]
    C --> E[类型定义提取]
    D --> F[方法指针解析]
    E --> F
    F --> G[输出模块]
    G -->|C++头文件| H[il2cpp.h]
    G -->|JSON数据| I[script.json]
    G -->|伪代码文件| J[DummyDll]

支持的文件格式

Il2CppDumper通过模块化设计支持多种平台的可执行文件格式:

  • Windows:PE格式(.exe.dll
  • Linux/Android:ELF格式(.so
  • macOS/iOS:Mach-O格式(.dylib.framework
  • WebAssembly:WASM模块(.wasm
  • Switch:NSO格式(.nso

环境搭建与准备工作

系统要求

  • 操作系统:Windows 10/11、Linux(Ubuntu 20.04+)或macOS 12+
  • 运行时:.NET 6.0 SDK或更高版本
  • 硬件:至少4GB内存(解析大型游戏时建议8GB+)

安装步骤

# 1. 克隆仓库
git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper.git
cd Il2CppDumper

# 2. 构建项目
dotnet build Il2CppDumper/Il2CppDumper.csproj -c Release

# 3. 验证安装
cd Il2CppDumper/bin/Release/net6.0
./Il2CppDumper --help

必要文件准备

逆向Unity游戏需要两个关键文件,通常可在游戏安装目录中找到:

文件路径 典型位置 作用
global-metadata.dat Data/Managed/Metadata 存储类型、方法元数据
libil2cpp.so lib/armeabi-v7a 编译后的C++代码
GameAssembly.dll 游戏根目录 Windows平台可执行文件

提示:Android游戏需从APK中提取lib/assets/bin/Data/Managed目录;iOS应用需通过IPA解压获取可执行文件。

快速上手:3种启动方式

1. 图形界面模式(推荐新手)

Windows系统下直接双击Il2CppDumper.exe启动,将依次弹出文件选择对话框:

  1. 选择IL2CPP二进制文件(如GameAssembly.dll
  2. 选择元数据文件(global-metadata.dat
  3. 选择输出目录(默认为程序当前目录)

2. 命令行基础用法

# 完整参数格式
Il2CppDumper <binary-file> <metadata-file> <output-directory>

# 示例:解析Android游戏
Il2CppDumper libil2cpp.so global-metadata.dat ./output

3. 高级配置文件方式

创建config.json自定义输出选项:

{
  "GenerateStruct": true,
  "GenerateDummyDll": true,
  "ForceIl2CppVersion": false,
  "RequireAnyKey": true
}

使用配置文件启动:

Il2CppDumper --config config.json

输出文件解析与应用场景

成功运行后,输出目录将生成以下关键文件:

核心输出文件说明

文件名 类型 用途
il2cpp.h C++头文件 包含所有类型定义与函数声明,用于逆向工具类型重建
script.json JSON数据 方法地址与签名映射,可导入逆向工具生成函数名
DummyDll.dll 伪程序集 包含类型骨架,用于dnSpy等工具查看类结构
stringliteral.json 字符串数据 存储所有字符串字面量及其地址

实战应用案例:逆向工具函数重命名

  1. 将生成的script.json与对应脚本复制到逆向工具插件目录
  2. 在逆向工具中执行File → Script file... → 选择对应脚本
  3. 工具将自动根据地址匹配并重命名函数,如将sub_123456重命名为UnityEngine_UI_Button__OnClick

常见错误与解决方案

"Metadata file not found or encrypted"

可能原因

  • 元数据文件路径错误
  • 文件被加密(如某些Unity保护方案)
  • 二进制文件与元数据版本不匹配

解决步骤

sequenceDiagram
    participant U as 用户
    participant T as 工具
    U->>T: 选择错误的metadata文件
    T->>U: 显示错误提示
    U->>U: 验证文件魔术数(0xFAB11BAF)
    U->>U: 检查文件大小(通常>1MB)
    U->>T: 重新选择正确文件

"Can't use auto mode to process file"

当自动搜索失败时,工具会提示手动输入CodeRegistrationMetadataRegistration地址:

  1. 在逆向工具中搜索字符串"g_CodeRegistration"找到代码注册结构地址
  2. 搜索"g_MetadataRegistration"找到元数据注册结构地址
  3. 按提示输入16进制地址(如0x1000A000

版本兼容性问题

不同Unity版本的IL2CPP实现存在差异,可通过--force-version参数强制指定版本:

# 强制使用Unity 2020.3版本的解析逻辑
Il2CppDumper libil2cpp.so global-metadata.dat ./output --force-version 27

高级功能与定制化配置

生成C++头文件

通过修改config.json中的GenerateStruct选项为true,可生成包含完整类结构的C++头文件。结构体生成逻辑在StructGenerator.cs中实现,支持:

  • 类继承关系建模
  • 字段偏移计算
  • 虚函数表生成
  • 泛型类型特殊处理

JSON数据分析

script.json包含丰富的可用于自动化分析的数据:

{
  "ScriptMethod": [
    {
      "Address": 16777216,
      "Name": "UnityEngine_Application__get_version",
      "Signature": "const char* UnityEngine_Application__get_version (UnityEngine_Application_o* __this, const MethodInfo* method)"
    }
  ],
  "Addresses": [16777216, 16777264, 16777312]
}

可通过Python脚本解析此文件实现批量操作:

import json

with open('script.json', 'r') as f:
    data = json.load(f)

# 提取所有方法地址与名称
method_map = {
    hex(item['Address']): item['Name'] 
    for item in data['ScriptMethod']
}

print(f"共解析到{len(method_map)}个方法")

插件系统扩展

Il2CppDumper提供针对主流逆向工具的插件支持:

  • Binary NinjaIl2CppBinaryNinja目录下的插件
  • Ghidraghidra.pyghidra_with_struct.py
  • Hopper Disassemblerhopper-py3.py

性能优化与大型项目处理

处理大型游戏(如《原神》、《崩坏:星穹铁道》)时,可通过以下方式提升性能:

内存优化配置

编辑config.json调整内存使用策略:

{
  "NoRedirectedPointer": true,
  "ForceDump": false,
  "MaxDegreeOfParallelism": 4
}

增量解析技巧

  1. 首次完整解析后保留il2cpp.h
  2. 修改config.json禁用已生成文件:
{
  "GenerateDummyDll": false,
  "GenerateStruct": false
}
  1. 仅重新生成script.json用于地址更新

总结与进阶学习路径

通过本文学习,你已掌握Il2CppDumper的基本使用方法与常见问题解决策略。要进一步提升Unity逆向能力,建议:

  1. 深入学习IL2CPP内部结构:阅读Il2CppClass.csMetadataClass.cs源码理解数据结构
  2. 逆向工具联动:结合Frida动态调试验证静态分析结果
  3. 自动化脚本开发:基于script.json编写批量分析工具
  4. 关注版本更新:Unity新版本可能引入IL2CPP实现变化,需及时更新Il2CppDumper

Il2CppDumper作为Unity逆向的基础工具,其生成的文件质量直接影响后续分析效率。熟练掌握其配置选项与高级功能,将极大提升逆向工程的速度与准确性。项目持续维护中,遇到问题可通过GitHub仓库提交issue获取支持。

提示:定期查看项目README.md获取最新特性说明,新版本可能已支持更多Unity版本与文件格式。

登录后查看全文
热门项目推荐
相关项目推荐