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,37 @@
# rizin/radare2 工具特有坑与边界
## r2 / rz 差异(迁移雷达)
- **项目分叉**:rizin 是 radare2 的分叉(2021 起,r2 5.x 时代),两者命令大体兼容但独立演进——r2 教程/博客的命令先 `rz? 命令名` 确认存在再执行
- **插件体系不同**:`r2pm`(r2)vs `rz-pm`(rz),插件不通用;rz-ghidra 是 rz 的反编译插件,r2 对应 `r2ghidra`(r2pm 安装)
- **二进制名不同**:`r2`/`rabin2`(r2)vs `rizin`/`rz-bin`(rz);`rz-bin` 参数与 `rabin2` 基本对齐(`-I/-z/-i/-E/-l`)
- **个别命令名差异**:rz 0.7+ 字符串命令 `izz`/`iz` 保留;但部分分析命令改名(如 r2 的 `axt` 系在 rz 全量保留,`axg` 输出格式不同)——以本技能 commands.md 的现行语法为准
- **版本节奏**:radare2 当前主线 6.2.x;Rizin 当前主线 0.9.x(以官方 Releases 最新为准,不锁定 patch 号)——2021 年分叉后独立演进,命令/API/插件 ABI 不得按共同版本经验推断,执行前用 `r2 -v` / `rizin -v` 核验。Rizin 0.9 起默认启用新分析器(RzAnalysis 2.0 风格行为,个别命令输出有变),大版本升级后先跑一遍验证命令
## 分析相关坑
- **未分析先看 = 空数据**:不开 `-A`/`aaa` 就没有函数边界与交叉引用——`pdf`/`axt` 输出空或错位是常态,先分析
- **`aaa` 全量在超大文件上极慢**(固件几十 MB 可达分钟级):先用 `aa` 或 `aa~`,只对重点段 `af @ 地址`;分析中途可 Ctrl+C,已分析部分保留
- **`pdf` 依赖函数边界**:stripped 目标必须 `af @ 地址` 先定义;无边界时输出可能只打印一条指令或错位
- **字符串搜索用 `izz` 不是 `iz`**:`iz` 只看当前段,`.rodata` 外字符串(`.data` 解密后)会漏——全量用 `izz`
- **PIE/ASLR 地址漂移**:`-A` 分析得到的地址在调试运行后变化(加载基址不同)——调试会话用 `dm` 看真实基址,断点下符号名或按 `dm` 结果换算;静态分析阶段地址是文件映像地址,别拿去和调试内存地址直接比
## 调试器坑(rz 内置 vs gdb)
- **命令体系不是 gdb**:gdb 的 `b`/`c`/`si` 对应 rz 的 `db`/`dc`/`ds`——从 [[re-gdb]] 切过来先别顺手打 `b main`
- **条件断点语法是 `db 地址:条件`**(冒号),不是 gdb 的 `b ... if ...`
- **attach 受权限与 YAMA 限制**:Linux 上 `ptrace` 限制(`/proc/sys/kernel/yama/ptrace_scope`)会让 `rizin -d -p` 失败——临时放开或换 gdb + 同权限启动
- **内置调试器能力有限**:无内核态调试、对多线程/信号处理不如 gdb 成熟——复杂调试场景直接转 [[re-gdb]]
- **调试目标带反调试**:`ptrace` 检测类反调试会干扰——静态分析定位检测点(`/a` 搜 `ptrace` 调用)后处理,见 [[re-anti-analysis]]
## 输出与批处理坑
- **颜色/分页污染管道**:命令输出经管道/重定向时带 ANSI 颜色与交互提示——加 `-q` 静默、`e scr.color=0` 关色、必要时 `e scr.interactive=false`
- **批处理不回显错误**:`-c 'cmd; quit'` 里命令出错只打印到 stderr——用 `-e bin.cache=true` 或脚本文件 `-i` 便于排错;检查退出码
- **大输出刷屏**:`pdf` 在超大函数上输出几千行——`pdf @ 函数 | less` 或 `pd 50` 分段看
- **`Po` 打开旧项目版本不匹配**:rz 版本升级后旧项目可能加载失败——项目文件与版本强绑定,升级后重建分析
## 使用注意
- 全部在沙箱内执行([[re-analyze/platform-tips]] 最高原则);`rizin -d` 调试属动态执行默认沙箱
- 命令细节以目标版本实际行为为准(`rz -v` 查版本);不同版本差异优先查 Rizin Book