使用说明
英语是一样的
r2副驾驶
r2-copilot 是一个强大的逆向工程框架 雷达2 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
此存储库将成为第三方工具。官方的mcp工具如下。
安装
※r2pm追加了!r2pm -Uci r2-copilot对较大场景进行渲染期间已观察到该故障。
自构建时
- 克隆存储库
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会话。这将提交在后续操作中引用的会话标识。
命令:
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。
- 初期静的解析(情报收集)
会话开始后,收集二进制的基本信息。这些命令可以并行执行。
-
获取二进制基本信息:
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)是一个重要指标
- 详细解析
然后,执行radare2的强大自动分析功能。这将标识函数、基本块、代码交叉引用等。
命令:
analyze_all(session_id='<session_id>')
Note:此过程可能需要较长的时间,具体取决于二进制大小。
- 调查函数
自动解析完成后,列出特定的函数,掌握程序的整体情况。
-
显示函数列表:
list_functions(session_id='<session_id>') -
对特定函数进行反汇编:
disassemble_function(session_id='<session_id>', address='<関数名 or アドレス>')(例如,要检查作为程序起点的main函数,请指定address='sym.main')
- 高级操作(执行原始命令)
如果更复杂的调查或特定工具无法按预期工作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命令。
