mcpField
R
re-radare2

re-radare2

github.com/dslsdzc安全20652 次安装2 周前更新
代码仓库

关于 re-radare2

面向二进制逆向工程的 rizin/radare2 命令行分析技能,适合远程、无图形界面或低内存环境。内容涵盖交互分析、批处理脚本、交叉引用、调试及 rz-ghidra 反编译。

主要功能

  1. 01自动分析函数与交叉引用
  2. 02反汇编及可视化控制流
  3. 03命令行批处理与脚本
  4. 04内置调试器与内存搜索
  5. 05保存分析项目并导出 JSON

适用场景

  1. 01在 SSH 或 CI 环境分析二进制
  2. 02批量检查固件或样本
  3. 03定位字符串引用与调用关系
  4. 04调试程序并记录分析标注

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dslsdzc/rev-skills --skill re-radare2

安装后在 Claude Code 中输入/re-radare2确认已加载。

附带文件references/commands.mdreferences/gotchas.md

详细介绍

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

操作步骤

  1. rizin -A 全自动分析:

    rizin -A sample
    

    等待分析完成提示(大文件可按 p 分页查看)。-A 等同于 aaa(全量自动分析:函数/交叉引用/字符串引用)。只做浅层分析时,按需使用 -a x86 等参数。退出:q。

    • 不带参数直接进入交互模式后再补充分析:aaa;轻量版 aa(函数 + 字符串引用,大文件优先使用)
    • 函数列表:afl;单个函数信息:afi @ main;手动定义函数:af @ 0x401000
  2. pdf 反汇编函数:

    [0x00001040]> pdf @ sym.main
    
    • 无符号(stripped)时,先查找入口:izz~entry,或使用 af @ 0x401000 手动定义函数,然后再运行 pdf @ 0x401000
    • pdf = 打印函数反汇编;pd 20 = 打印 20 条指令;pdr 打印带引用的内容
    • 混入分析噪声时,使用 pdf @ <addr> | grep call 过滤调用
    • 重命名:afn 新名字 @ 地址;添加注释:CCu 注释 @ 地址
  3. 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 相同
  4. 可视化 V 模式:

    [0x00001040]> V
    
    • 按 p 切换视图(反汇编/十六进制/图形)
    • 输入 s 后跟地址/符号即可跳转(s sym.main);f 定义函数;d 切换反汇编
    • 图形视图(函数流程):在 V 内按 p 切换到 graph 视图,使用方向键导航——用于梳理控制流
    • 退出 V:q;退出 rizin:再按一次 q
  5. 脚本与 rz-ghidra 反编译:

    # 一行命令批处理
    rizin -q -c 'aaa; pdf @ sym.main; axt @ 0x403000; quit' sample
    
    # 反编译
    rz-pm -ci rz-ghidra
    rizin -c 'aaa; pdg @ sym.check' sample
    

    pdg = 输出 Ghidra 风格的伪 C;没有插件时改用 pdf + 手动还原。

    • 脚本文件:rizin -i script.r2 sample(或在交互模式中运行 . script.r2);脚本中每条命令单独一行,以 quit 结尾
  6. 调试模式(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               # 全部寄存器
    
    • 断点表:db(不带参数时列出);删除断点:db- 地址;条件断点:db 地址:条件(如 db 0x401000:eax==1)
    • 调试器与 gdb 的差异见 [[gotchas]];gdb 系列流程见 [[re-gdb]]
  7. 搜索与内存操作:

    [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
  8. 项目与导出:

    [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]]

评论

支持 Markdown