whoisqwerz/pocket_disasm
GitHub: whoisqwerz/pocket_disasm
Pocket Disasm 是一个基于 IDALib 的多会话 MCP 路由器,让编程 Agent 通过统一端点并行分析多个二进制文件,无需重复启动 IDA GUI。
Stars: 20 | Forks: 1

# Pocket Disasm
**一个 MCP 端点。多个隔离的 IDALib 会话。**
一个轻量级、Agent 优先的控制层,用于无头(headless)二进制分析,
基于 IDA Pro MCP 工具集。
[](#要求)
[](#要求)
[](LICENSE)
Pocket Disasm 运行一个公开的 MCP 路由器,并为每个二进制文件提供独立的 IDALib worker。编程 Agent 可以创建、选择、检查、保存和关闭分析会话,而无需为每个文件单独启动交互式 IDA 窗口。
该项目使用 [mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp) 的固定版本作为其核心 MCP 分析实现和工具目录。Pocket Disasm 在该上游项目的基础上构建了统一的多会话路由器、进程隔离、Agent 集成、诊断和终端控制中心。
## 安装
在 PowerShell 中运行以下命令:
```
irm https://raw.githubusercontent.com/whoisqwerz/pocket_disasm/main/install.ps1 | iex
```
然后打开一个新的终端并运行:
```
pocket
```
安装程序会在 `%LOCALAPPDATA%\PocketDisasm` 下创建一个隔离的 Python 环境,安装指定版本的依赖项,将 `pocket` 命令添加到用户的 `PATH` 中,并打开终端控制中心。
## 为什么选择 Pocket Disasm
- **统一端点** — Agent 连接到单个可流式传输的 HTTP MCP 端点。
- **真正的多会话分析** — 每个二进制文件都在独立的 IDALib 进程中运行。
- **并行的 Agent 工作流** — 多个 Agent 可以同时分析不同的二进制文件。
- **兼容 IDA Pro MCP** — 分析调用被路由到固定版本的 `ida-pro-mcp` 工具目录。
- **Agent 管理的会话** — LLM 可以通过 MCP 工具打开和切换二进制文件。
- **内置集成** — 可以从 TUI 中配置 Codex、Claude Code、Cursor、VS Code 和 Windsurf。
- **无需 IDA GUI 自动化** — worker 直接使用 IDALib,不需要交互式 IDA 窗口。
- **持久化诊断** — 路由器、worker、安装程序、更新和生命周期事件都会被记录下来。
- **支持自动更新** — TUI 在启动时检查 GitHub 并提供原位更新。
## 快速开始
1. 运行 `pocket`。
2. 选择 **Configure IDA** 并选择包含 `idalib.dll` 的目录。
3. 选择 **Connect a coding agent** 并选择全局或项目作用域。
4. 如有必要,调整 **Concurrent IDALib sessions**。
5. 选择 **Start MCP router**。
6. 重启或重新加载已配置的编程 Agent。
默认端点是:
```
http://127.0.0.1:13339/mcp
```
可以通过 TUI 更改端口。Pocket Disasm 会更新其先前注册的所有 MCP 配置文件,并在需要时重启路由器。
## Agent 工作流
Agent 不需要为每个二进制文件配置专用的 MCP 服务器。它们通过共享端点创建和路由会话:
```
idb_open(input_path="C:\\samples\\first.exe", session_id="first", wait=true)
idb_open(input_path="C:\\samples\\second.dll", session_id="second", wait=true)
decompile(addr="main", database="first")
survey_binary(database="second")
```
选择范围也可以限定在当前的 MCP 客户端:
```
idb_select(database="first")
decompile(addr="main")
```
这使得单个模型可以管理多个二进制文件,或者多个 Agent 可以通过同一个路由器工作,而无需共享选定的数据库。
## 架构
```
flowchart LR
A1["Coding agent A"] --> MCP["Pocket Disasm MCP
127.0.0.1:13339/mcp"]
A2["Coding agent B"] --> MCP
A3["Coding agent N"] --> MCP
MCP --> S["Multi-session supervisor"]
S --> W1["IDALib worker
binary A"]
S --> W2["IDALib worker
binary B"]
S --> WN["IDALib worker
binary N"]
```
每个活跃会话都有自己独立的进程、内部端口、隔离的分析工作区、IDA 数据库和 worker 日志。可配置的 worker 限制可防止无限制的进程创建;默认值为 8,TUI 接受 1 到 128 之间的值。
## 会话管理工具
Pocket Disasm 在常规的 IDA MCP 目录中添加了以下工具:
| 工具 | 用途 |
| --- | --- |
| `idb_open` | 为本地二进制文件创建隔离会话 |
| `idb_list` | 列出会话、状态、进程和当前选择 |
| `idb_select` | 为当前 MCP 客户端选择默认会话 |
| `idb_health` | 读取 worker 启动和进程健康状态 |
| `idb_wait` | 等待 IDA 自动分析和 MCP 启动 |
| `idb_save` | 保存当前的 IDA 数据库 |
| `idb_logs` | 读取单个 worker 的近期输出 |
| `idb_close` | 停止 worker 并释放其资源 |
常规分析工具(如 `survey_binary`、`lookup_funcs`、`func_query`、`find_bytes` 和 `decompile`)接受可选的 `database` 参数。如果省略,Pocket Disasm 将使用该 MCP 客户端选择的会话。
## 编程 Agent 集成
TUI 仅将 `pocket-disasm` MCP 条目合并到现有的配置文件中;它不会替换整个文件。
| Agent | 全局配置 | 项目配置 |
| --- | --- | --- |
| Codex | `~/.codex/config.toml` | 使用全局端点 |
| Claude Code | `~/.claude.json` | `.mcp.json` |
| Cursor | `~/.cursor/mcp.json` | `.cursor/mcp.json` |
| VS Code | 用户配置文件 `mcp.json` | `.vscode/mcp.json` |
| Windsurf | `~/.codeium/windsurf/mcp_config.json` | 使用全局端点 |
同样可以通过 CLI 进行操作:
```
pocket integrate codex claude cursor --scope global
pocket integrate claude cursor vscode --scope project --project-dir .
```
## CLI
TUI 涵盖了常规的安装和控制。CLI 仍然可用于自动化和诊断:
| 命令 | 描述 |
| --- | --- |
| `pocket` | 打开终端控制中心 |
| `pocket doctor` | 验证 Python、IDA、IDALib 和 MCP 依赖 |
| `pocket start` | 在后台启动统一路由器 |
| `pocket stop` | 停止路由器及其 worker |
| `pocket restart` | 重启路由器 |
| `pocket status` | 显示端点和 daemon 状态 |
| `pocket logs` | 打印近期的诊断输出 |
| `pocket port
` | 更改已注册 Agent 配置中的端点 |
| `pocket config --max-workers ` | 设置并发 worker 限制 |
| `pocket integrate ` | 配置一个或多个编程 Agent |
运行 `pocket --help` 查看所有选项。
## 配置和日志
Pocket Disasm 将其用户状态存储在以下位置:
```
%LOCALAPPDATA%\PocketDisasm
```
重要文件包括:
| 文件 | 内容 |
| --- | --- |
| `config.json` | IDA 路径、端点端口和 worker 限制 |
| `integrations.json` | 由 Pocket Disasm 管理的 MCP 配置文件 |
| `events.log` | 结构化生命周期事件和异常 traceback |
| `pocket-disasm.out.log` | 路由器标准输出 |
| `pocket-disasm.err.log` | 路由器错误输出 |
| `sessions//worker.log` | IDALib worker 的持久化输出 |
| `installer.log` | 安装和升级记录 |
| `update.log` | TUI 内更新器的输出 |
在 TUI 中使用 **Inspect logs** 或运行:
```
pocket logs
```
## 更新
TUI 在启动时会检查一次是否有新版本。如果有可用更新,操作列表中会出现 **Update Pocket Disasm**。更新器会保留配置,更新隔离环境,重启 TUI,如果路由器之前正在运行,还会将其重新联机。
## 要求
- Windows 10 或 Windows 11。
- Python 3.11 或更高版本。安装程序可以通过 `winget` 安装 Python 3.12。
- 需要单独安装并拥有提供 IDALib 的 IDA 版本的授权。
- 在安装、Agent 依赖项设置和更新检查期间需要网络访问权限。
Pocket Disasm **不**包含 IDA、IDALib 或 IDA 授权。它是一个独立的项目,与 Hex-Rays 没有关联,也未得到其认可。
## 卸载
```
$script = irm https://raw.githubusercontent.com/whoisqwerz/pocket_disasm/main/install.ps1
& ([scriptblock]::Create($script)) -Uninstall
```
Agent MCP 条目被特意设计为不会自动删除,因此在卸载期间绝不会重写不相关的配置。如果不再需要,可以从相应的 Agent 配置文件中手动删除它们。
## 致谢
- [mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp),由 mrexodia 创建和维护,提供了 Pocket Disasm 使用的核心 IDA MCP 服务器和分析工具。该上游项目基于 MIT License 分发。
- Hex-Rays 提供了 IDA 和 IDALib,用户必须单独安装并获得授权。
## 许可证
Pocket Disasm 基于 [MIT License](LICENSE) 发布。标签:AI合规, AI 编程助手, IDA Pro, MCP, 二进制分析, 云安全运维, 云资产清单, 自动化分析, 跨站脚本, 逆向工具, 逆向工程