逆向工程协作服务器

r2-copilot是一个基于radare2的多Agent协作协议(MCP)服务器,用于增强逆向工程分析能力。

  • by darallium
  • Python
  • 本地部署
  • 15 星标
  • 更新于
在 GitHub 查看 darallium/radare2-mcp-server

使用说明

英语是一样的

r2副驾驶

r2-copilot 是一个强大的逆向工程框架 雷达2 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

此存储库将成为第三方工具。官方的mcp工具如下。

安装

※r2pm追加了!r2pm -Uci r2-copilot对较大场景进行渲染期间已观察到该故障。

自构建时

  1. 克隆存储库

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会话。这将提交在后续操作中引用的会话标识。

命令: create_session(file_path='<ファイルへの絶対パス>')

例:

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

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

Note:所有后续命令都需要此命令响应中包含的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>')

Note:此过程可能需要较长的时间,具体取决于二进制大小。

  1. 调查函数

自动解析完成后,列出特定的函数,掌握程序的整体情况。

  • 显示函数列表: list_functions(session_id='<session_id>')

  • 对特定函数进行反汇编: disassemble_function(session_id='<session_id>', address='<関数名 or アドレス>') (例如,要检查作为程序起点的main函数,请指定address='sym.main')

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

如果更复杂的调查或特定工具无法按预期工作execute_command 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

命令: 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)。
  • step_into执行步骤(ds)。
  • step_over:执行步过(dso)。
  • set_breakpoint:设置断点(db)。
  • list_breakpoints列出断点。
  • get_registers:获取寄存器值(dr)。
  • set_register:设置寄存器的值。

旗子

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

设定

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