whoisqwerz/pocket_disasm

GitHub: whoisqwerz/pocket_disasm

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

Stars: 20 | Forks: 1

Pocket Disasm ASCII artwork # Pocket Disasm **一个 MCP 端点。多个隔离的 IDALib 会话。** 一个轻量级、Agent 优先的控制层,用于无头(headless)二进制分析, 基于 IDA Pro MCP 工具集。 [![Windows](https://img.shields.io/badge/Windows-10%20%7C%2011-00bcd4?style=flat-square)](#要求) [![Python](https://img.shields.io/badge/Python-3.11%2B-d5caa1?style=flat-square)](#要求) [![License](https://img.shields.io/badge/license-MIT-35c4c0?style=flat-square)](LICENSE)
Pocket Disasm 运行一个公开的 MCP 路由器,并为每个二进制文件提供独立的 IDALib worker。编程 Agent 可以创建、选择、检查、保存和关闭分析会话,而无需为每个文件单独启动交互式 IDA 窗口。 该项目使用 [mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp) 的固定版本作为其核心 MCP 分析实现和工具目录。Pocket Disasm 在该上游项目的基础上构建了统一的多会话路由器、进程隔离、Agent 集成、诊断和终端控制中心。
Pocket Disasm terminal control center
## 安装 在 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, 二进制分析, 云安全运维, 云资产清单, 自动化分析, 跨站脚本, 逆向工具, 逆向工程