radareorg/r2unity
GitHub: radareorg/r2unity
基于 radare2 的 Unity IL2CPP 逆向分析插件集,用于解析 global-metadata.dat 并在原生二进制分析中恢复托管层元数据。
Stars: 24 | Forks: 0
# r2unity
[](https://github.com/radareorg/r2unity/actions/workflows/ci.yml)
`r2unity` 是一个命令行工具和 radare2 插件集,用于检查 Unity
IL2CPP 构建。它解析 `global-metadata.dat`,将其与原生的
IL2CPP 二进制文件相关联,并暴露托管元数据以供逆向工程使用。
## 核心特性
- 解析 v24.1 到 v35 的 IL2CPP 元数据版本,以及最新 Unity 6 构建所使用的 v38/v39
元数据。
- 检测 iOS、Android 提取的 APK、macOS、Windows、
Linux 的伴随文件,以及扁平化的夹具布局。
- 恢复托管镜像、程序集、类型、方法、方法标志,以及 `ldstr`
字符串字面量。
- 在 ELF、Mach-O 和 PE 二进制文件中通过启发式算法查找方法指针表。
- 列出 P/Invoke 和 v29+ 的反向 P/Invoke 元数据,并为托管程序集生成 CycloneDX 1.5
SBOM。
- 提供核心 r2 命令插件和 `r_bin` 插件,用于直接检查
`global-metadata.dat`。
## 构建
`r2unity` 需要通过 `pkg-config` 获取 radare2 开发文件。
```
make
make plugin
make user-install
```
或者使用 Meson:
```
meson setup build
meson compile -C build
meson install -C build
```
大多数用户可以通过 r2pm 进行安装:
```
r2pm -ci r2unity
```
`make` 构建 CLI。`make plugin` 构建 `core_r2unity` 和 `bin_r2unity`。
`make user-install` 为当前用户安装 CLI 和插件。
Meson 默认构建 CLI,与 `make` 行为一致。使用 `-Dplugins=enabled`
也可构建 radare2 插件,或使用 `-Dr2_plugindir=/path/to/plugins` 覆盖
插件安装目录。
## CLI
常规输入是原生的 IL2CPP 二进制文件及其匹配的
`global-metadata.dat`。
```
# 检测 companion 文件与 platform
./r2unity -D /path/to/unity-build
# 精简 metadata 摘要
./r2unity -j /path/to/GameAssembly.dll /path/to/global-metadata.dat
# 将 method flags/comments 恢复为 r2 命令
./r2unity -f /path/to/GameAssembly.dll /path/to/global-metadata.dat > methods.r2
# 列出 managed 字符串、interop metadata 或 managed-assembly SBOM 数据
./r2unity -z /path/to/global-metadata.dat
./r2unity -P -j /path/to/GameAssembly.dll /path/to/global-metadata.dat
./r2unity -R -j /path/to/GameAssembly.dll /path/to/global-metadata.dat
./r2unity -S /path/to/GameAssembly.dll /path/to/global-metadata.dat > sbom.json
```
## radare2
安装插件后,在 r2 中打开 Unity 二进制文件并使用:
```
r2unity? show help
r2unity-D detect and cache companion file paths
r2unity-i[j] show metadata summary
r2unity-s apply managed method flags/comments
r2unity-s* print the r2 commands instead of applying them
r2unity-z[j] list managed string literals
r2unity-P[*j] list P/Invoke entries
r2unity-R[*j] list reverse-P/Invoke entries
r2unity-S emit managed-assembly CycloneDX JSON
```
当自动检测不够准确时,需手动设置 `r2unity.metadata` 和 `r2unity.library`。
`bin_r2unity` 插件还允许 radare2/rabin2 将
`global-metadata.dat` 作为二进制格式处理,从而暴露节区、
字符串、符号、类、导入、库和头字段。
## 当前限制
- 不支持 v24.0 元数据、v36/v37 元数据和 WebAssembly。
- 方法指针的恢复是启发式的;手动的 `-a` / `-c` 指针读取功能
尚未实现。
- P/Invoke 和反向 P/Invoke 输出以元数据优先,并未完全
恢复原生包装器地址或每一个 `DllImportAttributes` 的详细信息。
- SBOM 输出仅涵盖托管程序集,不包含原生依赖或文件
哈希。
深入的技术说明位于 `doc/` 目录中。
`r2unity` 是一个命令行工具和 radare2 插件集,用于检查 Unity
IL2CPP 构建。它解析 `global-metadata.dat`,将其与原生的
IL2CPP 二进制文件相关联,并暴露托管元数据以供逆向工程使用。
## 核心特性
- 解析 v24.1 到 v35 的 IL2CPP 元数据版本,以及最新 Unity 6 构建所使用的 v38/v39
元数据。
- 检测 iOS、Android 提取的 APK、macOS、Windows、
Linux 的伴随文件,以及扁平化的夹具布局。
- 恢复托管镜像、程序集、类型、方法、方法标志,以及 `ldstr`
字符串字面量。
- 在 ELF、Mach-O 和 PE 二进制文件中通过启发式算法查找方法指针表。
- 列出 P/Invoke 和 v29+ 的反向 P/Invoke 元数据,并为托管程序集生成 CycloneDX 1.5
SBOM。
- 提供核心 r2 命令插件和 `r_bin` 插件,用于直接检查
`global-metadata.dat`。
## 构建
`r2unity` 需要通过 `pkg-config` 获取 radare2 开发文件。
```
make
make plugin
make user-install
```
或者使用 Meson:
```
meson setup build
meson compile -C build
meson install -C build
```
大多数用户可以通过 r2pm 进行安装:
```
r2pm -ci r2unity
```
`make` 构建 CLI。`make plugin` 构建 `core_r2unity` 和 `bin_r2unity`。
`make user-install` 为当前用户安装 CLI 和插件。
Meson 默认构建 CLI,与 `make` 行为一致。使用 `-Dplugins=enabled`
也可构建 radare2 插件,或使用 `-Dr2_plugindir=/path/to/plugins` 覆盖
插件安装目录。
## CLI
常规输入是原生的 IL2CPP 二进制文件及其匹配的
`global-metadata.dat`。
```
# 检测 companion 文件与 platform
./r2unity -D /path/to/unity-build
# 精简 metadata 摘要
./r2unity -j /path/to/GameAssembly.dll /path/to/global-metadata.dat
# 将 method flags/comments 恢复为 r2 命令
./r2unity -f /path/to/GameAssembly.dll /path/to/global-metadata.dat > methods.r2
# 列出 managed 字符串、interop metadata 或 managed-assembly SBOM 数据
./r2unity -z /path/to/global-metadata.dat
./r2unity -P -j /path/to/GameAssembly.dll /path/to/global-metadata.dat
./r2unity -R -j /path/to/GameAssembly.dll /path/to/global-metadata.dat
./r2unity -S /path/to/GameAssembly.dll /path/to/global-metadata.dat > sbom.json
```
## radare2
安装插件后,在 r2 中打开 Unity 二进制文件并使用:
```
r2unity? show help
r2unity-D detect and cache companion file paths
r2unity-i[j] show metadata summary
r2unity-s apply managed method flags/comments
r2unity-s* print the r2 commands instead of applying them
r2unity-z[j] list managed string literals
r2unity-P[*j] list P/Invoke entries
r2unity-R[*j] list reverse-P/Invoke entries
r2unity-S emit managed-assembly CycloneDX JSON
```
当自动检测不够准确时,需手动设置 `r2unity.metadata` 和 `r2unity.library`。
`bin_r2unity` 插件还允许 radare2/rabin2 将
`global-metadata.dat` 作为二进制格式处理,从而暴露节区、
字符串、符号、类、导入、库和头字段。
## 当前限制
- 不支持 v24.0 元数据、v36/v37 元数据和 WebAssembly。
- 方法指针的恢复是启发式的;手动的 `-a` / `-c` 指针读取功能
尚未实现。
- P/Invoke 和反向 P/Invoke 输出以元数据优先,并未完全
恢复原生包装器地址或每一个 `DllImportAttributes` 的详细信息。
- SBOM 输出仅涵盖托管程序集,不包含原生依赖或文件
哈希。
深入的技术说明位于 `doc/` 目录中。标签:CTF安全工具, C++反汇编, ELF/Mach-O/PE解析, global-metadata.dat解析, IL2CPP分析, r2pm, radare2插件, Unity游戏逆向工程, URL提取, 二进制分析, 云安全监控, 云安全运维, 反编译, 客户端加密, 游戏修改, 游戏外挂检测, 游戏安全, 目录枚举, 移动安全, 跨平台逆向, 静态分析, 预握手