主要逆向流程(IL2CPP打包)
- 下载打开Il2CppDumper, 运行后依次选择global-metadata.dat , 然后选择libil2cpp.so , 成功的话它会dump出所需文件, 不成功则需要先dump出没加密的global-metadata.dat和libil2cpp.so
- 打开ida file → script file依次导入dump出来的ida_py3.py → 再导入scripts.json, 再导入 ida_py3.py → stringliteral.json 等待恢复符号表完成
- 可以使用Dnspy 导入 Assembly-Csharp.dll 文件分析类\结构\偏移地址等
- 使用ida静态分析具体的游戏实现逻辑
- 然后使用Frida或者frida-il2cpp-bridge 动态分析验证
以下一些概念解释
Assembly-CSharp.dll
对于mono打包游戏的主要脚本逻辑就在assets\bin\Data\Managed\Assembly-CSharp.dll
使用ILSPY或者dnspy即可直接反编译得到
但是现在大部分为了防止破解都使用IL2CPP来打包, 所以Assembly-CSharp.dll 只剩下结构信息, 真正的逻辑编译了c++, 放在libil2cpp.so 中
IL2CPP打包后关键的文件
global-metadata.dat
处于:\assets\bin\Data\Managed\Metadata
这个dat文件是 Unity 游戏引擎在使用 IL2CPP 脚本后端时生成的一个关键文件。
他包含了:
Il2cppDumper
用来解析global-metadata.dat, 解析出类、方法、字段、属性等结构信息。
他生成几个文件:
- Assembly-Csharp.dll 这个dll只有结构, 方法, 变量, 没有具体逻辑
- dump.cs (c# 风格的伪代码) 里面是原始代码的结构
- script.json 文件:包含更结构化的数据,方便其他工具或脚本进行处理。
- il2cpp.h C++ 头文件:定义了一些 IL2CPP 的内部数据结构和函数指针类型,分析so很有用
通过解析global-metadata.dat的信息来获取函数指针,并且通过偏移去查找so中的游戏逻辑
global-metadata.dat 解密
可以用010打开assets\bin\Data\Managed\global-metadata.dat 文件看看, 看下是不是AF 1B B1 FA开头, 不是的话一般都加密了
很多厂商会对这个文件进行加密, 所以要通过内存dump出未解密的global-metadata.dat文件, 一般使用这个项目
https://github.com/AndroidReverser-Test/frida-find-il2cpp-api(支持自动化地寻找il2cpp api)
魔改了游戏引擎的话可以参考
还有这个, 不需要metadata文件 支持dump
而且还支持trace, 方便定位关键位置
Il2CppHookScripts

其他思路
反射分析和修改游戏, 因为C# 支持反射, 无论是使用mono编译还是il2cpp编译,他都会支持“反射”
frida-il2cpp-bridge
很强大的逆向unity的工具
实战frida-il2cpp-bridge
目标:
抓包发现请求和返回值都加密过, 并且base64无法直接解密, 目标是分析该加密算法
使用frida-il2cpp-bridge trace 网络请求
安装frida-il2cpp-bridge
版本:
frida-il2cpp-bridge 使用0.9.0(最新版我跑不起来)
项目结构:

只要建好下面2个文件即可, 其他的都是生成的
package.json
index.ts
trace class
可以hook 该类所有的函数
trace method
trace方法可以打印出入参
类名怎么来?
dnspy搜索得到
assembly 怎么来?
通过遍历所有的assemblies 来得到
打开一个终端
然后再打开个终端
trace UnityWebRequest结果:
=XQlhnDv2nju2mjs1GjnzWmywjjlw2zyzjINYYYNNNgNY4EaM9QTYVQbMVIZNQFbZZ=Z
CyberChef 无法直接base64解码, 说明经过处理
ida中直接搜base64

找到Base64Kit__Decode
分析伪代码
python还原算法
验证
实战Il2CppHookScripts
启动:
B ('ClassName')
hook 类所有的方法
提供几个常用的js(frida-il2cpp-bridge)
hook 多method
hook 修改返回值
hook 修改webviwe 设置debug模式/注入js/打印加载url
参考:
- 作者:拓森Leo
- 链接:https://www.uzilol.cn/article/1e4bf20f-1d11-804a-8a19-e4ac5c3cb9b9
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。



