关于 re-radare2
面向二进制逆向工程的 rizin/radare2 命令行分析技能,适合远程、无图形界面或低内存环境。内容涵盖交互分析、批处理脚本、交叉引用、调试及 rz-ghidra 反编译。
主要功能
- 01自动分析函数与交叉引用
- 02反汇编及可视化控制流
- 03命令行批处理与脚本
- 04内置调试器与内存搜索
- 05保存分析项目并导出 JSON
适用场景
- 01在 SSH 或 CI 环境分析二进制
- 02批量检查固件或样本
- 03定位字符串引用与调用关系
- 04调试程序并记录分析标注
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dslsdzc/ rev-skills --skill re-radare2安装后在 Claude Code 中输入/re-radare2确认已加载。
附带文件references/commands.mdreferences/gotchas.md
详细介绍
rizin/radare2 命令行分析
何时使用 / 何时不用
- 使用:命令行/脚本化分析;内存 <4GB 或远程环境(GUI 反编译器无法运行);快速反汇编与交叉引用;通过
pdf/V模式探索;固件/批量样本脚本化分析 - 使用:无 GUI 的 SSH/CI 环境(rz 纯终端,
-q -c一行批处理) - 不使用:需要成熟的 GUI 反编译与类型传播(使用 [[re-ghidra]])
- 不使用:只需初步勘察结论([[re-triage]])
- 不使用:主要进行 Windows 用户态调试([[re-x64dbg]] / [[re-windbg]] 更顺手;rz 调试器在 Windows 上能力有限)
工具准备
参考 [[re-analyze/platform-tips]]——命令行工具适用于远程/低内存环境;平台分支中的 Wine/QEMU 用户态仿真经验同样适用。
rizin(radare2 的活跃分支)
- macOS:
brew install rizin - Arch:
pacman -S rizin - Fedora/RHEL(EPEL 8+):
dnf install rizin(Fedora 当前受支持版本与 EPEL 8/9/10 均有软件包);已 EOL 的 Fedora 先检查发行版仓库,没有软件包再使用官方 release 或rz-pm - Debian/Ubuntu:仓库没有 rizin 软件包,
apt install rizin会失败——改用官方 release 二进制(GitHub rizinorg/rizin releases:static tar.xz / Windows zip / macOS pkg)或rz-pm - Kali:
apt install rizin(Kali 自有仓库有软件包,前提是使用 Kali 官方源) - Windows:解压官方 release zip 即可使用(
rz-bin.exe) - 验证:
rizin -v、rz-bin -V - 说明:发行版软件包状态会随时间变化,安装前先检查目标发行版仓库;是否成功一律以
rizin -v为准。其他技能需要 rizin 安装步骤时,请引用此处的矩阵,不要各自复制发行版命令。
radare2 兼容层(旧命令体系)
- Linux:
apt install radare2/dnf install radare2/pacman -S radare2 - macOS:
brew install radare2 - Windows:
choco install radare2 - 验证:
r2 -v - 注意:rz 与 r2 命令基本兼容(
pdf/axt/V相同),但插件名称与个别命令有差异(下文会标注)
rz-ghidra 反编译插件
- 全平台:
rz-pm -ci rz-ghidra(rizin 包管理器,需要网络与编译工具链) - 验证:在 rizin 中运行
pdg @ main能输出伪 C
操作步骤
-
rizin -A全自动分析:rizin -A sample等待分析完成提示(大文件可按
p分页查看)。-A等同于aaa(全量自动分析:函数/交叉引用/字符串引用)。只做浅层分析时,按需使用-a x86等参数。退出:q。- 不带参数直接进入交互模式后再补充分析:
aaa;轻量版aa(函数 + 字符串引用,大文件优先使用) - 函数列表:
afl;单个函数信息:afi @ main;手动定义函数:af @ 0x401000
- 不带参数直接进入交互模式后再补充分析:
-
pdf反汇编函数:[0x00001040]> pdf @ sym.main- 无符号(stripped)时,先查找入口:
izz~entry,或使用af @ 0x401000手动定义函数,然后再运行pdf @ 0x401000 pdf= 打印函数反汇编;pd 20= 打印 20 条指令;pdr打印带引用的内容- 混入分析噪声时,使用
pdf @ <addr> | grep call过滤调用 - 重命名:
afn 新名字 @ 地址;添加注释:CCu 注释 @ 地址
- 无符号(stripped)时,先查找入口:
-
axt交叉引用:[0x00001040]> axt @ 0x403000 # 谁引用 0x403000 [0x00001040]> axf @ sym.main # main 引用了谁字符串引用:
izz列出所有字符串,axt @ str.<名称>查找引用点(字符串已自动命名)。- 定位链:
izz查找关键字符串 →axt @ str.xxx→ 跳转到引用函数s <地址>→pdf——思路与 [[re-ida]] 中的 Alt+T→x→F5 相同
- 定位链:
-
可视化
V模式:[0x00001040]> V- 按
p切换视图(反汇编/十六进制/图形) - 输入
s后跟地址/符号即可跳转(s sym.main);f定义函数;d切换反汇编 - 图形视图(函数流程):在
V内按p切换到 graph 视图,使用方向键导航——用于梳理控制流 - 退出 V:
q;退出 rizin:再按一次q
- 按
-
脚本与 rz-ghidra 反编译:
# 一行命令批处理 rizin -q -c 'aaa; pdf @ sym.main; axt @ 0x403000; quit' sample# 反编译 rz-pm -ci rz-ghidra rizin -c 'aaa; pdg @ sym.check' samplepdg= 输出 Ghidra 风格的伪 C;没有插件时改用pdf+ 手动还原。- 脚本文件:
rizin -i script.r2 sample(或在交互模式中运行. script.r2);脚本中每条命令单独一行,以quit结尾
- 脚本文件:
-
调试模式(rz 内置调试器):
rizin -d ./sample # 以调试模式启动 rizin -d -p 1234 # attach pid[0x7f...]> db 0x401000 # 断点(db = debugger breakpoint,与 r2 相同) [0x7f...]> dc # 继续(continue) [0x7f...]> ds / dso # 单步 / 步过 [0x7f...]> dr eax=0 # 改寄存器(绕过校验常用) [0x7f...]> px @ rsp # 看栈内容 [0x7f...]> drr # 全部寄存器- 断点表:
db(不带参数时列出);删除断点:db- 地址;条件断点:db 地址:条件(如db 0x401000:eax==1) - 调试器与 gdb 的差异见 [[gotchas]];gdb 系列流程见 [[re-gdb]]
- 断点表:
-
搜索与内存操作:
[0x00001040]> /x 5548 # 十六进制搜索 [0x00001040]> /v 0xdeadbeef # 32 位值搜索(小端) [0x00001040]> /w "password" # 字符串搜索 [0x00001040]> /r sym.check # 引用搜索(找谁引用了符号) [0x00001040]> wx 9090 @ 0x401000 # 写字节(NOP 补丁) [0x00001040]> px 32 @ 0x401000 # 读 32 字节- 文件信息:
rz-bin -I sample(架构/入口/段)、rz-bin -z sample(字符串)、rz-bin -i sample(导入)——等同于 r2 的rabin2 -I/-z/-i
- 文件信息:
-
项目与导出:
[0x00001040]> Ps project_name # 保存项目(含分析结果与标注) [0x00001040]> Po project_name # 打开项目 [0x00001040]> Pj > out.json # 导出 JSON 项目(供脚本二次处理)- 分析标注(重命名/注释)会随项目持久保存——下次使用
Po可直接继续
- 分析标注(重命名/注释)会随项目持久保存——下次使用
跨域联合
- [[re-binary-core]]:工作流第 5 步的低内存/命令行替代方案(
RE_DECOMPILER=radare2) - [[re-firmware]]:固件 ELF 批量脚本化分析(无 GUI 环境)
- [[re-ctf]]:CTF 题目的命令行快速攻关
- 与 [[re-format-elf]] 衔接以读取结构;需要 GUI 反编译时转用 [[re-ghidra]]
- 动态调试场景与 [[re-gdb]] 互补(gdb 生态/插件更齐全,rz 内置调试器更轻量)
常见坑与陷阱
- 未运行
-A前信息较少:不进行分析就没有函数边界/交叉引用——先运行-A(或aaa),再查看符号 - 大文件分析缓慢:在超大固件上执行完整的
aaa极慢——使用aa(轻量模式)或aa~限制分析范围,或只对目标段使用af @ addr手动分析 - 命令体系的 r2/rz 差异:网上教程多针对 radare2(r2),rizin(rz)大体兼容,但插件安装命令(
r2pm→rz-pm)及个别命令名称不同——先运行rz?查看帮助再执行 pdf依赖函数边界——无符号时先用af定义函数,否则输出为空或错位- 管道输出中的颜色/分页符会干扰脚本解析——批处理时使用
e scr.color=0去色(-2只会关闭 stderr 告警,不会去色) - 版本差异、调试器与 PIE 地址相关问题见 [[gotchas]]
评论
支持 Markdown