IDAssistMCP
用于的独立MCP(模型上下文协议)服务器插件 IDA Pro 9.x 这将IDA的分析功能暴露给像Claude Desktop这样的LLM客户端。
Screenshot
特性
- 41个MCP工具 涵盖二进制分析、反编译、交叉引用、符号管理、类型系统、导航、修补、导出等
- 6个综合工具 和
action/format/direction 注释、变量、类型、外部参照、书签和代码的参数 - 8 MCP资源 用于可浏览的二进制元数据(分类、函数、导入、导出、字符串、信息、段、节)
- 7个引导提示 用于常见的逆向工程工作流程(功能分析、漏洞识别、文档、数据流跟踪、功能比较、结构恢复、网络协议分析)
- SSE和流式HTTP传输 通过Hypercorn ASGI服务器
- 线程安全的IDB修改 通过
execute_on_main_thread() 包装器 - LRU分析缓存 用于反编译等昂贵的操作
- 异步任务管理器 用于长时间运行的操作
- Pydantic配置 具有环境变量支持(
IDASSISTMCP_ 前缀)
安装
先决条件
- IDA Pro 9.x与Python 3.10+
- Hex-Rays反编译器(可选,用于反编译工具)
选项1:IDA插件管理器(推荐)
hcli plugin install idassistmcp
这会自动安装插件及其Python依赖项。
选项2:手动安装(从释放tarball开始)
从下载最新版本的zip 并将其解压缩到IDA插件目录中:
Linux/macOS:
unzip IDAssistMCP-*.zip -d ~/.idapro/plugins/
窗户: 将拉链拉入 %APPDATA%\Hex-Rays\IDA Pro\plugins\.
然后使用安装依赖项 IDA捆绑的Python (不是你的Python系统):
Linux/macOS:
/python3/bin/pip3 install -r ~/.idapro/plugins/IDAssistMCP/requirements.txt
窗户:
"\python3\python.exe" -m pip install -r "%APPDATA%\Hex-Rays\IDA Pro\plugins\IDAssistMCP\requirements.txt"
替换 ` 使用IDA Pro安装路径。 **提示:** 您还可以使用 IDAUSR` 环境变量,用于指定自定义插件目录。
用法
启动服务器
- 在IDA Pro中打开二进制文件
- 按 Ctrl+Shift+M 或前往 编辑>插件>IDAssistMCP
- MCP服务器URL将打印到IDA的输出窗口
- 再次按Ctrl+Shift+M停止服务器
Claude桌面配置
添加到您的Claude桌面 claude_desktop_config.json:
{
"mcpServers": {
"idassistmcp": {
"url": "http://localhost:9080/mcp"
}
}
}
环境变量
通过环境变量进行配置 IDASSISTMCP_ 前缀:
| 变量 | 默认值 | 描述 |
|---|
IDASSISTMCP_SERVER__HOST | localhost | 服务器绑定地址 |
IDASSISTMCP_SERVER__PORT | 9080 | 服务器端口 |
IDASSISTMCP_SERVER__TRANSPORT | streamablehttp | 运输类型(sse 或 streamablehttp) |
IDASSISTMCP_DEBUG | false | 启用调试模式 |
IDASSISTMCP_LOG_LEVEL | INFO | 日志级别 |
工具参考
二进制管理(2)
| 工具 | 说明 |
|---|
list_binaries | 列出当前加载的二进制文件 |
get_binary_info | 详细的二进制元数据(arch、hash、segments) |
代码分析(4)
| 工具 | 说明 |
|---|
get_code | 获取功能代码-- format: 'decompile' (伪C)或 'disasm' (组装) |
analyze_function | 综合分析:元数据、CFG、调用者/被调用者、反编译 |
get_basic_blocks | CFG基本块及其继承者/前身 |
get_function_stack_layout | 堆栈框架布局(局部变量、参数、保存的规则) |
交叉引用(1个合并)
| 工具 | 操作 | 描述 |
|---|
xrefs | direction:往返/两者, include_calls:bool | 地址的Xref和可选调用者/被调用者 |
评论(1条合并)
| 工具 | 操作 | 描述 |
|---|
comments | action:获取、设置、列出、删除 | 管理评论(常规、可重复、函数) |
变量(1个合并变量)
| 工具 | 操作 | 描述 |
|---|
variables | action:list,rename | 列出局部变量,或用以下命令重命名局部/全局变量 scope: auto, local, global |
类型(2--1合并+1独立)
| 工具 | 动作/描述 |
|---|
types | action:list、set、create_struct、create_enum--管理IDB类型 |
get_classes | 从类型库中列出结构/类类型 |
功能发现(5)
| 工具 | 说明 |
|---|
get_functions | 所有具有过滤和分页功能 |
search_functions_by_name | 按名称模式和大小过滤器搜索 |
get_function_by_name | 精确名称查找 |
get_function_by_address | 地址查询 |
get_function_statistics | 汇总统计数据(计数、大小、前10名) |
符号管理(2)
| 工具 | 说明 |
|---|
rename_symbol | 重命名任何符号(函数或数据) |
batch_rename | 批量重命名多个符号 |
二进制信息(5)
| 工具 | 说明 |
|---|
get_imports | 按模块分组的导入表 |
get_exports | 导出表 |
get_strings | 带分页的字符串表 |
get_segments | 具有权限的内存段 |
get_entry_points | 所有二进制入口点 |
数据分析(6)
| 工具 | 说明 |
|---|
read_memory | 读取地址处的原始字节 |
get_data_at | 在地址处获取键入的数据 |
search_bytes | 二进制字节模式搜索 |
search_strings | 带分页的字符串搜索 |
create_data_var | 在地址处定义数据变量(byte/word/dword/qword/float/ascii/C类型) |
get_data_vars | 列出定义的数据变量(非代码项) |
修补(3)
| 工具 | 说明 |
|---|
patch_bytes | 修补IDB中的原始字节 |
assemble_code | 在地址处组装指令文本,并可选择对其进行修补 |
export_program | 将修补的二进制或IDA数据库导出到磁盘 |
导航(4)
| 工具 | 说明 |
|---|
navigate_to | 将IDA光标移动到地址 |
bookmarks | 整合书签管理 -操作: list, set, remove |
get_current_address | 在光标位置获取地址和上下文 |
get_current_function | 在光标位置获取功能信息 |
任务管理(4)
| 工具 | 说明 |
|---|
start_task | 启动异步后台任务 |
get_task_status | 检查任务进度 |
cancel_task | 取消正在运行的任务 |
list_tasks | 列出所有异步任务 |
项目结构
IDAssistMCP/
├── idassistmcp_plugin.py # IDA plugin_t entry point
├── requirements.txt
├── README.md
└── src/
└── idassist_mcp/
├── __init__.py
├── server.py # FastMCP server + transport
├── context.py # Single-binary IDA context
├── tools.py # 41 MCP tools (IDA API)
├── resources.py # 8 MCP resources
├── prompts.py # 7 guided workflow prompts
├── config.py # Pydantic settings
├── cache.py # LRU analysis cache
├── tasks.py # Async task manager
├── logging.py # IDA logging wrapper
├── utils.py # IDA-specific utilities
└── ui/
└── tool_registry.py # Tool catalog for UI
许可证
有关详细信息,请参阅LICENSE文件。