7.2 KiB
7.2 KiB
name, description, capabilities
| name | description | capabilities | |
|---|---|---|---|
| re-radare2 | rizin/radare2 工作流:命令行分析、pdf、V 模式。 触发词:radare2、rizin、rz、r2 |
|
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= print disassembly function;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]> Vp切换视图(反汇编/十六进制/图形)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 # 全部寄存器 -
搜索与内存操作:
[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