radare2入门
ssooking Lv5

介绍

radare2是一款强大的开源命令行逆向工具,它可以反汇编、调试、分析和操作二进制文件。radare2与OD, IDA, Binary Ninja,Ghidra,hopper各有优点。

安装radare2

Radare2的开发非常快,该项目每天都在发展,因此建议在稳定版本上使用当前的git版本。有时稳定版本不如当前git版本稳定!

1
2
$ git clone https://github.com/radare/radare2.git$ cd radare2
$ ./sys/install.sh

如果您不想安装git版本,或者想要编译好的(Windows,OS X,iOS等)的二进制文件,请查看radare2网站上下载页面

更新radare2

强烈建议始终使用git存储库中的最新版本的r2。从git更新r2版本所需要做的就是执行:

1
$ ./sys/install.sh

使用方法

1
r2 -h

常用命令:

r2 filename。然后执行以下命令:
aaa–分析二进制文件
afl–列出功能,确保可以识别main或sym.main
af @ sym.main–分析main函数
pdf @ sym.main–打印main函数
V–进入可视模式
space–在可视模式和图形模式之间切换

获取程序基本信息

rabin2允许从二进制文件中提取信息,包括节,标题(headers)、导入表、字符串、入口点等,并支持几种格式结果导出。rabin2能够解析许多文件格式,例如ELF,PE,Mach-O,Java CLASS。使用-I参数,显示二进制信息,例如操作系统,语言,字节序,体系结构,缓解措施(canary,pic,nx)等。

1
$ rabin2 -I filename

如果在radare2的交互式调试模式下,只需要输入i即可查看这些信息。

调试程序

使用如下命令启动并调试程序,会打印一些Tips信息,并且显示当前所在地址。

1
2
3
$ r2 ./megabeets_0x1
-- There is no F5 key in radare2 yet
[0x08048370]>

执行fo命令,你将得到一些彩蛋。

查看帮助命令

在终端输入?可获得功能命令的帮助。

1
[0x08048370]> ?

在某个命令后添加?,可以获得其所有的子命令和相关命令。如i命令可查看程序信息,其实它是rabin2提供的功能,我们查看其所有字命令参数:

1
[0x08048370]> i?

查看程序调试信息

入口点

1
2
3
[0x08048370]> ie
[Entrypoints]
vaddr=0x08048370 paddr=0x00000370 haddr=0x00000018 hvaddr=0x08048018 type=program

命令行模式下,可以直接使用 查看

1
$ rabin2 -e filename

分析程序

a命令是一个分析程序的命令,它实际是r2 -A filename命令提供的功能。如

1
2
3
4
5
6
7
8
9
10
[0x08048370]> aaa  (aaaa)
[x] Analyze all flags starting with sym. and entry0 (aa)
[Cannot analyze at 0x08048360ac)
[x] Analyze function calls (aac)
[x] Analyze len bytes of instructions for references (aar)
[x] Check for objc references
[x] Check for vtables
[x] Type matching analysis for all functions (aaft)
[x] Propagate noreturn information
[x] Use -AA or aaaa to perform additional experimental analysis.

查看字符串

iz :在数据节中列出字符串
izz :在整个二进制文件中搜索字符串

1
2
3
4
5
6
7
8
[0x08048370]> iz
[Strings]
nth paddr vaddr len size section type string
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
7696581394432 0x804870000000000 0x1400000000 21 -2130595776 ascii \n .:: Megabeets ::. bin.strings
7786775707649 0x804871500000000 0x1600000000 23 -2130595776 ascii Think you can make it? bin.strings
7885559955458 0x804872c00000000 0x900000000 10 -2130595776 ascii Success!\n bin.strings
7928509628419 0x804873600000000 0x1500000000 22 -2130595776 ascii Nop, Wrong argument.\n bin.strings

命令行模式下,可以直接使用 查看

1
$ rabin2 -z filename

Reference

  • Post title:radare2入门
  • Post author:ssooking
  • Create time:2020-01-03 17:54:00
  • Post link:https://ssooking.github.io/2020/01/radare2入门/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.