返回市场
身份验证-MCP

身份验证-MCP

作者:Captain-AI-Hub80 星标更新:2025-11-18

项目介绍

IDA-MCP

logo

MCP 徽章

wiki deepwiki

IDA-MCP (FastMCP + 多实例协调器)

  • 每个IDA实例启动一个FastMCP服务器 (/mcp)
  • 第一个实例占用 127.0.0.1:11337 作为协调器,维护内存注册表并支持工具转发
  • 后续实例自动向协调器注册;无需共享文件或手动配置端口
  • 通过基于进程的代理 ida_mcp_proxy.py 统一访问/聚合实例工具(MCP客户端可以通过命令/参数启动)

工具理念是尽量减少操作。大多数IDE不支持过多的工具。过多的工具可能导致工具调用失败和准确性降低。

当前工具

内置插件 (server.py)

反转工具

  • check_connection – 快速检查插件和协调器的健康状况(ok/计数)
  • list_instances – 返回已注册实例的原始列表
  • list_functions(offset, count) – 分页列出函数(名称、起始地址、结束地址)
  • get_function_by_name(name) – 根据精确名称匹配获取单个函数的起始/结束地址
  • get_function_by_address(address) – 通过地址获取函数信息(起始或内部)
  • convert_number(text, size) – 数字转换(十进制/十六进制/二进制 ↔ 多种表示形式,指定位宽)
  • list_globals_filter(offset, count, filter?) – 分页 + 模糊(子串)过滤全局符号列表(排除函数)
  • list_globals(offset, count) – 分页列出所有全局符号(排除函数)
  • list_strings_filter(offset, count, filter?) – 分页 + 模糊过滤字符串列表
  • list_strings(offset, count) – 分页列出所有字符串
  • list_local_types() – 列出所有本地类型(序号 + 截断声明)
  • decompile_function(address) – 反编译函数(需要Hex-Rays)
  • disassemble_function(start_address) – 输出函数反汇编(指令/注释)
  • get_xrefs_to(address) – 获取引用到特定地址的交叉引用
  • get_xrefs_to_field(struct_name, field_name) – 通过启发式方法获取引用结构字段的指令位置
  • set_comment(address, comment) – 设置/清除地址注释(同步到伪代码)
  • rename_local_variable(function_address, old_name, new_name) – 重命名函数局部变量(Hex-Rays)
  • rename_global_variable(old_name, new_name) – 重命名全局变量
  • set_global_variable_type(variable_name, new_type) – 设置全局变量类型
  • rename_function(function_address, new_name) – 重命名函数
  • set_function_prototype(function_address, prototype) – 设置函数原型
  • set_local_variable_type(function_address, variable_name, new_type) – 设置局部变量类型(Hex-Rays)
  • declare_c_type(c_declaration) – 解析并声明/更新本地类型(结构体/联合体/枚举/typedef)
  • get_entry_points() – 获取所有入口点(序号 + 地址 + 名称)
  • get_metadata() - 获取指定或当前实例的基本元数据(哈希/架构/位等)
  • linear_disassemble(start_address, size) - 从指定地址线性反汇编大小指令
  • read_memory_bytes(memory_address, size) – 从指定地址读取内存字节(1-4096字节)

调试工具

  • dbg_get_registers() – 获取所有寄存器的当前值
  • dbg_get_call_stack() – 获取当前调用栈
  • dbg_list_breakpoints() – 列出所有断点
  • dbg_start_process() – 开始调试(如果尚未开始)
  • dbg_exit_process() – 结束调试进程
  • dbg_continue_process() – 继续执行(恢复)
  • dbg_run_to(address) – 运行到指定地址
  • dbg_set_breakpoint(address) – 设置断点
  • dbg_delete_breakpoint(address) – 删除断点(幂等)
  • dbg_enable_breakpoint(address, enable) – 启用/禁用断点(如果不存在且启用则创建)
  • dbg_step_into() – 单步进入指令
  • dbg_step_over() – 单步跳过指令(调用)

目录结构

IDA-MCP/
  ida_mcp.py              # 插件入口:启动/停止SSE服务 + 注册协调器
  ida_mcp/
    server.py             # FastMCP服务器定义
    registry.py           # 协调器实现 / 多实例注册及/调用转发
    __init__.py           # 包初始化,导出create_mcp_server并解释子模块结构
    proxy/
      ida_mcp_proxy.py    # 进程代理(附加MCP服务器,通过协调器转发/调用)
  mcp.json                # MCP客户端配置(包括代理 / SSE)
  README.md
  requirements.txt        # fastmcp依赖项(如需外部环境)

启动步骤

  1. ida_mcp.py + ida_mcp 文件夹复制到IDA的 plugins/ 目录下。
  2. 打开目标二进制文件,等待分析完成。
  3. 通过菜单/快捷键触发插件:首次启动时会:
    • 选择空闲端口(从8765开始)运行SSE服务 http://127.0.0.1:<port>/mcp/
    • 如果11337端口空闲 → 启动协调器;否则注册到现有协调器
  4. 再次触发插件 = 停止并注销实例。

代理使用

替换 mcp.json 中的 commandargs,然后将其复制到claude客户端的mcp工具配置文件或其他MCP客户端配置文件中。

claude / cherry studio / cursor 客户端示例:

{
  "mcpServers": {
    "ida-mcp-proxy": {
      "command": "Python路径(IDA的Python)",
      "args": ["ida_mcp_proxy.py路径"],
      "env": {},
      "description": "进程MCP代理,转发到正在运行的IDA SSE服务器。"
    }
  }
}

对于claude,直接将上述配置添加到安装目录下的 claude_desktop_config.json 文件中。

cherry studio支持快速创建mcp工具,直接从json导入,然后粘贴上述配置示例。

对于cursor,只需通过模型工具导入。

vscode mcp配置示例:

⚠️注意: 使用vscode copilot可能会导致您的账户被封禁。

{
  "servers": {
    "ida-mcp-proxy": {
      "command": "Python路径(IDA的Python)",
      "args": ["ida_mcp_proxy.py路径"]
    }
  }
}
  1. 永久添加: 设置copilot为Agent模式,点击配置工具 -> 配置工具集 -> 输入工具集名称 -> 输入工具集文件名 -> 确定 -> 然后直接粘贴上述配置示例。

  2. 临时添加: 在项目目录中创建.vscode文件夹,在其中创建mcp.json文件,并粘贴上述配置文件。

  3. copilot还会扫描claude客户端配置文件和cursor配置文件。

依赖项

需要使用IDA的Python环境进行安装:

python -m pip install -r requirements.txt

未来计划

添加UI界面,支持内部模型调用,添加多代理A2A自动化逆向工程功能,待langchain正式更新至1.0.0版本后。