Dump-GUY/ida-nativeaot
GitHub: Dump-GUY/ida-nativeaot
一款 IDA Pro 插件,通过解析 ReadyToRun 元数据来恢复符号剥离的 .NET Native AOT 二进制文件中的类型系统、虚方法和字符串字面量。
Stars: 37 | Forks: 1
# IDA NativeAOT 🧩
[](https://www.python.org/)
[](https://hex-rays.com/ida-pro/)
[](LICENSE)
_MT`、`_vtbl` 以及 `` 实例布局,并包含基类 vtable 嵌入和接口数组。
- 在每个 MethodTable 处生成 **MethodTable 标签** `_MT`,并使用其结构体指定类型。
- **命名的虚方法**:`::Method_N`(槽位 0–2 → `ToString`/`Equals`/`GetHashCode`),标记为 `__thiscall` 并为 `this` 指定类型 —— Hex-Rays 将显示例如 `void __thiscall Foo::Method_4(Foo *this)`。
- **冻结的字符串字面量**:UTF-16 字符串,标记为 `dn__`,并将确切的文本作为重复注释。
- 使用其实例/元素类型指定类型的**冻结数组 / 装箱对象**。
- 在数据库旁边生成一个文本报告(`.naot_report.txt`),以及 IDB 中的压缩元数据缓存(实现浏览器的即时重新打开)。
在实际的 .NET 8 样本上的典型结果:约 4900 个 method table,约 3000 个被命名的方法,恢复了约 2500 个字符串字面量。
## 浏览器
标签页:**Overview**(RTR 信息、区段、统计信息) · **Type Hierarchy**(继承树 + 各类型的方法/接口) · **Methods** · **Strings** · **Frozen Data**。双击任意行即可在 IDA 中跳转;右键单击可复制或重命名;类型种类带有彩色图标。
**实时同步** —— 浏览器会跟踪 IDA 的重命名操作(手动、**FLIRT**、**Lumina**)并自动更新自身;**↻ 刷新名称** 会强制重新读取。右键单击 **Rename type (propagate)** 可重命名类*及其*方法(`Old::M` → `New::M`),而不会覆盖 FLIRT/用户指定的名称。类型和方法名称将完整显示并进行 demangled,映射出已应用于数据库的任何符号(例如来自 PDB 的符号)。
### 截图
*示例:`FlirtCoverage.dll`(.NET 8)的 NativeAOT 构建版本及其应用的 PDB。Overview 标签页显示在本页顶部。*
**Type Hierarchy** - `System.IO.FileStream` 继承链以及各类型的详细信息窗格(基类型、接口、vtable 槽位)。名称是完整的且已 demangled,直接来自应用的 PDB。

**Methods** - 过滤 `canWrite` 会定位到 `System.IO.Stream` 槽位 4 的 `FileStream::get_CanWrite`。

**Strings** - 恢复的冻结字面量(`ws://127.0.0.1:0/`),以及它如何在 Hex-Rays 伪代码中作为 `dn_…` 标签内联读取。

## 安装说明
将**这两个**文件复制到您的 IDA plugins 目录中(它们必须放在一起 —— 插件会从同一个文件夹加载引擎):
**按用户(推荐 —— 在 IDA 重装后依然保留):**
```
%APPDATA%\Hex-Rays\IDA Pro\plugins\ida-nativeaot_browser.py
%APPDATA%\Hex-Rays\IDA Pro\plugins\ida-nativeaot.py
```
**全系统:**
```
\plugins\ida-nativeaot_browser.py
\plugins\ida-nativeaot.py
```
重启 IDA,然后通过 **`Edit → Plugins → NativeAOT Metadata Browser`** 或 **`Ctrl-Shift-N`** 打开。
首次运行会分析元数据并将其缓存到 IDB 中;后续打开是即时的。
### IDA Plugin Manager (HCLI)
该插件附带了一个 `ida-plugin.json`。这是一个双文件插件 - `ida-nativeaot_browser.py` 是 `entryPoint`,而 `ida-nativeaot.py` 是它导入的辅助模块 - Plugin Manager 会将**这两个**文件安装在一起(它会提取整个插件目录,而不仅仅是入口点)。一旦发布到 plugins.hex-rays.com,请使用以下命令安装:
```
hcli plugin install ida-nativeaot
```
## 许可证
基于 **MIT License** 授权 —— 参见 [LICENSE](LICENSE)。这是从基于 MIT 许可证的 [washi1337/ghidra-nativeaot](https://github.com/washi1337/ghidra-nativeaot) 移植的衍生作品。
## 致谢
**原始研究及 Ghidra 插件:** [Washi](https://github.com/washi1337)
([@washi1337](https://github.com/washi1337)) — [ghidra-nativeaot](https://github.com/washi1337/ghidra-nativeaot)
以及博客文章 [Recovering NativeAOT Metadata](https://blog.washi.dev/posts/recovering-nativeaot-metadata/)。
此 IDA 插件是他作品的忠实移植。
**IDA 移植及浏览器 UI:** Jiří Vinopal
X / Twitter: [@vinopaljiri](https://x.com/vinopaljiri)
GitHub: [Dump-GUY](https://github.com/Dump-GUY)
标签:IDA Pro插件, 二进制分析, 云安全运维, 云资产清单, 元数据恢复, 逆向工具, 逆向工程