freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

天翼云安全实验室 | radare2中文实践指南【一】
Bl4ck_Ho1e 2022-05-06 09:33:30 290600
所属地 浙江省

前言

IDA pro虽然功能强大、操作简单,但价格也同样非常昂贵。逆向研究者发起和寻求开源的逆向解决方案,radare2就是其中较为优秀的一支。虽然说radare2是基于命令行的工具,但其能力完全不亚于IDA pro。但是radare2的入门用户往往被其命令行的较高门槛劝退,而中文用户更苦于radare2文献资源在国内较为匮乏。所以天翼云安全实验室决定对其展开学习和研究,同时总结一些优质的中文文献提供给中文逆向研究人员。
本文(系列文章)主要包括对Radare2官方文档和资料的精炼,以及实验室安全研究人员对Radare2学习和实践的总结。主要的参考目录如下:

基本知识

总的来说,radare2是个基于命令行的逆向工具,但是也有GUI,一方面是自带的web页面,可以通过-c参数开启:

r2 -c=H /path/to/binary

也有一些第三方开发的GUI应用程序,不过大多数项目都停摆了,目前还活跃且值得推荐的是Cutter,可以去安装一个来上手。

组件介绍

更准确来说,radare2不只是一个工具,而是一个框架,是众多逆向分析工具的组合,接下来将会分别介绍。

radare2

这个是主程序,可以用于通过一系列的命令对文件进行分析与调试,还支持多种语言如Python、Ruby的脚本调用。

rabin2

二进制文件分析器,比如读取ELF信息、导出符号表等。

rasm2

汇编工具,支持x86、ARM、MIPS甚至JAVA语言与机器码的互转。举个例子:

# 机器码0x90对应x86汇编NOP
$ rasm2 -a  x86 -d '90'
nop
# JAVA的NOP机器码为00
$ rasm2 -a java 'nop'
00

rahash2

计算文件hash的工具,支持MD系列、SHA系列多个算法。

radiff2

二进制文件比对工具。

rafind2

在文件中进行特定特征查找的工具。

ragg2

r_egg中间语言编译工具。

rarun2

运行二进制的工具,可以为二进制的运行提供特定环境。举个例子

# 把二进制运行的输入输出定向到TCP socket上
$ nc -l 9999
$ rarun2 program=/bin/ls connect=localhost:9999

rax2

进制转换工具,还可以进行Hex和Str的转换。

基本概念

在radare2的世界里,一个二进制的逆向分析过程需要包括3个步骤:Navigation、Inspection和Modification。
对于radare2中的命令,都可以在命令后加一个?来获取使用说明,比如说p?查看print相关的命令,用s?查看地址跳转相关的命令和使用方法。

Navigation(定位)

逆向分析需要从庞大的二进制文件中定位到关键代码,就是Navigation。Naviation中最重要的是seek命令。
seek命令用于跳转到对应的地址,比如0x100或者[0x100+ptr_table]。使用s++s--可以前后移动,默认步长是0x100。
至于地址,使用的是虚拟地址(VA)也就是基址+偏移的模式。如果r2通过non-VA模式打开二进制,则seek命令的跳转则是只基于文件的偏移地址。

# 一些很直观的用法
s 0x100
s+4
s rsp+0x40
# 返回上一个地址
s-

Inspection(分析)

逆向分析的一个工作要点就是分析二进制文件的功能,print(简写为p)是分析工作中的一个重要命令。
V命令可以用来开启可视化模式,在可视化模式下可以使用方向键或HJKL移动,同时按住shift的话可以进行选择。按Q退出,按P可以在多种模式间切换。
HEX模式
汇编模式
毕竟在计算机的世界里,一切数据都是二进制,所不同的只是解读的方式。所以radare2为p命令提供了非常丰富的功能用于解析数据,具体用法可以通过命令p?获取。

px     # 16进制打印数据
pxw    # 32bits一组打印16进制数据
pxq    # 同上,64bits一组

除了这些基础数据的打印之外,还支持一些更复杂的数据形式,可以使用pf??查询,以及pf???查询使用示例。类似于格式化字符串,例如pf xxS就是分别用2个16进制和1个字符串打印当前指向的3个地址。

# 打印栈,打印2个16进制和1个字符串
pf xxS @ rsp
# 定义一个结构体,其格式为xi(1个16进制和1个整数,16进制取名为foo,整数取名为bar),打印3个该结构体
pf 3xi foo bar

字符串也是非常重要的数据类型,字符串相关的命令可以通过ps?查询。
接下来就是解析指令了,使用的是pd系列命令。

# 指定架构,或者查询有什么架构可以使用
e asm.arch=??
# 指定汇编的风格
e asm.syntax = intel
# 解析1条汇编指令
pd 1

Monification(修改)

write命令(简写为w)可用于写入数据。

  • w hello:写入字符串

  • wx 90 90 90:写入十六进制

  • wa nop:写入汇编

  • wf another.bin:从其他文件读取内容来写入

启动参数

在不解析文件头的同时,以write模式打开二进制文件。

r2 -nw [file]

打开r2,而不打开任何文件。

r2 -

使用指定的指令集打开文件。

# 先查看目前支持的指令集
rasm2 -L
# 使用32位x86指令集
r2 -a x86 -b 32 [file]

在进行正式工作之前先跑一段脚本。

r2 -i patch.r2 [file]

设置参数、变量等

r2 -e scr.color=0 [file]

进行动态调试

r2 -d [file或者pid]

r2交互式命令指南

命令

在进入了r2的交互页面之后,就可以使用r2的交互命令进行二进制分析。r2的交互命令格式基本如下所示:

[.][times][cmd][~grep][@[@iter]addr!size][|>pipe];

上面的描述比较晦涩,所以下面举一些例子来理解r2的交互命令。
多次执行

# 执行px,也就是十六进制形式打印数据
px
# 执行3次px,也就是利用上述格式中的[times]
3px

!前缀执行shell命令
2022-04-28-10-03-38.png
@和@@
简单理解来看,@可以用于指定对象,比如寄存器或者地址,@@可以指定多个对象。

# 十六进制格式打印esp的200字节数据
px 200 @ esp
# 对每一个符号写入0x90(NOP指令)
wx 90 @@ sym.*
# 标记0x10为abc
f abc @ 0x10

其他示例

# C字节数组形式打印,并输出到文件
pc > file.c
# 反编译2000条汇编,并过滤出使用eax的
pd 2000 | grep eax
# 多条指令写在一行
px 20; pd 3; px 40;

关于过滤
其中[~grep]是提供给无法使用grep或者wc等命令的非*nix用户(比如微软家的用户),这里就不做介绍了,具体用法可以使用~?查询。
命令历史

# 查看命令历史记录
!~
# 可以滚动的交互模式,查看命令历史
!~...

表达式

使用?指令解析数据,或者表达式。
2022-04-28-10-40-54.png
数据可以有很多种表达方式:

0x233     : 十六进制
2333      : 十进制
sym.main  : main函数(符号)的地址 
10M       : 10 * 1024 * 1024

还有很多通过$符号索引的数据:

$$    : 当前地址
$l    : 当前汇编长度
$j    : 如果当前指令是跳转指令的话,可以得到跳转的地址
$f    : 如果当前指令是跳转指令的话,可以得到**不跳转**的地址,比如jz不跳转的话去哪
$m    : 汇编代码中提到的地址,比如mov eax, [0x10]中的0x10

后记

本章是系列的开篇,主要对radare2进行了基本的介绍,以及功能的初步讲解和示范,所以也只是选取了个人认为在逆向研究中较为重要的功能进行了记录,而对于软件配置、安装等章节则忽略处理,有具体需要的读者可以参考其详细的 官方文档进行学习。
而本章作为开篇,确实理论多于实践,在后续的文章中会多多从实操的角度展开radare2的学习研究。

# IDA # 教程 # 逆向分析 # Radare2 # 二进制安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Bl4ck_Ho1e 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Bl4ck_Ho1e LV.4
这家伙太懒了,还未填写个人描述!
  • 10 文章数
  • 12 关注者
基于Casbin的ABAC授权模型设计与开发踩坑实录
2022-11-25
企业内部钓鱼邮件演练指南
2022-10-13
当我们谈论小程序安全时,我们在谈论什么
2022-10-13