十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

radare2 完全指南:UNIX 风格逆向工程框架与命令行工具集

radare2 完全指南:UNIX 风格逆向工程框架与命令行工具集 radare2 完全指南UNIX 风格逆向工程框架与命令行工具集【免费下载链接】radare2UNIX-like reverse engineering framework and command-line toolset项目地址: https://gitcode.com/gh_mirrors/ra/radare2本指南以 radare2 官方 README 与 USAGE.md、INSTALL.md 等仓库文档为骨架系统讲解 r2 的安装构建、命令行实战、插件生态与脚本化能力并深入源码揭示其底层实现。读完本文你将掌握从零安装 r2、用r2完成二进制分析/编辑/调试、借助r2pm扩展插件以及使用 rasm2/rabin2/rax2 等配套工具的完整实战方案。项目定位从十六进制编辑器到完整逆向框架radare2简称 r2是radare 的完全重写。radare 项目最初只是一个专注于取证forensics的简单命令行十六进制编辑器而今天的 r2 已经成长为功能完整的底层命令行工具具备一组可复用的库、工具与插件用于简化逆向工程任务内嵌 JavaScript 解释器与 r2pipe 的脚本化能力本地磁盘文件编辑、内核内存查看、本地或远程gdb/windbg 服务器程序调试能力广泛的架构支持可对任意二进制进行分析、模拟、调试、修改与反汇编。r2 整体以LGPLv3协议分发但每个插件可以有各自独立的许可证可通过r2 -Lj查看各插件的许可详情。当前仓库master分支版本为6.2.3下一个发布版本为6.2.4以仓库 README 声明为准。安装与构建推荐方式从 Git 源码安装从 Git 仓库源码安装是官方推荐的方式可确保获得最新特性与更新git clone https://gitcode.com/gh_mirrors/ra/radare2 radare2/sys/install.shsys/install.sh是默认的acrmakesymlink安装脚本。从源码看它做了大量智能适配见 sys/install.sh自动识别构建系统当源码路径包含空格时echo $CWD | grep -q 自动切换为 meson/ninja 构建因为 make 无法处理带空格的路径自动处理 sudo通过sudosetup()判断目标前缀是否可写可写则免 sudo检测 Termux、Haiku 等特殊环境并做针对性配置capstone 检测若系统已安装满足版本5.0.0且含 riscv 架构的 capstone则使用--with-syscapstone复用系统库否则编译内置版本安装目标默认执行symstall符号链接安装可用--install参数改用cp复制方式。除 make 外meson/ninjamuon/samu 亦可构建同样受支持。其他安装路径用户目录安装使用 sys/user.sh 将 r2 安装到主目录无需 root 权限r2env 多版本管理通过 Python 的 pip 安装 r2env可在同一机器上管理多个 r2 版本pip install r2env r2env init r2env add radare2gitNix 打包仓库提供 dist/nix/README.md 的 Nix 打包说明发行版软件包r2 在 Snap、Termux、Alpine、Arch、Fedora、Homebrew、MacPorts、Haiku Ports、Void Linux 等渠道均有打包。卸载与清理make uninstall # 卸载当前构建的 r2 sudo make purge # 卸载系统上全部 r2 安装 make system-purge # 连带系统级安装一并清理见 INSTALL.md若构建过程中出现脏文件问题可执行git clean -xdf清理未跟踪文件后重新构建。Windows 构建Windows 构建需要 meson 与 msvc 或 mingw 编译器使用仓库内的 .bat 脚本preconfigure.bat REM setup python, meson, ninja configure.bat REM run meson b vs project make.bat REM run ninja -C b prefix\bin\radare2.exe快速上手r2 核心命令实战安装完成后即可对任意二进制文件展开分析。README 给出的入门流程如下$ r2 /bin/ls # 以只读方式打开文件 aaa # 分析程序等价于 r2 -A afl # 列出全部函数可尝试 aflt、aflm px 32 # 打印当前块 32 字节 hexdump s sym.main # 使用 flag 名称跳转到 main f~foo # 过滤匹配 foo 的 flag内部 |grep iS;is # 列出 section 与 symbol等价于 rabin2 -Ss pdf; agf # 反汇编与 ASCII 艺术函数图 oo;w hello # 以读写方式重新打开并写入字符串 ?*~... # 在全部命令帮助中交互式过滤 q # 退出对每条命令的实战含义命令作用说明r2 /bin/ls打开文件不带-w时以只读方式打开aaa全量分析等价于启动参数-A执行函数、引用、交叉引用等分析afl列出函数变体aflt按类型、aflm按名称提供不同视图px 32十六进制转储打印当前 seek 位置 32 字节s sym.main跳转寻址支持符号/flag 名、地址、表达式f~foo过滤输出~是 r2 内置 grep输出可再过滤iS;is元数据查看;分隔多条命令等价于rabin2 -Sspdf; agf反汇编图形pdf反汇编函数agf输出 ASCII 函数图oo;w hello写文件重新以读写打开后写入字符串q退出在 binr/radare2/radare2.c 的入口实现中可以看到两个实用的启动机制R2_ARGS环境变量可预设完整的命令行参数需以argv[0]开头r2 启动时会读取并替代命令行参数适合在受限环境下批量注入参数r2pipe 直通模式当二进制名以r2p开头时如符号链接直接进入r_main_r2pipe通过R2PIPE_IN/R2PIPE_OUT环境变量从管道读取命令并回写输出这是 r2pipe 协议的底层实现。命令行工具集binr 家族r2 不止r2一个可执行文件binr 目录下提供了完整的配套工具族每个工具对应 libr/main 中的一个r_main_*入口。以 USAGE.md 为准的常用示例# rasm2汇编/反汇编 rasm2 -L # 列出全部汇编/反汇编/模拟插件 rasm2 -a arm -b 64 nop # 用 64 位 ARM 汇编一条 nop rasm2 -d 90 # 反汇编 0x90x86 下为 nop # rabin2二进制信息提取 rabin2 -s /bin/ls # 列出二进制中的符号 rabin2 -z /bin/ls # 查找字符串 # rafind2模式搜索 rafind2 -s lib /bin/ls # 在 /bin/ls 中搜索匹配 lib 的字符串 # rax2进制转换与表达式 rax2 100x20 # 计算表达式结果 rax2 -k 1032 # 保持输入进制十进制输出 rax2 -h # 在 hex/octal/decimal 等进制间转换此外还有radiff2二进制对比、rahash2哈希计算、ragg2shellcode 生成、rarun2运行环境配置、r2agent、r2bb、rafs2、rapatch2、rasign2、ravc2等工具帮助信息可通过各自-h查看。以 libr/main/rabin2.c 为例rabin2 支持大量环境变量来微调行为且大多与e配置项一一对应例如RABIN2_ARGS忽略命令行参数改用环境变量中的参数RABIN2_CHARSET设置-z字符串的默认字符集对应cfg.charsetRABIN2_DEMANGLE控制符号 demangle对应bin.demangle为 0 时不去修饰RABIN2_STRALIGN、RABIN2_MAXSTRBUF、RABIN2_PREFIX、RABIN2_VERBOSE等分别对应bin.str.align、bin.str.maxbuf、bin.prefix、bin.verbose。这种环境变量 ↔ 配置项的映射设计让工具既能命令行交互使用也能被脚本无侵入地驱动。所有 r2 工具与命令都支持以追加字符切换输出格式如j为 JSON或使用-rr2 格式与-jJSON标志便于与其他工具链集成。插件生态与 r2pm 包管理器r2pm 基础用法r2 默认已内置大量插件但可通过r2pm包管理器浏览与安装更多插件r2pm -s word # 搜索匹配关键字的包 r2pm -Uci pkg # 更新数据库并干净安装包 r2pm -u pkg # 卸载指定包 r2pm -l pkg # 列出已安装的包r2pm 的实现位于 libr/main/r2pm.c其完整选项远比 README 示例丰富核心包括选项功能-s [keyword]在数据库中搜索匹配字符串的包-A包含不支持的包-i pkgname安装/更新包及其依赖-c清理缓存、-g全局安装-ci pkgname干净安装清理后安装-U下载/初始化或更新数据库-f强制重新克隆-UU同-U并升级所有已安装的 r2 插件-u pkgname卸载包-f强制卸载-uci/-ui卸载清理安装 / 卸载安装-c pkgname清除指定包的缓存源码-cp清理用户插件目录-d,doc pkgname显示指定包的文档与源码-e pkgname用$EDITOR编辑包的脚本-R pkgname重载插件-H列出 r2pm 环境变量-I显示仓库与已安装包信息-jJSON 输出需配合-l/-s/-v-t YYYY-MM-DD设定包检出日期从源码实现看r2pm 本质是围绕radare2-pm 配方仓库的 git 工作流封装R2PM_GITURL指向配方仓库git_clone()使用git clone --depth1 --recursive浅克隆配方git_pull()负责更新安装动作则生成对应平台的R2PM_INSTALL()脚本片段Linux/macOS/Windows 各有独立模板。这意味着每个包就是一个带安装脚本的配方插件以用户目录~/.local/share/radare2/prefix或全局方式安装。常用插件一览通过r2pm -s即可搜索到社区大量插件仓库 README 列举了代表性项目及其用途图形界面与反编译iaito官方 Qt 图形界面、r2ghidra原生 Ghidra 反编译器pdg命令访问、r2decJS 写的反编译器pdd命令访问调试与动态插桩r2fridafrida IO 插件r2 frida://0启动、r2renefAndroid 动态插桩 IO 插件二进制对比r2diaphoraDiaphora 二进制 diff 引擎移植语言与分析扩展r2ai在 r2 内本地运行 LLM、decaiAI 反编译器、radius2基于 boolector 与 esil 的符号执行引擎、r2papi基于 r2pipe 的高层 API、r2yaraYara 集成、r2sarifSARIF 文档导入导出平台专有格式r2flutterAndroid/iOS 的 Dart/Flutter AOT 快照分析、r2hermesReact Native Hermes 字节码分析、r2unityUnity IL2CPP 元数据与原生二进制检查、goresym导入 GoReSym 符号为 flag、r2pokeGNU/Poke 集成、warrpBinary Ninja WARP 格式原生插件。值得一提的联动r2主程序在启动时会检查已安装插件与当前构建的版本是否匹配见 libr/main/radare2.c若发现过期的 r2pm 插件会交互式提示Rebuild outdated plugin?Y/n/d选择重建-ci或删除-u避免 ABI 不匹配导致的问题。脚本化r2pipe 与多语言绑定r2 支持通过内嵌 JS 解释器直接脚本化也可通过r2pipe从任意编程语言驱动。r2pipe 是执行 r2 命令并获取输出的简单接口在命令后追加j即可获得 JSON 输出配合.cmdj()解析。官方文档强调虽然很多语言有原生 API 绑定但推荐统一使用 r2pipe。受支持的语言包括Python、Ruby、JavaScript、Lua、Perl、PHP、V、Go、Rust、Swift、C#、Java、Shell、OCaml、Haskell、Scheme (Guile)、Common Lisp、Clojure、Erlang、D、Vala/Genie、Prolog、Nim、Newlisp 等。Python 示例见 USAGE.mdimport r2pipe r2 r2pipe.open(/bin/ls) print(r2.cmd(pd 10)) r2.quit()这一过程的底层正是前文提到的 r2pipe 协议r2 通过管道R2PIPE_IN/R2PIPE_OUT读写命令与输出即使在没有 r2pipe 客户端库的环境下也可用r2 -c !*r2p x手动进入该模式。平台支持矩阵r2 的可移植性体现在三层支持矩阵上操作系统Windowsx86/x64/arm64支持至 XP、Linux、Darwin、GNU/Hurd、Apple 的 Mac/i/iPad/watchOS、Android、Wasmer、Dragonfly/Net/Free/Open BSD、Z/OS、QNX、SerenityOS、Solaris、AIX、Haiku、Vinix、FirefoxOS。架构覆盖 i386、x86-64、ARM、AArch64、MIPS、PowerPC、SPARC、RISC-V、m68k、S390、Z80、6502、8080、8051、i4004、AVR、BPF、WebAssembly、Java、Dalvik、MSIL、TMS320c54x/c55x/c55/c64x、Hexagon、GameBoy、SNES、CHIP-8、Brainfuck、Malbolge、whitespace、LOONGARCH、VAX、STM8 等数十种其中既包含通用 CPU也包含虚拟机字节码与 esoteric 语言。文件格式ELF、Mach-O、Fatmach-O、PE、PE、MZ、COFF、XCOFF、OMF、TE、XBE、SEP64、BIOS/UEFI、Apple Dyldcache、Kernelcache、DEX、ART、Java class、Android boot image、ELF coredump、MDMPWindows minidump、WASM、DotNet、GB/GBA、PSX、NDS、z64、N3DS 等覆盖面从引导加载器、移动应用格式到游戏 ROM。文件系统可在用户态挂载 NTFS、FAT、HFS、EXT、APFS、BeosFS、BFS、MINIX、ReiserFS、SFS、ubifs、ufs、jfs、ISO9660、UDF、xfs 等使得 r2 可以像浏览普通目录一样分析磁盘镜像。这一矩阵的实际支撑是 libr/arch/p 下数百个架构插件、libr/bin 下的格式解析器与 libr/fs/p 下的文件系统驱动r2 -L可实时列出所有已编译插件。文档、测试与社区继续深入 r2 的途径USAGE.md更多工具示例与脚本化说明INSTALL.mdmake/meson 两种构建方式的完整安装指引与排错建议DEVELOPERS.mdr2 开发指南架构、代码约定CONTRIBUTING.md问题报告与贡献流程SECURITY.md漏洞报告规范回归测试仓库 test/db 下近千条命令测试用例以及 test/unit 单元测试可运行make tests验证构建正确性社区沟通项目提供 Discord、Mastodon、Telegram、IRCLibera.Chat 的#radare与 Matrix 等多种渠道官方社区参与与沟通准则见 COMMUNITY.md。官方还维护《radare2 Book》与 r2con 大会录像等学习资料详见 README 的 Documentation 一节配合本文的安装、命令与插件讲解足以支撑从入门到进阶的完整学习路径。【免费下载链接】radare2UNIX-like reverse engineering framework and command-line toolset项目地址: https://gitcode.com/gh_mirrors/ra/radare2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表