从Radare2获取完整的二进制控制流程图

时间:2017-07-31 23:06:22

标签: reverse-engineering control-flow-graph radare2

我想使用radare2获得二进制(恶意软件)的完整控制流图 我跟着另一个关于SO的问题this post。我想询问是否有ag而不是另一个命令给出整个二进制文件的控制流图,而不仅仅是一个函数的图形。

1 个答案:

答案 0 :(得分:1)

首先,确保从git存储库安装radare2并使用最新版本:

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

下载并安装radare2后,打开二进制文件并使用aaa命令对其进行分析:

$ r2 /bin/ls
 -- We fix bugs while you sleep.
[0x004049a0]> aaa
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[x] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan)

在radare中的几乎每个命令之后添加?将输出子命令。例如,您知道ag命令及其子命令可以帮助您输出可视图形,因此通过将?添加到ag,您可以发现其子命令:

[0x00000000]> ag?
|Usage: ag[?f]Graphviz/graph code
| ag [addr]             output graphviz code (bb at addr and children)
| ag-                   Reset the current ASCII art graph (see agn, age, agg?)
| aga [addr]            idem, but only addresses
| agc[j] [addr]         output graphviz call graph of function
| agC[j]                Same as agc -1. full program callgraph
| agd [fcn name]        output graphviz code of diffed function
| age[?] title1 title2  Add an edge to the current graph
| agf [addr]            Show ASCII art graph of given function
... <truncated> ...
| agv                   Show function graph in web/png...

您正在搜索agC命令,该命令将以dot格式输出程序的完整调用图。

[0x004049a0]> agC > output.dot

dot实用程序是Graphviz软件的一部分,可以使用sudo apt-get install graphviz进行安装。
您可以在任何离线dot viewer中查看输出,将输出粘贴到online Graphviz viewer,甚至将文件转换为PNG:

$ r2 /bin/ls
[0x004049a0]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0x004049a0]> agC > output.dot
[0x004049a0]> !!dot -Tpng -o callgraph.png output.dot