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, 游戏, 移动端, 自定义脚本, 逆向分析, 逆向工具