meerkatone/rust_binary_analysis
GitHub: meerkatone/rust_binary_analysis
一款用 Rust 编写的 Binary Ninja 插件,通过检测危险函数引用、计算代码复杂度和熵值来批量提取二进制文件的安全特征并输出为结构化数据。
Stars: 0 | Forks: 0
# Binary Ninja 安全分析插件
一个使用 Rust 编写的 Binary Ninja 插件,可对二进制文件执行全面的安全分析。该插件通过分析危险函数的使用情况、代码复杂度和二进制熵来提取与安全相关的指标并识别潜在风险。
## 功能
- **危险函数检测**:识别对安全关键函数(如 `system()`、`execve()` 以及其他 exec 系列函数)的交叉引用
- **圈复杂度分析**:计算所有函数的复杂度指标,以识别潜在的问题代码
- **熵分析**:计算二进制熵以检测加壳或混淆的可执行文件
- **架构与元数据提取**:获取目标架构、字节序和文件哈希
- **批处理**:一次性分析整个目录下的二进制文件
- **结构化输出**:将结果导出为 Parquet 格式,用于数据分析和报告
## 安装说明
### 前置条件
- [Binary Ninja](https://binary.ninja/)(商业版或个人版许可证的最新 dev build)
- [Rust toolchain](https://rustup.rs/)(最新稳定版)
- Binary Ninja API 开发头文件
### 构建并安装
1. 克隆此仓库:
git clone https://github.com/meerkatone/rust_binary_analysis.git
cd rust_binary_analysis
2. 设置 Binary Ninja 环境(如有需要):
export BINJA_DIR="/path/to/your/binaryninja/installation"
3. 构建插件:
cargo build --release
如果插件由于以下错误消息而无法加载:“This plugin was built for an outdated core ABI (XXX). Please rebuild the plugin with the latest API (XXX).” 请使用以下命令更新依赖项:
cargo update && cargo build --release
4. 将编译好的插件复制到 Binary Ninja 的插件目录:
# macOS
cp target/release/libbinary_analysis_plugin.dylib ~/Library/Application\ Support/Binary\ Ninja/plugins/
# Linux
cp target/release/libbinary_analysis_plugin.so ~/.binaryninja/plugins/
# Windows
copy target\release\binary_analysis_plugin.dll %APPDATA%\Binary Ninja\plugins\
5. 重启 Binary Ninja 以加载插件
## 用法
1. 打开 Binary Ninja 并加载任意一个二进制文件
2. 导航到菜单:**Binary Analysis Tool → Analyse Directory**
3. 选择一个包含您要分析的二进制文件的目录
4. 插件将处理该目录中的所有文件,并将结果保存到 `binary_analysis_results.parquet`
## 输出格式
插件会生成一个具有以下结构的 Parquet 文件:
| 字段 | 类型 | 描述 |
|-------|------|-------------|
| `Binary` | String | 原始文件名 |
| `File_Hash` | String | 二进制文件的 SHA-256 哈希值 |
| `Architecture` | String | 目标架构(x86、x64、ARM 等) |
| `Endianness` | String | 字节序(Little/Big) |
| `Average_Cyclomatic_Complexity` | Float | 所有函数的平均复杂度 |
| `Entropy` | Float | 二进制熵(0-8,数值越高表示随机性/加壳可能性越大) |
| `Functions` | JSON String | 函数名称和地址数组 |
| `Strings` | JSON String | 二进制文件中发现的字符串数组 |
| `Segments` | JSON String | 内存段信息 |
| `Xrefs_to_System` | JSON String | 指向危险函数的交叉引用 |
## 安全分析详情
### 监控的危险函数
该插件专门跟踪以下函数的使用情况:
- `system` - 命令执行
- `execve`, `execle`, `execvp`, `execlp` - 进程执行
- `doSystemCmd` - 自定义系统命令函数
### 复杂度分析
- 使用以下公式计算圈复杂度:E - N + 2P(边 - 节点 + 2 * 连通分量)
- 复杂度越高,表明控制流越复杂,且可能存在维护问题
- 可以帮助识别可能包含 bug 的过于复杂的函数
### 熵分析
- 测量二进制数据中的随机性
- 低熵(~1-3):可能是纯文本或简单的可执行文件
- 中等熵(~4-6):正常的编译代码
- 高熵(~7-8):可能经过加壳、加密或混淆
## 开发说明
### 构建命令
```
# Development build
cargo build
# Release build
cargo build --release
# 检查代码而不 building
cargo check
# 清理 build artifacts
cargo clean
```
### 依赖项
- `binaryninja`:官方 Binary Ninja API 绑定
- `arrow`/`parquet`:数据序列化和导出
- `serde`:JSON 序列化
- `sha2`:加密哈希
## 许可证
本项目基于 MIT 许可证授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
## 贡献
欢迎贡献代码!请随时提交 pull request 或开 issue 反馈 bug 和功能需求。
标签:Binary Ninja插件, DNS 反向解析, Rust, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 可视化界面, 网络流量审计, 逆向工程, 通知系统, 静态分析