发布于: 2025-5-9最后更新: 2025-9-19字数 2507阅读时长≈ 7 分钟

主要逆向流程(IL2CPP打包)

  1. 下载打开Il2CppDumper, 运行后依次选择global-metadata.dat , 然后选择libil2cpp.so , 成功的话它会dump出所需文件, 不成功则需要先dump出没加密的global-metadata.dat和libil2cpp.so
  1. 打开ida file → script file依次导入dump出来的ida_py3.py → 再导入scripts.json, 再导入 ida_py3.py → stringliteral.json 等待恢复符号表完成
  1. 可以使用Dnspy 导入 Assembly-Csharp.dll 文件分析类\结构\偏移地址等
  1. 使用ida静态分析具体的游戏实现逻辑
  1. 然后使用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文件, 一般使用这个项目
 
魔改了游戏引擎的话可以参考
 
还有这个, 不需要metadata文件 支持dump
而且还支持trace, 方便定位关键位置

Il2CppHookScripts

notion image
 

其他思路

反射分析和修改游戏, 因为C# 支持反射, 无论是使用mono编译还是il2cpp编译,他都会支持“反射”
 

frida-il2cpp-bridge

很强大的逆向unity的工具

实战frida-il2cpp-bridge

目标:
抓包发现请求和返回值都加密过, 并且base64无法直接解密, 目标是分析该加密算法

使用frida-il2cpp-bridge trace 网络请求

安装frida-il2cpp-bridge
版本:
frida-il2cpp-bridge 使用0.9.0(最新版我跑不起来)
项目结构:
notion image
只要建好下面2个文件即可, 其他的都是生成的
package.json
index.ts

trace class

可以hook 该类所有的函数
 

trace method

trace方法可以打印出入参

类名怎么来?

dnspy搜索得到

assembly 怎么来?

通过遍历所有的assemblies 来得到
打开一个终端
然后再打开个终端
trace UnityWebRequest结果:
 
=XQlhnDv2nju2mjs1GjnzWmywjjlw2zyzjINYYYNNNgNY4EaM9QTYVQbMVIZNQFbZZ=Z
CyberChef 无法直接base64解码, 说明经过处理
ida中直接搜base64
notion image
找到Base64Kit__Decode
分析伪代码

python还原算法

验证

实战Il2CppHookScripts

启动:
 

B ('ClassName')

hook 类所有的方法
 

提供几个常用的js(frida-il2cpp-bridge)

hook 多method

hook 修改返回值

hook 修改webviwe 设置debug模式/注入js/打印加载url

参考:

 
 
 
 

Loading...
3分钟接入ida mcp开始AI逆向(window)

3分钟接入ida mcp开始AI逆向(window)


stackplz硬件断点+LLDB调试

stackplz硬件断点+LLDB调试


公告
 
花有重开日, 人无再少年~