Files
reverse-skills-max/vendor-new/rev-skills/.claude/skills/re-radare2/references/commands.md

5.4 KiB
Raw Blame History

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 N N 条指令;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.json JSON 导出
  • 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 码会污染解析
  • izz vs iz:找全库字符串用 izz;izz~xxx 过滤是定位提示串最快的路
  • pdf 之前先确认函数边界(af/afl)——无边界时 pdf 输出错位
  • 大文件全量 aaa 慢:先 aa 拿函数列表,重点函数 af @ 地址 补全
  • 项目 Ps 是标注持久化唯一正路(重命名/注释/断点全保存),别依赖终端历史

使用注意