5.4 KiB
5.4 KiB
rizin/radare2 命令速查与操作序列
rizin(rz)与 radare2(r2)命令体系同源:交互提示符 [0x...]>,命令 = 短字母 + 参数 + @ 地址 作用域。批处理用 -q -c 'cmd1; cmd2; quit'(-q 静默模式去掉提示符输出)。下文命令以 rizin 现行语法为准,r2 差异处标注。官方文档: rizin.re/book(Rizin Book)。
命令族速查
启动与分析
rizin [-A] [-d] [-q -c '...'] sample:-A=自动分析、-d=调试模式、-q=静默、-c=执行命令后退出aaa全量分析(函数/引用/字符串);aa轻量(函数+字符串引用,大文件首选);aac只做调用图afl函数列表;afi @ 函数函数详情;af @ 地址手工定义函数;afn 名 @ 地址重命名s 地址/符号跳转(seek);f 名 @ 地址定义标记(flag)iI文件信息;iS段列表;ie入口点;il链接库
反汇编
pdf @ 函数函数反汇编;pd NN 条指令;pdr带引用反汇编;pdc伪 C(内置轻量反编译)pdg @ 函数Ghidra 风格伪 C(需 rz-ghidra 插件)p=熵/可打印字符/字符分布条(Rizin Book: entropy/printable/chars bars)——高熵段提示加密/压缩数据e asm.pseudo=true伪汇编模式(寄存器名简化,可读性提升)
交叉引用与字符串
axt @ 地址/符号谁引用它(to);axf @ 地址它引用了谁(from);axg引用图izz全部字符串(含数据段);iz当前段字符串;izz~关键字过滤- 字符串自动命名
str.xxx——axt @ str.xxx直接找引用点
搜索
/x 十六进制字节搜索;/v 值按位宽值搜索(/v4指定 4 字节);/w 字符串文本搜索/r 符号引用搜索(找指针指向目标);/a 汇编指令按指令搜索(如/a jmp)- 命中结果进
hit0_...标记,用s hit0_0逐个跳转
内存与补丁
px N十六进制读(pxw按字、pxr带引用标注——找指针);p8 N裸字节输出wx 字节串 @ 地址写十六进制;wv 值 @ 地址写值;wa 汇编 @ 地址汇编写入(如wa nop @ 0x401000)- 补丁存盘:
Ps 项目名保存项目(标注随项目);zo/zr撤销/重做(写操作前先确认 undo 可用)
调试(rz 内置)
- 启动:
rizin -d sample;attach:rizin -d -p PID db 地址断点;db列表;db- 地址删除;db 地址:eax==1条件断点dc继续;ds单步;dso步过;dcu 地址运行到地址dr寄存器;dr eax=0改寄存器;drr全部寄存器(含标志位)px @ rsp看栈;dbt回溯(backtrace);dt 类型 @ 地址按类型转储dm内存映射(看模块基址——PIE 目标重定位后地址变化,见 gotchas)
项目与文件工具
Ps 名保存项目 /Po 名打开 /Pj > out.jsonJSON 导出rz-bin -I/-z/-i/-E/-l sample:信息/字符串/导入/导出/链接库(r2 对应rabin2)rz-pm -ci rz-ghidra安装插件;rz-pm -l列出
常用操作序列(组合套路)
1. 定位校验/授权比较点(字符串 → 引用 → 反汇编)
rizin -A sample
izz~fail|错误|invalid # 找提示字符串
axt @ str.<提示串> # 谁引用
s <引用地址>; pdf # 向上看比较指令与调用链
2. 无符号(stripped)目标恢复主逻辑
rizin -A sample
ie # 入口地址
s <入口>; af # 定义入口函数
afl # 看函数列表(找大函数=主逻辑候选)
pdf @ <大函数> # 逐函数分析,afn 重命名
3. 绕过校验(调试模式改寄存器/补丁)
rizin -d sample
db 0x401000:eax==0 # 条件断点命中比较点
dc # 跑到断点
dr eax=0 # 改返回/比较值
dc # 继续,观察是否绕过
# 持久化方案: wa / wx 打补丁 → Ps 保存项目
4. 批量分析一批样本(脚本文件)
# analyze.r2: aaa; afl; pdf @ main; quit
for f in samples/*; do rizin -q -i analyze.r2 "$f" > "$f.out"; done
5. 解密循环定位(写断点看写入)
/w 可疑字节模式 # 或 axt 定位解密函数
db <解密循环写地址> # 对写入点下断
dc; px @ <地址> # 命中后看解密输出
实现教训(内化)
- 一切命令都可用
@ 地址指定作用域——批处理时把地址写进命令,别依赖 seek 状态 - 输出进管道/文件前先
e scr.color=0去色(-2只关 stderr 告警,不去色),颜色 ANSI 码会污染解析 izzvsiz:找全库字符串用izz;izz~xxx过滤是定位提示串最快的路pdf之前先确认函数边界(af/afl)——无边界时 pdf 输出错位- 大文件全量
aaa慢:先aa拿函数列表,重点函数af @ 地址补全 - 项目
Ps是标注持久化唯一正路(重命名/注释/断点全保存),别依赖终端历史
使用注意
- 全部在沙箱内执行(re-analyze/platform-tips 最高原则);
rizin -d调试属于动态执行 - 分析结论对照 re-triage 初勘值入档,写 re-analyze/analysis-contract
- 带壳目标先 re-anti-analysis 脱壳再分析;批量任务注意
-q静默与退出码