Radare2(R2)使用与插件安装¶
工具简介¶
Radare2(常简称为 r2)是一套开源、跨平台的二进制分析工具。它可以识别 ELF、PE、Mach-O 等文件格式,并提供反汇编、静态分析、调试、十六进制编辑、补丁和脚本自动化等功能。
Radare2 主要通过命令行交互。命令数量很多,但不需要一次全部记住:在 r2 中给命令追加 ? 即可查看帮助,例如 afl?;输入 ? 可以查看总帮助。
仅分析可信或隔离环境中的样本
不要直接在日常使用的主机上运行来源不明的程序。分析可疑文件时,应使用虚拟机或其他隔离环境,并关闭不必要的网络和共享目录。
安装 Radare2¶
优先使用 Radare2 官方发布页提供的当前稳定版本。系统软件仓库中的版本可能较旧,旧版 r2 与新版插件还可能出现 ABI 不兼容。
Windows¶
- 从官方发布页下载 Windows 安装包或压缩包。
- 按安装程序提示完成安装;使用压缩包时,将其解压到固定目录。
- 确认 Radare2 的可执行文件目录已经加入
PATH。 - 重新打开 PowerShell,检查版本:
如果终端提示找不到命令,先确认 radare2.exe 和 r2pm 所在目录,再检查用户或系统的 PATH 环境变量。
Linux¶
发行版仓库可以用于快速安装。以 Debian、Ubuntu 为例:
如果仓库版本过旧,建议改用官方发布包,或按照 Radare2 仓库中的当前构建说明从源码安装。不要同时混用多个来源安装的 r2,否则可能出现程序、库和插件版本不一致。
macOS¶
可以使用 Homebrew 安装:
安装后还应确认 r2pm -v 可以正常执行,因为后续插件管理会用到它。
第一次分析¶
以下命令以 chall 为待分析文件。Windows 用户可以将其替换为 chall.exe。
以只读模式打开¶
r2:启动 Radare2。-A:打开文件后执行自动分析。-AA:执行更深入的自动分析,速度会更慢。
对于较大的文件,可以先运行 r2 chall,进入后再执行 aa 或 aaa,避免每次启动都进行深度分析。
默认先只读分析
只有在确实需要修改文件时才使用 r2 -w chall。建议先复制原文件,再对副本进行补丁操作。
查看文件信息¶
进入 r2 后,可以依次执行:
| 命令 | 作用 |
|---|---|
iI |
查看架构、位数、文件格式和安全属性等基本信息 |
is |
查看符号 |
ii |
查看导入函数 |
iS |
查看节区或段信息 |
izz |
搜索并列出整个二进制中的字符串 |
许多命令支持 JSON 输出,例如 ij、aflj,便于使用脚本继续处理。
分析函数并定位入口¶
| 命令 | 作用 |
|---|---|
aaa |
执行自动分析 |
afl |
列出已识别的函数 |
~main |
对前一条命令的输出进行过滤 |
s main |
跳转到 main 对应的地址或标记 |
pdf |
反汇编当前函数 |
去除符号的程序中不一定存在 main 标记。此时可以从入口点、导入函数、字符串交叉引用或程序初始化代码继续定位。
字符串和交叉引用¶
izz~flag 用于过滤包含 flag 的字符串。找到可疑字符串的地址后,使用 s 跳转,再用 axt 查看哪些代码引用了该地址。CTF 入门题中,成功、失败、密码错误等提示字符串通常是很有价值的切入点。
可视化模式¶
在 r2 中输入 V 进入可视化模式,常用按键如下:
| 按键 | 作用 |
|---|---|
p / P |
切换反汇编、十六进制等视图 |
j / k |
向下或向上移动 |
g |
跳转到指定地址或标记 |
Enter |
跟随当前跳转或调用目标 |
u |
返回上一个位置 |
q |
退出当前视图 |
? |
查看当前模式帮助 |
在命令行模式下执行 VV 可以直接打开函数图视图。
保存分析结果¶
退出 r2 后,临时分析结果通常不会自动保留。可以使用项目保存当前分析状态:
下次在相同工作目录中加载:
项目适合保存函数命名、注释、标记和类型等人工分析结果。项目中可能包含本机路径或样本信息,分享前应检查内容。
基础调试¶
使用 -d 以调试模式启动目标:
进入后可以使用:
| 命令 | 作用 |
|---|---|
db main |
在 main 设置断点 |
dc |
继续运行 |
dr |
查看寄存器 |
ds |
单步执行一条指令 |
dso |
单步越过调用 |
db |
列出断点 |
db- <地址> |
删除指定断点 |
px 32 @ rsp |
从栈指针位置查看 32 字节十六进制数据 |
寄存器名称取决于架构。例如 x86-64 常见栈指针是 rsp,x86 是 esp,ARM64 是 sp。
Note
调试是否可用取决于操作系统权限、目标架构和调试后端。在 Linux 中遇到附加或启动失败时,应检查 ptrace 限制;跨架构样本通常还需要模拟器或远程调试环境。
使用 r2pm 安装插件¶
r2pm 是 Radare2 自带的包管理器,可搜索、安装、更新和卸载插件或相关工具。插件通常需要针对当前 r2 版本编译,因此升级 Radare2 后应同步重装或升级插件。
安装前准备¶
部分插件需要从源码编译。安装前建议准备:
- Git。
- C/C++ 编译器及构建工具。
- 插件说明中列出的额外依赖。
- 可以正常运行且来源一致的
r2、r2pm。
先检查环境:
r2pm -H 会显示包数据库、插件目录和用户级安装前缀等环境信息,可用于排查路径问题。
1. 更新插件数据库¶
第一次使用或搜索不到插件时,先执行:
该命令会初始化或更新 r2pm 的包数据库,需要访问 GitHub 等网络资源。
2. 搜索插件¶
例如搜索反编译相关包:
包名和可用插件会随 r2pm 数据库变化。不要直接照搬过时教程中的包名,应以当前 r2pm -s 的搜索结果为准。
3. 阅读包说明¶
安装前查看包的构建方式、依赖和来源:
这一步尤其重要。r2pm 包脚本可能会下载并编译第三方代码,应确认代码来源可信,并仅在授权环境中使用安全测试类插件。
4. 安装插件¶
推荐使用当前用户权限安装:
用户级安装通常不需要 sudo,也不容易污染系统目录。除非确实需要供所有用户使用,否则不要执行全局安装。
如果必须全局安装,可以使用:
全局安装需要管理员权限,并更容易与系统软件仓库中的 Radare2 发生版本冲突。
5. 验证插件¶
列出 r2pm 已安装的包:
列出 r2 当前识别到的插件:
还应按照 r2pm -d <包名> 给出的说明,在 r2 中执行该插件自己的帮助或测试命令。r2pm -l 只能说明包已安装,不代表插件一定被当前版本的 r2 成功加载。
6. 更新和卸载¶
更新包数据库并升级已安装的 r2 插件:
卸载指定包:
重新安装指定包:
清理源码缓存后重新安装:
当插件构建目录损坏、依赖变化或普通重装仍然失败时,再使用清理后重装。
插件安装故障排查¶
r2pm -U 下载失败¶
- 检查 Git 是否已安装并可在终端执行。
- 检查是否能够访问插件脚本所用的代码托管站点。
- 检查代理是否同时对 Git 和当前终端生效。
- 再次运行
r2pm -U;需要完全重建数据库时可使用r2pm -fU。
编译器或头文件缺失¶
如果日志中出现 compiler not found、make not found、缺少头文件或库等错误,应根据插件文档安装对应构建依赖。Linux 常见基础依赖是编译器、make、pkg-config 和开发头文件;Windows 插件则可能要求 MSYS2、Visual Studio Build Tools 或插件指定的工具链。
不要在没有阅读错误信息和插件说明的情况下反复使用管理员权限重试。缺少依赖并不会因为使用 sudo 而自动解决。
已安装但 r2 没有加载¶
先对比以下输出:
重点检查:
- 当前执行的
r2与安装插件时使用的r2pm是否来自同一套 Radare2。 - 插件是否安装到了
R2PM_PLUGDIR指向的目录。 - 插件是否为当前操作系统和 CPU 架构编译。
- Radare2 升级后,插件是否仍针对旧版 ABI 编译。
升级 r2 后可以先尝试:
如果单个插件仍无法加载,再执行:
多套 Radare2 互相冲突¶
系统包、手工源码安装和解压版可能同时存在。使用下面的命令确认终端实际调用了哪个程序:
如果二者来自不同安装目录,应清理冲突的 PATH 配置,保留同一来源的一套工具,然后重新安装插件。
常用命令速查¶
| 场景 | 命令 |
|---|---|
| 打开文件 | r2 chall |
| 深度分析后打开 | r2 -AA chall |
| 可写模式打开 | r2 -w chall |
| 调试目标 | r2 -d ./chall |
| 自动分析 | aaa |
| 文件信息 | iI |
| 函数列表 | afl |
| 字符串列表 | izz |
| 跳转 | s <地址或标记> |
| 查看当前函数 | pdf |
| 查看交叉引用 | axt |
| 十六进制查看 | px <长度> |
| 可视化模式 | V |
| 函数图 | VV |
| 执行系统命令 | !<命令> |
| 查看帮助 | <命令>? |
| 退出 | q |
官方资源¶
Radare2 更新较快,命令或插件行为发生变化时,应优先参考当前版本的 ? 帮助、r2pm -h 和官方资料。