esfp0/standoff2-il2cpp-dumper
GitHub: esfp0/standoff2-il2cpp-dumper
一个基于 Frida 的运行时 IL2CPP dumper,专门用于从非标准 IL2CPP 构建的 Standoff 2 游戏中提取完整的类型信息、字段偏移和方法地址,生成兼容 Il2CppDumper 和 IDA/Ghidra 的分析产出物。
Stars: 0 | Forks: 0
# Standoff 2 IL2CPP Dumper
用于 **Standoff 2** (`libunity.so`) 的运行时 IL2CPP dumper。Standoff 2 采用的是非标准的 IL2CPP 构建,其 metadata 无法为原版 Il2CppDumper 进行重建,因此该项目通过 IL2CPP API 遍历**实时类型系统**,并生成与 Il2CppDumper 相同的产出物——包括**带有偏移量的字段**。
## 输出
| 文件 | 内容 |
|------|----------|
| `dump_out/dump.cs` | 完整的 Il2CppDumper 风格 dump 文件 —— 包含每个类型的 `// Fields`(类型 + 名称 + `// 0x` 偏移量)、`// Properties`、`// Methods`(带有 `// RVA`)、`TypeDefIndex`、基类/接口。 |
| `dump_out/assemblies/*.cs` | 相同内容按 assembly 拆分为单独文件(例如 `Assembly-CSharp.cs`)。 |
| `dump_out/script.json` | `{ ScriptMethod: [{Address, Name, Signature}] }` —— 可在 IDA/Ghidra 中加载。 |
参考运行数据(0.39.1 版本):**332 个 assembly · 36 514 个类 · 130 000+ 个方法 · 8 200 个字段**。
## 环境要求
- 已 Root 的 Android 设备(**arm64**)+ `adb`。
- 在主机上执行 `pip install frida frida-tools`。
- 与你安装的 frida 版本相匹配的 arm64 版 `frida-server` —— 从
下载(例如 `frida-server--android-arm64.xz`,
解压 `.xz` 文件)。
## 使用方法
```
# 1. 在设备上 push + 启动 frida-server (root)
adb push frida-server /data/local/tmp/frida-server
adb shell su -c 'chmod 755 /data/local/tmp/frida-server; nohup /data/local/tmp/frida-server >/dev/null 2>&1 &'
# 2. 启动游戏并获取其 pid
adb shell su -c 'monkey -p com.axlebolt.standoff2 -c android.intent.category.LAUNCHER 1'
adb shell su -c 'pidof com.axlebolt.standoff2'
# 3. dump (参数: [api.txt] [out_dir])
python il2cpp_dump.py api.txt dump_out
```
大功告成 —— 所有内容(包括字段数组布局)都会在运行时完成解析。
## 更新至新的 0.39.x 版本
放入新的 `api.txt`(新版本的 IL2CPP RVA 偏移量)并重新运行即可。
其他内容无需改动 —— 函数地址和字段偏移量会被自动提取。
## 注意事项
- 方法 RVA 是 `libunity.so` 中的偏移量(在 IDA/Ghidra 中将其加载至基址 0 并
应用 `script.json`)。
- 不要运行多个 `frida-server` 实例 —— 这会导致传输超时。
- 部分类型名称看起来像 `HHHBDAH...` —— 那些是游戏自身的混淆类名,而不是 dump 错误。
## 致谢
由 **[t.me/trickzqw](https://t.me/trickzqw)** 制作。仅供个人使用 —— 非
开源。详见 [`NOTICE.txt`](NOTICE.txt)。
标签:Android, Docker支持, DSL, Frida, IL2CPP, 游戏, 移动端, 自定义脚本, 逆向分析, 逆向工具