从 Radare2 获取完整的二进制控制流图
Getting full binary control flow graph from Radare2
我想使用 radare2 获得二进制(恶意软件)的完整控制流图。
我从关于 SO 的另一个问题中关注 this post。我想问一下是否有另一个命令可以代替 ag
给出整个二进制文件的控制流图,而不仅仅是一个函数的图。
首先,确保从 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 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.
在 radare 中几乎每个命令后添加 ?
将输出子命令。例如,您知道 ag
命令及其子命令可以帮助您输出可视化图形,因此通过将 ?
添加到 ag
您可以发现它的子命令:
[0x00000000]> ag?
Usage: ag<graphtype><format> [addr]
Graph commands:
| aga[format] Data references graph
| agA[format] Global data references graph
| agc[format] Function callgraph
| agC[format] Global callgraph
| agd[format] [fcn addr] Diff graph
... <truncated> ...
Output formats:
| <blank> Ascii art
| * r2 commands
| d Graphviz dot
| g Graph Modelling Language (gml)
| j json ('J' for formatted disassembly)
| k SDB key-value
| t Tiny ascii art
| v Interactive ascii art
| w [path] Write to path or display graph image (see graph.gv.format and graph.web)
您正在搜索 agCd
命令,它将以 dot
格式输出程序的完整调用图。
[0x004049a0]> agCd > output.dot
dot
实用程序是 Graphviz 软件的一部分,可以使用 sudo apt-get install graphviz
进行安装。
您可以在任何离线 dot viewer, paste the output into an online Graphviz viewer 中查看输出,甚至可以将 dot 文件转换为 PNG:
$ r2 /bin/ls
[0x004049a0]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0x004049a0]> agCd > output.dot
[0x004049a0]> !!dot -Tpng -o callgraph.png output.dot
我想使用 radare2 获得二进制(恶意软件)的完整控制流图。
我从关于 SO 的另一个问题中关注 this post。我想问一下是否有另一个命令可以代替 ag
给出整个二进制文件的控制流图,而不仅仅是一个函数的图。
首先,确保从 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 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.
在 radare 中几乎每个命令后添加 ?
将输出子命令。例如,您知道 ag
命令及其子命令可以帮助您输出可视化图形,因此通过将 ?
添加到 ag
您可以发现它的子命令:
[0x00000000]> ag?
Usage: ag<graphtype><format> [addr]
Graph commands:
| aga[format] Data references graph
| agA[format] Global data references graph
| agc[format] Function callgraph
| agC[format] Global callgraph
| agd[format] [fcn addr] Diff graph
... <truncated> ...
Output formats:
| <blank> Ascii art
| * r2 commands
| d Graphviz dot
| g Graph Modelling Language (gml)
| j json ('J' for formatted disassembly)
| k SDB key-value
| t Tiny ascii art
| v Interactive ascii art
| w [path] Write to path or display graph image (see graph.gv.format and graph.web)
您正在搜索 agCd
命令,它将以 dot
格式输出程序的完整调用图。
[0x004049a0]> agCd > output.dot
dot
实用程序是 Graphviz 软件的一部分,可以使用 sudo apt-get install graphviz
进行安装。
您可以在任何离线 dot viewer, paste the output into an online Graphviz viewer 中查看输出,甚至可以将 dot 文件转换为 PNG:
$ r2 /bin/ls
[0x004049a0]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0x004049a0]> agCd > output.dot
[0x004049a0]> !!dot -Tpng -o callgraph.png output.dot