Yeonba0918/ida-struct-symbol-recover
GitHub: Yeonba0918/ida-struct-symbol-recover
用于从内存访问模式恢复结构布局和成员符号的辅助工具。
Stars: 0 | Forks: 0
# ida-结构符号恢复
`ida-struct-symbol-recover` 是一个为 IDA Pro 工作流程提供的小型防御性逆向工程辅助工具。
它将观察到的 `base + offset` 内存访问分组,推断可能的字段宽度,生成草稿 C 结构,并可以生成 IDAPython 脚本,在 IDA 中创建这些结构。目标是减少分析剥离二进制文件时的重复手动工作。
该项目有意限定为一个分类工具。它产生可审查的结构候选者,但不保证是绝对真实。
## 功能
- 按基寄存器或符号基分组内存访问
- 从访问宽度推断字段大小
- 保留读写证据和源地址
- 生成带填充的 C `typedef struct` 草稿
- 生成 IDAPython 结构创建脚本
- 包含一个 IDAPython 插件适配器,用于从当前函数收集访问
- 添加 IDA 注释,将观察到的指令映射到生成的成员符号
- 无需 IDA 即可进行核心推断、测试和 JSON 驱动的流程
## 安装
从存储库根目录:
```
python3 -m pip install .
```
对于源树执行:
```
PYTHONPATH=src python3 -m ida_struct_symbol_recover examples/accesses.json
```
## 命令行使用
从访问观察生成 C 结构:
```
ida-struct-symbol-recover examples/accesses.json
```
生成 JSON:
```
ida-struct-symbol-recover examples/accesses.json --format json
```
生成 IDAPython 应用脚本:
```
ida-struct-symbol-recover examples/accesses.json --format ida-script -o recovered_structs.py
```
输入 JSON 可以是观察列表或具有 `observations` 字段的对象。
```
[
{
"function": "parse_packet",
"base": "rdi",
"offset": "0x10",
"width": 4,
"access": "read",
"source_ea": "0x401050",
"mnemonic": "mov",
"operand": "[rdi+0x10]"
}
]
```
## IDA 插件
将 `src/ida_struct_symbol_recover/ida_plugin.py` 复制到您的 IDA 插件目录,或者通过 IDA 的脚本运行器加载它,该包可在 `PYTHONPATH` 上获得。
该插件扫描当前函数中的位移操作数,分组可能的字段,创建名为 `recovered_rdi` 等的 IDA 结构,并用注释如 `recovered_rdi.length` 注释观察到的指令。
限制:
- 它是架构无关的最佳努力,因此寄存器命名可能因处理器模块而异。
- 它目前专注于 IDA 指令中可见的直接短语和位移操作数。
- 在广泛应用恢复结构之前,预期进行人工审查。
## 开发
运行测试:
```
PYTHONPATH=src python3 -m unittest discover -s tests
```
运行示例:
```
PYTHONPATH=src python3 -m ida_struct_symbol_recover examples/accesses.json
```
## 安全使用
这是一个用于授权逆向工程、漏洞研究、受控环境中的恶意软件分类以及安全工具维护的防御性二进制分析工具。它不利用目标或修改二进制文件。
## 许可证
MIT
标签:C语言结构, IDA Pro, IDAPython, JARM, JSON格式, 二进制分析, 云安全运维, 云资产清单, 代码生成, 内存分析, 字段宽度推断, 工作流辅助, 指令映射, 插件开发, 插件集成, 渗透测试工具, 源地址保留, 符号推断, 结构恢复, 脚本工具, 访问模式分析, 逆向工具, 逆向工程, 防御性逆向