@wxy
This commit is contained in:
Xingyu Wang 2021-02-01 11:26:52 +08:00
parent bff083d503
commit 7d521485c4

View File

@ -1,6 +1,6 @@
[#]: collector: (lujun9972)
[#]: translator: (wxy)
[#]: reviewer: ( )
[#]: reviewer: (wxy)
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Explore binaries using this full-featured Linux tool)
@ -12,13 +12,13 @@
> Radare2 是一个为二进制分析定制的开源工具。
![电脑屏幕上的二进制代码][1]
![](https://img.linux.net.cn/data/attachment/album/202102/01/112611baw4gpqlch10ps1c.jpg)
在《[Linux 上分析二进制文件的 10 种方法][2]》中,我解释了如何使用 Linux 上丰富的原生工具集来分析二进制文件。但如果你想进一步探索你的二进制文件,你需要一个为二进制分析定制的工具。如果你是二进制分析的新手,并且大多使用的是脚本语言,《[GNU binutils 里的九种武器][3]》将帮助你开始学习编译过程和什么是二进制。
在《[Linux 上分析二进制文件的 10 种方法][2]》中,我解释了如何使用 Linux 上丰富的原生工具集来分析二进制文件。但如果你想进一步探索你的二进制文件,你需要一个为二进制分析定制的工具。如果你是二进制分析的新手,并且大多使用的是脚本语言,这篇文章《[GNU binutils 里的九种武器][3]》可以帮助你开始学习编译过程和什么是二进制。
### 为什么我需要另一个工具?
如果现有的 Linux 原生工具也能做类似的事情,那么自然会问为什么你需要另一个工具。嗯,这和你用手机做闹钟、做笔记、做相机、听音乐、上网、偶尔打电话和接电话的原因是一样的。以前,使用单独的设备和工具处理这些功能 —— 比如拍照的实体相机,记笔记的小记事本,起床的床头闹钟等等。对用户来说,有一个设备来做多件(但相关的)事情是*方便的*。另外,杀手锏就是独立功能之间的*互操作性*。
如果现有的 Linux 原生工具也能做类似的事情,你自然会问为什么需要另一个工具。嗯,这和你用手机做闹钟、做笔记、做相机、听音乐、上网、偶尔打电话和接电话的原因是一样的。以前,使用单独的设备和工具处理这些功能 —— 比如拍照的实体相机,记笔记的小记事本,起床的床头闹钟等等。对用户来说,有一个设备来做多件(但相关的)事情是*方便的*。另外,杀手锏就是独立功能之间的*互操作性*。
同样,即使许多 Linux 工具都有特定的用途,但在一个工具中捆绑类似(和更好)的功能是非常有用的。这就是为什么我认为 [Radare2][4] 应该是你需要处理二进制文件时的首选工具。
@ -26,11 +26,11 @@
### 为什么选择 Radare2
有大量非原生的Linux 工具可用于二进制分析,为什么要选择 Radare2我的理由很简单。
有大量非原生的Linux 工具可用于二进制分析,为什么要选择 Radare2?我的理由很简单。
首先,它是一个开源项目,有一个活跃而健康的社区。如果你正在寻找新颖的功能或着 bug 修复的工具,这很重要。
首先,它是一个开源项目,有一个活跃而健康的社区。如果你正在寻找新颖的功能或提供着 bug 修复的工具,这很重要。
其次Radare2 可以在命令行上使用而且它有一个功能丰富的图形用户界面GUI环境叫做 Cutter适合那些对 GUI 比较熟悉的人。作为一个长期使用 Linux 的用户,我对在 shell 上输入感到更舒服。虽然熟悉 Radare2 的命令稍微有一点学习曲线,但我会把它比作 [学习 Vim][6]。你先学习基本的东西,一旦你掌握了它们,你就可以继续学习更高级的东西。很快,它就变成了肌肉记忆。
其次Radare2 可以在命令行上使用而且它有一个功能丰富的图形用户界面GUI环境叫做 Cutter适合那些对 GUI 比较熟悉的人。作为一个长期使用 Linux 的用户,我对习惯于在 shell 上输入。虽然熟悉 Radare2 的命令稍微有一点学习曲线,但我会把它比作 [学习 Vim][6]。你可以先学习基本的东西,一旦你掌握了它们,你就可以继续学习更高级的东西。很快,它就变成了肌肉记忆。
第三Radare2 通过插件可以很好的支持外部工具。例如,最近开源的 [Ghidra][7] 二进制分析和<ruby>逆向工具<rt>reversing tool</rt></ruby>很受欢迎,因为它的反编译器功能是逆向软件的关键要素。你可以直接从 Radare2 控制台安装 Ghidra 反编译器并使用,这很神奇,让你两全其美。
@ -76,9 +76,6 @@ int main() {
```
$ gcc adder.c -o adder
```
```
$ file adder
adder: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9d4366f7160e1ffb46b14466e8e0d70f10de2240, not stripped
$ ./adder
@ -87,7 +84,7 @@ Number now is : 101
#### 加载二进制文件
要分析二进制文件,你必须在 Radare2 中加载它。通过提供文件作为 `r2` 命令的一个命令行参数来加载它。你会进入一个独立的 Radare2 控制台,与你的 shell 不同。要退出控制台,你可以输入 `Quit``Exit` 或按 `Ctrl+D`
要分析二进制文件,你必须在 Radare2 中加载它。通过提供文件作为 `r2` 命令的一个命令行参数来加载它。你会进入一个独立的 Radare2 控制台,与你的 shell 不同。要退出控制台,你可以输入 `Quit``Exit` 或按 `Ctrl+D`
```
$ r2 ./adder
@ -133,7 +130,7 @@ $ r2 -A ./adder
#### 获取一些关于二进制的基本信息
在开始分析一个二进制文件之前你需要一些背景信息。在许多情况下这可以是二进制文件的格式ELF、PE 等)二进制的架构x86、AMD、ARM 等),以及二进制是 32 位还是 64 位。方便的 `r2``iI` 命令可以提供所需的信息:
在开始分析一个二进制文件之前你需要一些背景信息。在许多情况下这可以是二进制文件的格式ELF、PE 等)二进制的架构x86、AMD、ARM 等),以及二进制是 32 位还是 64 位。方便的 `r2``iI` 命令可以提供所需的信息:
```
[0x004004b0]> iI
@ -175,7 +172,7 @@ va true
### 导入和导出
通常情况下,当你知道你要处理的是什么样的文件后,你就想知道二进制程序使用了什么样的标准库函数,或者了解程序的潜在功能。在本教程中的示例 C 程序中,唯一的库函数是 `printf` 来打印信息。你可以通过运行 `ii` 命令看到这一点,它显示了二进制所有导入的库:
通常情况下,当你知道你要处理的是什么样的文件后,你就想知道二进制程序使用了什么样的标准库函数,或者了解程序的潜在功能。在本教程中的示例 C 程序中,唯一的库函数是 `printf`,用来打印信息。你可以通过运行 `ii` 命令看到这一点,它显示了二进制所有导入的库:
```
[0x004004b0]> ii
@ -189,7 +186,7 @@ nth vaddr bind type lib name
5 0x00000000 WEAK NOTYPE _ITM_registerTMCloneTable
```
二进制也可以有自己的符号、函数或数据。这些函数通常显示在 `Exports` 下。这个测试的二进制导出了两个函数:`main` 和 `adder`。其余的函数是在编译阶段,当二进制文件被构建时添加的。加载器需要这些函数来加载二进制文件(现在不用太关心它们):
二进制也可以有自己的符号、函数或数据。这些函数通常显示在 `Exports` 下。这个测试的二进制导出了两个函数:`main` 和 `adder`。其余的函数是在编译阶段,当二进制文件被构建时添加的。加载器需要这些函数来加载二进制文件(现在不用太关心它们):
```
[0x004004b0]>
@ -359,7 +356,6 @@ entry0 0x4004d1 [DATA] mov rdi, main
这是 `adder` 函数的反汇编结果:
```
[0x004005a5]> s sym.adder
[0x00400596]>
@ -622,7 +618,7 @@ via: https://opensource.com/article/21/1/linux-radare2
作者:[Gaurav Kamathe][a]
选题:[lujun9972][b]
译者:[wxy](https://github.com/wxy)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出