IL2CPP反编译

Il2CppDumper+IDA 反编译IL2CPP形式打包出的Unity程序代码

使用工具

  • Il2CppDumper-win-v6.7.40
  • IDA Professional 9.0

反编译

  1. IL2CPP打包

   重点关注IL2CPP形式打包后的两个文件GameAssembly.dllglobal-metadata.dat

  • global-metadata.dat :存储与代码元数据相关的信息,比如类,接口,结构体以及方法名,参数等。Unity 加载 global-metadata.dat 以获取类型和方法的定义
  • GameAssembly.dll : 存储的是经过 IL2CPP 转换后生成的原生代码,将 C# 的托管代码转换为 C++ 原生代码,编译为动态链接库。Unity 调用 GameAssembly.dll 中的方法实现,并根据元数据中的索引匹配对应的方法

IL2CPP重要文件

  1. Il2CppDumper分析提取

   Il2CppDumper主要处理的也是前面我们提到的两个文件,在Il2CppDumper.exe文件目录下打开cmd,输入文件路径进行解析

Il2CppDumper分析

   可以看到提取到以下一些文件:

  • DummyDll : 文件夹内是通过解析 global-metadata.dat 元数据生成的一组dll文件,相当于伪 C# 程序集,方便加载到反编译工具dnSpy、ILSpy等中查看类结构、方法签名和字段定义
  • dump.cs : 完整的 C# 源代码文件,类似于 DummyDll 文件夹中的 .dll 的文本形式,当然也不包含具体的方法实现
  • il2cpp.h : c++头文件包含数据结构定义,辅助后续分析 GameAssembly.dll 中的实现
  • script.json : 包含游戏的类、方法、字段等元数据的详细信息,以及这些数据在 GameAssembly.dll 中的内存地址
  • stringliteral.json : 包含所有从 global-metadata.dat 中提取的字符串常量

Il2CppDumper提取的文件

  1. IDA反编译

   打开IDA,加载GameAssembly.dll文件,使用64位PE文件格式进行解析,耐心等待加载完毕

IDA加载解析dll文件

   File -> script file… 运行Il2CppDumper提供的脚本ida_with_struct_py3.py,运行后分别选择script.json与il2cpp.h,耐心等待解析完毕

IDA运行py代码

   这个时候就可以根据方法名看到具体的实现

方法具体实现

完结撒花~

The Herta pid:126317423


IL2CPP反编译
https://baifabaiquan.cn/2025/01/13/IL2CPP反编译/
作者
白发败犬
发布于
2025年1月13日
许可协议