radareorg/r2unity

GitHub: radareorg/r2unity

基于 radare2 的 Unity IL2CPP 逆向分析插件集,用于解析 global-metadata.dat 并在原生二进制分析中恢复托管层元数据。

Stars: 24 | Forks: 0

# r2unity [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ed8a662395044500.svg)](https://github.com/radareorg/r2unity/actions/workflows/ci.yml) r2unity logo `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提取, 二进制分析, 云安全监控, 云安全运维, 反编译, 客户端加密, 游戏修改, 游戏外挂检测, 游戏安全, 目录枚举, 移动安全, 跨平台逆向, 静态分析, 预握手