reverse-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok609hecl1pq6qi
2026-10-20 02:17:15 +03:00
commit da24c2bd20
2227 changed files with 443931 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
# 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` 是标注持久化唯一正路(重命名/注释/断点全保存),别依赖终端历史
## 使用注意
- 全部在沙箱内执行([[re-analyze/platform-tips]] 最高原则);`rizin -d` 调试属于动态执行
- 分析结论对照 [[re-triage]] 初勘值入档,写 [[re-analyze/analysis-contract]]
- 带壳目标先 [[re-anti-analysis]] 脱壳再分析;批量任务注意 `-q` 静默与退出码