radare2
所有内容均来自:https://xz.aliyun.com/t/7265#toc-6
radare2工程是由于一系列的组件构成的,这些组件可以在radare2界面或者单独被使用-比如:rabin2,rahash2,radiff2,rafind2,ragg2,rarun2,rax2,radare2。
相当于radare2 是手机,rabin2,rahash2,radiff2,rafind2,ragg2,rarun2,rax2,radare2是手机里面的程序。
可以用-h
和?
来获取到信息。
rabin2
Rabin类似于阿拉伯语中的兔子,radare用这个可爱的名字掩盖了rabin是一个强大的二进制处理工具的事实。它可以获取有关导入,节,标头和其他数据的信息。 Rabin2可以用其他工具接受的格式来显示这些信息,包括radare2本身。Rabin2可以解析许多文件格式:Java CLASS,ELF,PE,Mach-O或插件支持的任何文件格式,并且能够获取符号导入/导出,库依赖,数据段字符串,外部参照,入口点地址,段,架构等
-h
来获取更多的信息
-I
打印出二进制文件的系统属性,语言,字节序,框架,使用了啥加固技术…
1 | rabin2 -I megabeets_0x1 |
rasm2
rasm2
是一个内置的汇编/反汇编器。rasm
最初的设计目的是为二进制打补丁,主要的功能是获取指令对应的字节码。
-h
来获取更多的信息
rahash2
支持多种哈希算法(包括但不限于MD4、 MD5、 CRC16、CRC32、 SHA1、SHA256)的哈希值计算工具。
例子:
你可能对他心存疑惑:
radiff2
比较二进制文件之间的不同。
rafind2
用于在文件中查找指定的内容
-h
获取更多信息
rax2
-h
使用案例:
radare2
综合了所有的r2
启动文件:r2 filename
进去会自动的停在程序的入口点,当然我们也可以用ie
命令打印二进制文件入口点。
i/a/f/s 系列命令
可使用fs
命令查看flagspaces
:
fs flagspace_name
可以选中flagspace。在选中后f
命令会显示flagspace内的flag:
strings
使用iz
/izz
(区别可用iz?
)
1.s addr
或者其他命令定位到指定位置
2.s/ DATA
向下查找DATA
第一次出现的位置,并且定位到此
3.ps
显示字符串
Refs/Xrefs
ax
系列命令用于查看数据/代码段相互调用关系ax?
axt
用来data/code段里面寻找某个地址相关的引用。
@@系列
‘axt’ 命令用来在 data/code段里找寻某个地址相关的引用(更多的操作,请看 ‘ax?’).
‘@@’就像一个迭代器,用来在地址空间里不断地匹配后面一系列相关的命令(更多操作,请看 ‘@@?’)
‘str.*’ 是一个通配符,用来标记所有以 ‘str.’开头的信息,不光会列出字符串标志,同时也包括函数名,找到它们到底在哪里以及何处被调用。
Function
- 查看函数
afl
查看所有函数使用afl
系列命令。可通过afl?
查阅,这里不一一列举,以下常用:
afl
:查看函数列表afl.
:查看当前所处位置的函数aflt
:以表格形式列出函数afls
:以地址或名字或大小给函数列表排序(但不输出)
- 汇编某一函数
pd
系列命令功能是反汇编并显示pd?
可以指自行指定字节(len
可正亦可负)反汇编并显示,亦能够根据分析反汇编某一具体函数并显示。示例如下:
aaa
分析程序并自动命名函数afl
查看函数列表s Function_Name
定位到Function_Name
函数的起始位置(Function_Name
通过上一步骤得知)pdf
反汇编该函数并显示结果(步骤3,4可以整合为一条命令pdf @Function_Name
,因为@ 0
等同于s 0
)
- 反汇编某一个函数
pdc
:类似IDA中的F5
动态
打开时使用-d
参数进入Debugger模式,常用命令:
db flag/address/function name
: 设置断点db - flag/address/function name
: 删除断点db
: 列出所有断点dc
:运行程序dcu address
:运行程序直到某一处为止dr
: 显示寄存器状态ds
: 单步步进(等同于OD中F7)dso
: 单步步过(等同于OD中F8)dm
: 显示内存ood
:重新以Debugger模式打开程序(类似OD中Ctrl+F2,但该命令只打开不运行)ood arg1 arg2
: 带参数重新打开