返回市场
radare2-MCP服务器

radare2-MCP服务器

作者:darallium10 星标更新:2025-10-25

项目介绍

技术文档摘要

英文原文

r2-copilot

asciicast r2-copilot 是一个为强大的逆向工程框架 radare2 提供服务的 Multi-Agent Collaboration Protocol (MCP) 服务器。

此仓库是一个第三方工具。官方的mcp工具如下:

  • r2mcp - 官方的 radare2 mcp 链接
  • r2ai - 官方的 r2ai 链接

安装

※ 已经添加到 r2pm 中!可以通过 r2pm -Uci r2-copilot 进行安装。

自建情况

  1. 克隆仓库
git clone https://github.com/your-repo/r2-copilot.git
cd r2-copilot
  1. 安装依赖 项目中使用 uv 来管理依赖。
uv sync

安装 radare2

为了使 r2pipe 正常工作,需要在系统上安装 radare2

mkdir -p ~/.local/src/
cd ~/.local/src/
git clone https://github.com/radareorg/radare2 --depth 1
radare2/sys/install.sh

对于 Windows 用户,下载预编译的二进制文件并将其加入 PATH 更为快捷。

参见:https://github.com/radareorg/radare2

使用方法

要启动服务器,请执行以下命令:

./start.sh

这将启动一个通过标准输入输出(stdio)进行通信的 MCP 服务器。 服务器会等待来自客户端的请求,执行 radare2 的命令,并返回结果。

若要在 gemini-cli 中使用,请在 ~/.gemini/settings.json 文件中添加以下内容:

{
  /*
      ...
  */
  "mcpServers": {
    /*
        ...
    */
    "r2-copilot": {
      "command": "r2pm",
      "args": ["-r", "r2mcp"]
      /* 对于自建的情况且未使用 uv 的用户:
      "command": "/path/to/r2-copilot/start.sh"
      /* 
      /* 如果使用了 uv,性能可能会更好:
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/r2-copilot",
        "r2copilot"
      ]
      */
  }
}

分析工作流程

推荐按照以下步骤进行一般性的二进制分析。 如果使用 gemini-cli 等工具,则无需记忆具体命令,推荐使用自然语言输入。

  1. 开始会话

首先,针对待分析的文件开始 radare2 会话。这将生成后续操作所需的会话 ID。

命令: create_session(file_path='<文件的绝对路径>')

例如:

分析 /home/kali/ctf/iris/sqlate/vuln

print(default_api.create_session(file_path='/home/kali/ctf/iris/sqlate/vuln'))

注意: 后续所有命令都需要使用此命令响应中的 session_id。

  1. 初始静态分析(信息收集)

一旦会话开始,收集二进制的基本信息。这些命令可以并行执行。

  • 获取二进制基本信息: get_binary_info(session_id='<session_id>') (确认架构、位数、文件格式等)

  • 检查安全机制: check_security(session_id='<session_id>') (检查 NX, PIE, Canary 等缓解功能是否启用)

  • 列出字符串: get_strings(session_id='<session_id>') (提取嵌入在二进制中的字符串,寻找推测程序功能或目的的线索)

  • 列出导入函数: get_imports(session_id='<session_id>') (确认调用了哪些外部库函数。system 或 strcpy 等危险函数的存在是重要指标)

  1. 详细分析

接下来,运行 radare2 强大的自动分析功能。这将识别函数、基本块和代码交叉引用等。

命令: analyze_all(session_id='<session_id>')

注意: 根据二进制大小,此过程可能耗时较长。

  1. 函数调查

自动分析完成后,列出已识别的函数,了解程序的整体结构。

  • 列出函数: list_functions(session_id='<session_id>')

  • 反汇编特定函数: disassemble_function(session_id='<session_id>', address='<函数名 or 地址>') (例如,要调查作为程序起点的 main 函数,可指定 address='sym.main')

  1. 高级操作(执行原始命令)

对于更复杂的调查或某些工具未能按预期工作的情况,可以使用 execute_command 执行任意 radare2 命令。

命令: execute_command(session_id='<session_id>', command='<radare2命令>')

# 查找包含“login”字符串的函数
print(default_api.execute_command(command='afl | grep login', session_id='...'))

API 参考

服务器公开了以下工具,每个工具对应特定的 radare2 功能。

会话管理

  • create_session: 开始新的 radare2 会话。
  • list_sessions: 列出所有活动会话。
  • close_session: 关闭会话。
  • switch_session: 切换当前会话。

分析

  • analyze_all: 分析整个二进制 (aa)。
  • analyze_function: 分析特定地址的函数 (af)。
  • list_functions: 列出已分析的函数 (afl)。
  • get_function_info: 获取函数的详细信息 (afi)。
  • get_xrefs_to: 获取指向特定地址的交叉引用 (axt)。
  • get_xrefs_from: 获取从特定地址出发的交叉引用 (axf)。

二进制信息

  • get_binary_info: 获取关于二进制的全面信息 (iI)。
  • get_sections: 列出节 (iS)。
  • get_symbols: 列出符号 (is)。
  • get_strings: 列出字符串 (iz, izz)。
  • get_imports: 列出导入的函数 (ii)。
  • get_entrypoint: 获取入口点 (ie)。
  • check_security: 检查安全功能(如 NX, PIE 等)。

反汇编

  • disassemble: 反汇编指令 (pd)。
  • disassemble_function: 反汇编整个函数 (pdf)。
  • print_hex: 显示十六进制转储 (px)。
  • print_string: 显示地址处的字符串 (psz)。

导航

  • seek: 移动到特定地址 (s)。
  • seek_relative: 相对移动。
  • get_current_address: 获取当前地址。
  • set_block_size: 设置块大小 (b)。

搜索

  • search_bytes: 搜索字节模式 (/x)。
  • search_string: 搜索字符串 (/)。
  • search_rop_gadgets: 搜索 ROP 组件 (/R)。

写入

  • write_hex: 写入十六进制值 (wx)。
  • write_assembly: 写入汇编指令 (wa)。
  • write_nop: 写入 NOP 指令。

调试

  • continue_execution: 继续程序执行 (dc)。
  • 逐步执行 (ds)。
  • 跨步执行 (dso)。
  • 设置断点 (db)。
  • 列出断点。
  • 获取寄存器值 (dr)。
  • 设置寄存器值。

标记

  • list_flags: 列出标记(标签) (f)。
  • create_flag: 创建标记。

配置

  • get_config: 获取配置值 (e)。
  • set_config: 设置配置值。
  • execute_command: 执行原始的 radare2 命令。