[!IMPORTANT] Pocket Disasm 是一个独立的开源项目。它与 Hex-Rays 无任何关联、未获其认可、未受其赞助,也非其官方产品。 IDA Pro 和 IDALib 是 Hex-Rays 的产品,需要用户单独拥有有效的安装和许可证。Pocket Disasm 不分发 IDA、IDALib 或任何 Hex-Rays 软件。
Pocket Disasm 运行一个公共的 MCP 路由器,并为每个二进制文件分配一个独立的 IDALib 工作进程。编程代理可以创建、选择、检查、保存和关闭分析会话,而无需为每个文件启动单独的交互式 IDA 窗口。
该项目使用 mrexodia/ida-pro-mcp 的固定版本作为其核心 MCP 分析实现和工具目录。Pocket Disasm 围绕该上游项目构建其统一的多会话路由器、进程隔离、代理集成、诊断和终端控制中心。
在 PowerShell 中运行一条命令:
irm https://raw.githubusercontent.com/whoisqwerz/pocket_disasm/main/install.ps1 | iex
然后打开一个新的终端并运行:
pocket
安装程序会在 %LOCALAPPDATA%\PocketDisasm 下创建一个隔离的 Python 环境,安装固定版本的依赖项,将 pocket 命令添加到用户的 PATH 中,并打开终端控制中心。
ida-pro-mcp 工具目录。pocket。idalib.dll 的目录。默认端点为:
http://127.0.0.1:13339/mcp
端口可以从 TUI 更改。Pocket Disasm 会更新所有之前注册的 MCP 配置文件,并在需要时重启路由器。
代理无需为每个二进制文件设置专用的 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")
这使得一个模型可以管理多个二进制文件,或者多个代理通过同一个路由器工作,而无需共享选定的数据库。
flowchart LR
A1["编程代理 A"] --> MCP["Pocket Disasm MCP<br/>127.0.0.1:13339/mcp"]
A2["编程代理 B"] --> MCP
A3["编程代理 N"] --> MCP
MCP --> S["多会话监督器"]
S --> W1["IDALib 工作进程<br/>二进制 A"]
S --> W2["IDALib 工作进程<br/>二进制 B"]
S --> WN["IDALib 工作进程<br/>二进制 N"]
每个活动会话都有自己独立的进程、内部端口、隔离的分析工作空间、IDA 数据库和工作进程日志。可配置的工作进程限制防止无限制的进程创建;默认值为 8,TUI 接受 1 到 128 之间的值。
Pocket Disasm 在常规 IDA MCP 工具目录中添加了以下工具:
常规分析工具如 survey_binary、lookup_funcs、func_query、find_bytes 和 decompile 接受一个可选的 database 参数。如果省略,Pocket Disasm 使用该 MCP 客户端选择的会话。
TUI 仅将 pocket-disasm MCP 条目合并到现有的配置文件中;它不会替换整个文件。
同样的操作也可通过 CLI 完成:
pocket integrate codex claude cursor --scope global
pocket integrate claude cursor vscode --scope project --project-dir .
TUI 覆盖了正常的安装和控制。CLI 仍可用于自动化和诊断:
运行 pocket <command> --help 可查看所有选项。
Pocket Disasm 将其用户状态存储在以下位置:
%LOCALAPPDATA%\PocketDisasm
重要文件包括:
在 TUI 中使用 Inspect logs 或运行:
pocket logs
TUI 在启动时检查一次是否有较新版本。当有可用更新时,操作列表中会出现 Update Pocket Disasm。更新程序会保留配置,更新隔离环境,重启 TUI,并在路由器之前正在运行时使其重新上线。
winget 安装 Python 3.12。Pocket Disasm 不 包含 IDA、IDALib 或 IDA 许可证。它是一个独立项目,与 Hex-Rays 无任何关联,也未获得其认可。
$script = irm https://raw.githubusercontent.com/whoisqwerz/pocket_disasm/main/install.ps1
& ([scriptblock]::Create($script)) -Uninstall
代理的 MCP 条目有意不被自动移除,以免在卸载期间重写无关配置。如果不再需要,可以从相应的代理配置文件中手动删除这些条目。
Pocket Disasm 以 MIT 许可证 发布。
| 工具 | 用途 |
|---|
idb_open | 为本地二进制文件创建一个隔离的会话 |
idb_list | 列出会话、状态、进程和当前选择 |
idb_select | 为当前 MCP 客户端选择一个默认会话 |
idb_health | 读取工作进程启动和进程健康状况 |
idb_wait | 等待 IDA 自动分析和 MCP 启动 |
idb_save | 保存当前的 IDA 数据库 |
idb_logs | 读取一个工作进程的最近输出 |
idb_close | 停止一个工作进程并释放其资源 |
| 代理 | 全局配置 | 项目配置 |
|---|
| 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 | 使用全局端点 |
| 命令 | 描述 |
|---|
pocket | 打开终端控制中心 |
pocket doctor | 验证 Python、IDA、IDALib 和 MCP 依赖项 |
pocket start | 在后台启动统一路由器 |
pocket stop | 停止路由器及其工作进程 |
pocket restart | 重启路由器 |
pocket status | 显示端点和守护进程状态 |
pocket logs | 打印最近的诊断输出 |
pocket port <port> | 更改已注册代理配置中的端点 |
pocket config --max-workers <n> | 设置并发工作进程限制 |
pocket integrate <agents> | 配置一个或多个编程代理 |
| 文件 | 内容 |
|---|
config.json | IDA 路径、端点端口和工作进程限制 |
integrations.json | 由 Pocket Disasm 管理的 MCP 配置文件 |
events.log | 结构化的生命周期事件和异常回溯 |
pocket-disasm.out.log | 路由器标准输出 |
pocket-disasm.err.log | 路由器错误输出 |
sessions/<session>/worker.log | IDALib 工作进程的持久化输出 |
installer.log | 安装和升级记录 |
update.log | TUI 内更新器输出 |