英语在这里
r2副驾驶
 r2-copilot 是一个强大的逆向工程框架 radare2(注:这是一个软件或工具的名称,直接翻译为中文可能无法准确传达其原意,因此通常保留原名,但在此提供音译以作参考) 是为此目的而设计的多智能体协作协议(MCP)服务器。
此仓库包含第三方工具。官方的MCP工具如下。
- r2mcp 可以翻译为“r2mcp(注:此为一个特定缩写或代码,无直接中文含义,保留原样)”或者根据上下文可能需要具体解释其含义,但在此仅提供直译。如果“r2mcp”有特定的行业或领域含义,需要具体情境来确定准确的中文翻译 - 的 官方radare2 MCP(多平台兼容包/维护者包等,具体含义需根据上下文确定)
- r2ai 可以翻译为“r2人工智能”或“第二代人工智能”,具体取决于上下文和语境。在这里,我选择了“r2人工智能”作为翻译,因为它更简洁明了,且能直接传达出“r2”和“人工智能”的概念 - 的(the) 官方R2AI
安装
※ 已经添加到r2pm中了!r2pm -Uci r2-copilot即可进行安装。
自建房屋时
- 克隆存储库
git clone https://github.com/your-repo/r2-copilot.git
cd r2-copilot- 安装依赖关系
在项目中 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等工具,则无需记忆具体命令,建议自然输入。
- 会议开始
首先,针对要分析的文件启动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 将在后续所有命令中必需。
- 初期静态分析(信息收集)
会话开始后,将收集二进制文件的基本信息。这些命令可以并行执行。
- 获取二进制文件的基本信息:
get_binary_info(session_id='') (确认架构、位数、文件格式等)
- 安全机构确认:
check_security(session_id='') (确认NX、PIE、Canary等缓解功能是否启用)
- 字符串列表:
get_strings(session_id='') (提取嵌入在二进制中的字符串,寻找推测程序功能和目的的线索)
- 导入函数列表:
get_imports(session_id='') (我们将确认是从外部库调用了哪些函数。是否存在system或strcpy等危险函数是重要的指标)
- 详细解析
接下来,我们将运行radare2强大的自动分析功能。这将确定函数、基本块、代码相互引用等。
命令: analyze_all(session_id='')
注:根据二进制文件的大小,此处理过程可能会耗时较长。
- 函数调查
自动解析完成后,将列出已识别的函数,以把握程序的整体情况。
- 显示函数列表:
list_functions(session_id='')
- 特定函数的反汇编:
disassemble_function(session_id='', address='') (例如,若要检查程序的起点main函数,则需指定address='sym.main')
- 高级操作(执行原始命令)
在进行更复杂的调查,或特定工具无法按预期运行的情况下execute_command 可以使用它直接执行radare2的任意命令。
命令: execute_command(session_id='', command='')
# "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将显示16进制转储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命令。
