Heretek-RE/re-speakeasy
GitHub: Heretek-RE/re-speakeasy
为 Mandiant Speakeasy 提供 MCP 接口的 Windows API 模拟工具,让 AI 辅助逆向分析能获取动态 API 调用 trace 以补充静态分析。
Stars: 0 | Forks: 0
# re-speakeasy
用于 [Speakeasy](https://github.com/mandiant/speakeasy) 的 MCP server (Mandiant, Apache-2.0) — 用于二进制分析的 Windows API 模拟。这是一个“在类似 Wine 的沙箱中运行 .exe 并告诉我它做了什么”的工具。
## 为什么需要
其他 RE-AI MCP server 都是**静态**分析二进制文件(不执行):`re-lief` 读取头信息,`re-rizin` 进行反汇编,`re-triton` 对单个函数进行符号执行。它们都无法回答:“当我运行这个 .exe 时,它调用了哪些 API,使用了什么参数,以什么顺序调用?”
`re-speakeasy` 填补了这一空白。Speakeasy 是一个 Windows API 模拟器 — 它在进程内加载 .exe / .dll,并提供与 Windows 相同的 Win32 接口,但完全使用纯 Python 实现。其输出是针对每个 API 的 trace,可以作为静态分析的补充:“静态字符串表明该二进制文件调用了 `CreateFileW`” + “动态 trace 证实它调用了 `CreateFileW("C:\\Users\\...", GENERIC_READ, ...)`”。
## 架构
Python MCP server 是对由 install.sh 安装的 `speakeasy-cli` Python 辅助程序的轻量级封装:
```
Claude Code (MCP stdio)
│
▼
re-speakeasy server (Python, this directory)
│ subprocess.run(...)
▼
speakeasy-cli (small Python script, wraps the Speakeasy API)
│
└─ speakeasy-emulator (pip-installed, the actual emulator)
```
这种子进程边界是刻意设计的:Speakeasy 是一个庞大的 Python package,具有丰富的进程内 API。子进程封装保持了 MCP server 较小的内存占用,并允许 Claude Code 在未安装 Speakeasy 时以降级模式加载该插件。
## 工具
| 工具 | 功能 |
|---|---|
| `check_speakeasy` | 健康检查 — 返回 Speakeasy 版本 + API 数量 |
| `emulate_binary` | 在 Speakeasy 下运行 .exe / .dll,返回针对每个 API 的 trace |
| `list_emulated_apis` | 返回 Speakeasy 模拟的 Win32 API 目录的数量 + 示例 |
## 安装
`./install.sh` 会从 PyPI 安装 `speakeasy-emulator`。
如需独立安装:
```
pip install speakeasy-emulator
```
## 要求
- Python 3.11+
- `speakeasy-emulator` (Apache-2.0, 位于 PyPI)
- 无系统依赖
## 降级模式
如果未安装 `speakeasy-cli`,每个工具都会返回 `{"status": "WARN", "error": "speakeasy-cli not installed; run install.sh", ...}`。Python MCP server 本身始终会加载,以便 Claude Code 能够提示安装信息。
## 与 `re-winedbg` 搭配使用
`re-winedbg` 在 Wine(完整的 Windows 兼容层,包括 x86_64 模拟)下运行 Windows .exe,并公开 gdbserver 用于交互式调试。`re-speakeasy` 在 Speakeasy(纯 Python 模拟器,没有真实的 CPU)下运行 .exe,并返回结构化的 API trace。
- 使用 `re-speakeasy.emulate_binary` 来了解“这个二进制文件端到端做了什么,并获取结构化 trace?” — 速度快,没有 x86 模拟,可以安全地重试。
- 使用 `re-winedbg.start_winedbg_gdbserver` 来“交互式地单步调试这个二进制文件,并设置断点” — 速度较慢(完整的 Wine + gdbserver),但赋予了分析师控制权。
对于加密虚拟机字节码家族:`re-speakeasy.emulate_binary` 是正确的首选调用(让加密的 stub 解密,观察分发器的触发,查看执行了哪些 handler);当分析师想要在特定的 handler 入口处设置断点时,`re-winedbg` 是正确的后续步骤。
## 与 `re-leak-scan` 搭配使用
Speakeasy trace 包含网络调用(`WinHttpOpen`、`WSAConnect`、`InternetOpenUrl` 等)。与 `re-leak-scan.find_secrets` 进行交叉对比,以确认动态调用是否与静态字符串表泄漏相匹配。字符串中的 Sentry DSN 或 Logstash URL 是一个凭证;而出现在 Speakeasy trace 中的相同 URL 则是实际的调用点。
标签:DAST, MCP, Python, Windows API模拟, 云资产清单, 恶意软件分析, 无后门, 逆向工具, 逆向工程