[翻译]Radare2文档(1)
简介
本文旨在介绍一款用于逆向工程和分析二进制文件的框架radare2,涵盖该框架常见的使用情境。
历史
Radare项目于2006年2月开始,提供了一个免费简单的命令行模式的十六进制编辑器,支持64位偏移。设计之初的目的是使用该工具执行搜索并帮助从硬盘恢复数据。
此后,该项目得到进一步发展,成为一个分析二进制文件的完整框架,同时利用了基本的* NIX概念。 这些概念包括了著名的“一切皆文件”,“在使用stdin/stdout(标准输入/输出)交互的小程序”和“保持简单”的思想。
该项目本身是一个单人项目。非常感谢作者将这个想法和源码分享出来。
该项目的重点是十六进制编辑器。 此外,该项目还包含汇编器/反汇编程序,代码/数据分析和图形工具,脚本,易于Unix集成等功能。
概览
Radare2项目是一组可以一起使用或独立使用的小型命令行实用程序。
l Radare2
十六进制编辑器和调试器的核心。 Radare2允许用户打开一些输入/输出源,就像它们是简单的普通文件,包括磁盘,网络连接,内核驱动程序,调试过程等等。它实现了一个高级命令行界面,用于移动文件,分析数据,拆卸,二进制修补,数据比较,搜索,替换,可视化。 它可以配合各种脚本语言,包括Ruby,Python,Lua和Perl。
l Rabin2
从可执行二进制文件中提取信息的程序,如ELF,PE,Java CLASS和Mach-O。 rabin2被主要用于获取导出的符号,导入,文件信息,交叉引用(外部参照),库依赖性,节等信息。
l Rasm2
用于多种架构(包括Intel x86和x86-64,MIPS,ARM,PowerPC,Java和MSIL)的命令行汇编和反汇编程序。
$ rasm2 -a java 'nop' 00 $ rasm2 -a x86 -d '90' nop $ rasm2 -a x86 -b 32 'mov eax, 33' b821000000 $ echo 'push eax;nop;nop' | rasm2 -f - 509090
l Rahash2
基于块的哈希生成工具。 从小文本字符串到大型磁盘,rahash2支持多种算法,包括MD4,MD5,CRC16,CRC32,SHA1,SHA256,SHA384,SHA512,par,xor,xorpair,mod255,hamdist或entropy。 rahash2可用于检查大文件,内存转储和磁盘的完整性或跟踪更改。
$ rahash2 file file: 0x00000000-0x00000007 sha256: 887cfbd0d44aaff69f7bdbedebd282ec96191cce9d7fa7336298a18efc3c7a5a $ rahash2 file -a md5 file: 0x00000000-0x00000007 md5: d1833805515fc34b46c2b9de553f599d
l Radiff2
实现多种算法的二进制差分实用程序。 它支持二进制文件的字节级或增量差异对比,可以使用Radare代码分析或者使用rsc idc2rdb脚本进行IDA分析,从而查找基本代码块中的更改。
l Rafind2
在文件中查找字节模式的程序。
l Ragg2
ragg2将用简单的高级语言编写的程序编译成x86,x86-64和ARM的小二进制文件。
$ cat hi.r
/* hello world in r_egg */
write@syscall(4); //x64 write@syscall(1);
exit@syscall(1); //x64 exit@syscall(60);
main@global(128) {
.var0 = "hi!\n";
write(1,.var0, 4);
exit(0);
}
$ ragg2 -O -F hi.r
$ ./hi
hi!
$ cat hi.c
main@global(0,6) {
write(1, "Hello0", 6);
exit(0);
}
$ ragg2 hi.c
$ ./hi.c.bin
Hellol rarun2
用于在不同环境中运行程序的启动器,具有不同的参数,权限,目录和覆盖的默认文件描述符。 rarun2可用于:
n 破解小程序
n 模糊测试
n 测试组件
简单的rarun2脚本
$ cat foo.rr2 #!/usr/bin/rarun2 program=./pp400 arg0=10 stdin=foo.txt chdir=/tmp #chroot=. ./foo.rr2
进行Socket连接
$ nc -l 9999 $ rarun2 program=/bin/ls connect=localhost:9999
通过将IO重定向到另一个终端来调试程序
1 打开一个新的控制台,并且输入“tty”来获得终端名称
$ tty ; clear ; sleep 999999 /dev/ttyS010
2 创建一个包含以下名为foo.rr2的rarun2配置文件的新文件:
#!/usr/bin/rarun2 program=/bin/ls stdio=/dev/ttys010
3 启动以下radare2命令:
r2 -R foo.rr2 -d ls
l rax2
一个用于shell的简约数学表达式求值器,用于在浮点值,十六进制表示,十六进制字符串到ASCII之间进行基本转换,八进制到整数等。它还支持字节顺序设置,如果没有参数,可以用作交互式shell 给出。
$ rax2 1337 0x539 $ rax2 0x400000 4194304 $ rax2 -b 01111001 y $ rax2 -S radare2 72616461726532 $ rax2 -s 617765736f6d65 awesom
获得radare2
您可以从网站http://radare.org/或GitHub存储库https://github.com/radare/radare2获取radare。
二进制包可用于多个操作系统(Ubuntu,Maemo,Gentoo,Windows,iPhone等)。 然而,非常鼓励您获取源代码并自行编译以更好地了解依赖关系,使示例更易于访问,当然也可以使用最新版本。
通常每个月都会发布一个新的稳定版本。 有时可以在http://bin.rada.re/获得压缩包。
radare开发库通常比“稳定”版本更稳定。 要获取最新版本:
$ git clone https://github.com/radare/radare2.git
这可能需要一段时间,稍微等待一下。
要更新存储库的本地副本,请在radare2源代码树中的任意位置使用git pull:
$ git pull
如果您对源进行了本地修改,您可以使用以下命令恢复它们:
$ git reset --hard HEAD
或者提交补丁:
$ git diff > radare-foo.patch
获得r2更新和系统安装的最常见方法是使用:
$ sys/install.sh
帮助脚本
查看sys目录下的脚本,那些脚本通常用于自动化与同步,构建和安装r2及其绑定相关的内容。
最重要的是sys / install.sh脚本。它会拉,清洁,构建和部署 r2系统。
部署过程是使用符号链接安装所有程序,库,文档和数据文件而不是复制文件的过程。
默认情况下,它将安装在/ usr中,但您可以定义一个新的前缀作为参数。
这对于开发人员是有用的,因为它允许他们只需运行'make'并尝试更改,而无需再次运行make install。
清理
清理源代码树对于避免在ABI更改后链接到旧对象文件或不更新对象等问题很重要。
以下命令可能会帮助您获得最新的git克隆:
$ git clean -xdf $ git reset --hard @~10 $ git pull
如果要从系统中删除以前的安装,则必须运行以下命令:
$ ./configure --prefix=/usr/local $ make purge
