HendrikReh/hopper_reverse_toolkit
GitHub: HendrikReh/hopper_reverse_toolkit
将 Hopper 反汇编器的分析结果导出、富化为 JSON、调用图和架构图,并支持注释回写与 prompt 驱动的逆向工程工作流。
Stars: 0 | Forks: 0
# Hopper Reverse Toolkit
**版本**: 1.5.0
**最后更新**: 2026-03-15
**维护者**:
本工具包将 [Hopper](https://www.hopperapp.com/) 分析转化为可复用的工件,用于架构恢复、安全分类、prompt 驱动的逆向工程以及注释回写。
## 目录
- [关于 Hopper](#about-hopper)
- [包含文件与版本](#included-files-and-versions)
- [快速开始](#quick-start)
- [工件指南](#artifact-guide)
- [推荐工作流](#recommended-workflow)
- [Prompt 包](#prompt-pack)
- [在 Hopper 中应用注释](#applying-annotations-inside-hopper)
- [文档](#documentation)
- [注意事项](#notes)
## 关于 Hopper
[Hopper](https://www.hopperapp.com/) 是一款原生 macOS 反汇编器和逆向工程工具,用于分析可执行代码。它支持 Mach-O、ARM 和 Windows 二进制文件,并提供:
- 汇编反汇编以及反编译为类 C 伪代码
- 可导出 PDF 的交互式控制流图
- Objective-C 选择器提取和 Swift 名称还原 (demangling)
- LLDB 和 GDB 调试器集成
- 用于自动化的 Python 脚本 API
- 用于自定义加载器和 CPU 后端的可扩展 SDK
- 通过 MCP 服务器进行的 AI 辅助分析
Hopper 需要 macOS 12.4 或更高版本。本工具包针对 Hopper v6 Python 脚本 API。
有关工具包工作流之外的 Hopper 脚本编写细节,请参阅 [`docs/hopper_6_2_1_python_api.md`](docs/hopper_6_2_1_python_api.md)。
## 包含文件与版本
| 文件 | 版本 | 用途 |
|---|---:|---|
| `hopper_export_metadata.py` | 1.5.0 | 从 Hopper 导出段 (segments)、节 (sections)、字符串、过程、局部变量、标签和 CFG 元数据 |
| `hopper_export_callgraph.py` | 1.5.0 | 导出包含调用点和调用类型元数据的过程调用图 |
| `hopper_export_rust_analysis.py` | 1.5.0 | 导出面向 Rust 的函数数据,包括名称还原、签名和调用元数据 |
| `hopper_apply_annotations.py` | 1.5.0 | 将标签、注释、标签、颜色和书签应用回当前的 Hopper 文档 |
| `enrich_hopper_exports.py` | 1.5.0 | 将 Hopper 导出内容合并为富化 JSON,同时保留更丰富的调用元数据 |
| `docs/hopper_6_2_1_python_api.md` | n/a | Hopper 6.2.1 Python 脚本编写的实用指南及参考 |
| `export_graphml.py` | 1.4.0 | 将 `*.callgraph.json` 转换为 GraphML |
| `generate_mermaid.py` | 1.4.0 | 生成子系统、热点和调用流 Mermaid 图表 |
| `json_to_mermaid_architecture.py` | 1.4.0 | 合成更高层级的 Mermaid 架构图 |
| `generate_c4_architecture.py` | 1.4.0 | 从富化 JSON 生成 C4 风格的 Mermaid 和 PlantUML 图表 |
| `prompt_pack/` | 1.5.0 | 用于架构重构、安全分类、流程映射和注释生成的可复用 prompt |
| `CHANGELOG.md` | n/a | 变更历史 |
| `README.md` | n/a | 本文档 |
## 快速开始
### 1. 在 Hopper 内部导出
通过 `Scripts → Run Script` 运行以下脚本:
1. `hopper_export_metadata.py`
2. `hopper_export_callgraph.py`
3. `hopper_export_rust_analysis.py`(可选)
在可执行文件旁生成的典型输出:
- `.hopper_export.json`
- `.callgraph.json`
- `.analysis.json`
导出脚本会在收集数据前等待 Hopper 后台分析完成,因此您无需手动暂停以等待分析队列排空。
### 2. 在 Hopper 外部进行富化与渲染
```
python enrich_hopper_exports.py /path/to/binary.hopper_export.json /path/to/binary.callgraph.json --out-json enriched_analysis.json --out-md architecture_summary.md
python generate_mermaid.py enriched_analysis.json --subsystems subsystems.mmd --hotspots hotspots.mmd --callflow callflow.mmd
python json_to_mermaid_architecture.py enriched_analysis.json --out architecture_synthesized.mmd
python generate_c4_architecture.py enriched_analysis.json --mermaid-out c4_architecture.mmd --plantuml-out c4_architecture.puml
python export_graphml.py /path/to/binary.callgraph.json /path/to/binary.graphml
```
### 3. 使用 Prompt 包进行分析
结合生成的 JSON、摘要、Mermaid、GraphML 和可选的 Rust 分析工件,使用 `prompt_pack/` 中的模板。
### 4. 将注释回写到 Hopper
在 Hopper 内部运行 `hopper_apply_annotations.py`,并传入手动生成或通过 `prompt_pack/06_annotation_candidates.md` 生成的 JSON 载荷。
如果未传递文件路径,脚本将打开一个 Hopper 文件选择器。
## 工件指南
| 工件 | 生成者 | 内容 | 典型下游用途 |
|---|---|---|---|
| `*.hopper_export.json` | `hopper_export_metadata.py` | 文档信息、段、节、字符串、符号、过程、局部变量、标签和 CFG 基础信息 | 用于富化和 prompt 驱动分析的主要结构导出 |
| `*.callgraph.json` | `hopper_export_callgraph.py` | 过程及过程间边,包含调用点和调用类型元数据 | GraphML 导出、富化、流程映射、热点分类 |
| `*.analysis.json` | `hopper_export_rust_analysis.py` | 面向 Rust 的函数元数据、还原后的名称、签名、标签计数和调用元数据 | Rust 密集型二进制文件、crate 推断、框架与应用分离 |
| `enriched_analysis.json` | `enrich_hopper_exports.py` | 合并后的函数记录,包含子系统标签、度数、调用者/被调用者预览以及保留的调用元数据 | Mermaid 生成、prompt 包、架构合成 |
| `architecture_summary.md` | `enrich_hopper_exports.py` | 人类可读的子系统分布和排名函数列表 | 分析师简报、prompt 上下文、快速分类 |
| `*.mmd` / `*.puml` | Mermaid/C4 生成器 | 可视化架构和调用流图 | 审查、文档、prompt 上下文 |
| `*.graphml` | `export_graphml.py` | GraphML 格式的调用图 | 外部图工具 |
## 推荐工作流
### 在 Hopper 内部
- 从 `hopper_export_metadata.py` 和 `hopper_export_callgraph.py` 开始。
- 当符号质量或 crate 推断至关重要时,使用 `hopper_export_rust_analysis.py`。
- 仅在审查注释载荷后使用 `hopper_apply_annotations.py`;它会直接写入打开的文档。
### 在 Hopper 外部
- 将 `enriched_analysis.json` 视为主要交接工件。
- 在富化之后而非之前生成 Mermaid 或 C4 视图。
- 当您希望使用外部图工具而非 prompt 驱动分析时,使用 GraphML。
## Prompt 包
`prompt_pack/` 旨在与 LLM 及本套件生成的 Hopper 工件配合使用,采用复制粘贴方式。
推荐的 prompt 选择:
- `01_architecture_reconstruction.md`:初步系统架构和信任边界
- `02_security_hotspots.md`:可能的认证、加密、解析器、存储和网络热点
- `03_request_flow_mapping.md`:从入口到效果或从请求到响应的流程重构
- `04_app_vs_framework.md`:从框架噪声中分离出可能属于应用的逻辑
- `05_c4_reconstruction.md`:叙述性的 C4 风格架构描述
- `06_annotation_candidates.md`:用于 `hopper_apply_annotations.py` 的保守 JSON 注释生成
## 在 Hopper 中应用注释
`hopper_apply_annotations.py` 接受包含以下任意顶层键的 JSON 载荷:
- `labels`
- `comments`
- `inline_comments`
- `tags`
- `colors`
- `bookmarks`
载荷示例:
```
{
"labels": [{"address": "0x1000", "name": "entry_main"}],
"comments": [{"address": "0x1000", "comment": "Recovered entry point"}],
"inline_comments": [{"address": "0x1004", "comment": "Calls helper"}],
"tags": [{"address": "0x1000", "tag": "review"}],
"colors": [{"address": "0x1000", "color": "#FF112233"}],
"bookmarks": [{"address": "0x1000", "name": "main entry"}]
}
```
请使用保守的载荷。在 Hopper 中错误的标签或注释比没有注释更具破坏性。
## 文档
`docs/` 目录包含工具包中每个脚本和模块的详细文档。
### 脚本参考
| 文档 | 涵盖内容 |
|---|---|
| [`hopper_export_metadata.md`](docs/hopper_export_metadata.md) | 结构元数据导出 —— 段、过程、伪代码、基本块 |
| [`hopper_export_callgraph.md`](docs/hopper_export_callgraph.md) | 带有调用点和调用类型元数据的调用图导出 |
| [`hopper_export_rust_analysis.md`](docs/hopper_export_rust_analysis.md) | 特定于 Rust 的导出,包含名称还原和 crate 推断 |
| [`hopper_apply_annotations.md`](docs/hopper_apply_annotations.md) | 注释回写 —— 标签、注释、标签、颜色、书签 |
| [`enrich_hopper_exports.md`](docs/enrich_hopper_exports.md) | 合并和富化,包含有趣度评分和子系统分类 |
| [`export_graphml.md`](docs/export_graphml.md) | Callgraph JSON 到 GraphML 的转换 |
| [`generate_mermaid.md`](docs/generate_mermaid.md) | 子系统、热点和调用流 Mermaid 图表 |
| [`json_to_mermaid_architecture.md`](docs/json_to_mermaid_architecture.md) | 高层合成的架构 Mermaid 图 |
| [`generate_c4_architecture.md`](docs/generate_c4_architecture.md) | C4 风格的 Mermaid 和 PlantUML 图表 |
| [`_hopper_utils.md`](docs/_hopper_utils.md) | 共享工具库 —— 所有辅助函数、子系统 token、调用类型代码 |
### Hopper 脚本参考
| 文档 | 涵盖内容 |
|---|---|
| [`hopper_6_2_1_python_api.md`](docs/hopper_6_2_1_python_api.md) | Hopper 6.2.1 Python 脚本 API 的实用指南及参考 |
## 注意事项
- Hopper 的 Python API 在不同版本间存在差异;本套件针对文档中公开的段、过程、基本块和调用引用 API。
- `rustfilt` 是可选的,但建议用于 Rust 二进制文件。
- 图表输出是启发式的起点,而非既定事实。
- 更丰富的导出保留了调用点元数据、局部变量、字符串、标签和基本块关系,以便下游自动化使用。
标签:AI辅助分析, API集成, Blacksmith Consulting, C4模型, CFG, CI/CD安全, CTF工具, DAST, DNS 反向解析, DNS 解析, GPT, GraphML, Homebrew安装, Hopper Disassembler, IP 地址批量处理, JSON导出, Llama, LLDB调试, Mach-O, macOS安全, Mermaid图表, Rust分析, Security, Security Triage, TLS抓取, Wayback Machine, 二进制分析, 二进制安全, 云安全监控, 云安全运维, 云资产清单, 代码可视化, 凭据导出, 反汇编, 可观测性, 大模型提示词, 恶意软件分析, 控制流图, 数据增强, 架构恢复, 注释回填, 漏洞搜索, 漏洞管理, 网络安全审计, 调用图, 软件安全, 逆向工具, 逆向工程, 静态分析