decoderloop/rust_metadata_carver
GitHub: decoderloop/rust_metadata_carver
一款 Binary Ninja 插件,用于从 Rust 二进制文件中提取并标注 panic 位置元数据,帮助逆向分析人员恢复源文件路径、行号和列号信息。
Stars: 4 | Forks: 0
# Rust Metadata Carver
Binary Ninja 插件,用于从 Rust 二进制文件中查找 metadata,包括:
- 来自 panic unwind metadata 的源文件位置(即嵌入在二进制文件中的 `core::panic::Location` 结构体)


## 用法
该插件提供以下命令:
1. _Plugins_ > _Rust Metadata Carver_ > _Find Panic Location Paths_
2. _Plugins_ > _Rust Metadata Carver_ > _Recover Panic Location Metadata Structures_
首先运行 _Find Panic Location Paths_ 命令,然后再运行 _Recover Panic Location Metadata Structures_ 命令。
### _Plugins_ > _Rust Metadata Carver_ > _查找 Panic Location Paths_
此命令会查找二进制文件中所有同时也是可能 Rust 源文件路径的 Rust `&str` 字符串切片。
该命令将在 _Types_ 面板中创建一个新的 `&str` 类型。

### _Plugins_ > _Rust Metadata Carver_ > _恢复 Panic Location Metadata Structures_
**注意:这只有在您先运行了 _Find Panic Location Paths_ 命令后才能生效!**
此命令会从二进制文件中恢复所有的 `core::panic::Location` metadata 结构体。
此命令还会查找代码内部对每个 `core::panic::Location` 结构体的所有交叉引用。它会在每个引用了 `core::panic::Location` 结构体的代码位置创建一个新标签(使用 😱 表情符号标记)。

所有找到的 `core::panic::Location` metadata 结构体的完整列表可以在 Binary Ninja 的 _Tags_ 面板中找到。每个共享相同原始 Rust 源文件路径的 `core::panic::Location` 都会被分组在一起。

## 最低版本
4689
## 许可证
此插件采用 [MIT 许可证](./LICENSE) 发布。
## Metadata 版本
2
## 开发
### 设置开发环境
要设置开发环境,包括设置 Python 虚拟环境:
```
python -m venv .venv && . .venv/bin/activate
python $PATH_TO_BINARY_NINJA_INSTALLATION/scripts/install_api.py
```
### 测试插件的本地版本
要在开发过程中在您自己的 Binary Ninja 安装中本地测试插件,请在您的开发文件夹和 [Binary Ninja 用户插件文件夹](https://docs.binary.ninja/guide/index.html#user-folder) 之间创建一个符号链接,以便您的开发文件夹能在启动时作为插件被 Binary Ninja 加载。
- MacOS:
ln -s `pwd` ~/Library/Application\ Support/Binary\ Ninja/plugins/rust_metadata_carver
- Linux:
ln -s --relative . ~/.binaryninja/plugins/rust_metadata_carver
- Windows (Powershell):
New-Item -ItemType Junction -Value $(Get-Location) -Path "$env:APPDATA\Binary Ninja\plugins\rust_metadata_carver"
然后,您应该将 Binary Ninja 中以下 Python 设置的值更改为指向您开发文件夹内的虚拟环境:
- `python.binaryOverride`:将其设置为您的开发虚拟环境中 Python 解释器的路径,例如 `$DEVELOPMENT_FOLDER/rust_metadata_carver/.venv/bin/python/`
- `python.virtualenv`:将其设置为您的开发虚拟环境中 `site-packages` 目录的路径,例如 `$DEVELOPMENT_FOLDER/rust_metadata_carver/.venv/lib/python3.11/site-packages`
标签:Binary Ninja插件, Rust, 二进制分析, 云安全运维, 云资产清单, 元数据分析, 网络流量审计, 逆向工具, 逆向工程