分析
angr的目标是使得对二进制程序的分析更加简单。学习至此,angr允许你将分析代码打包为一个通用的格式,以便于应用到任何project的分析中。我们将会在之后的部分中教你如何写你自己的分析代码,但是基本的思想是所有的分析都在project.analyses
中(例如,project.analyses.CFGFast()
)且可以被作为一个方法来调用,返回一个分析结果的实例。
內建分析函数
名字 | 描述 |
---|---|
CFGFast | 构建一个快速的程序控制流图 |
CFGAccurate | 就构建一个精确的程序控制流图 |
VFG | 对程序中的每个方法都执行VSA,创建一个值流图(Value Flow Graph)并检测栈变量 |
DDG | 计算一个基于数据的图,允许你决定给定的的值取决于什么声明 |
DFG | 为每个在CFG中出现的基本块构建数据流图 |
BackwardSlice | 有目的地为程序计算一个Backward Slice |
Identifier | 定义CGC二进制文件中的通用库函数 |
更多! | angr有许多的分析函数,大多数都可以使用!如果你想要知道如何使用某个分析函数,你可以在github上提交一个issue来获取相应的文档 |
容错(Resilience)
分析函数可以有较好的容错性,并且基本上能够catch和记录所有错误。这些错误被记录为analysis
的errors
或者named_errors
属性,具体被记录为哪种属性取决于这个错误是如何被抓出的。然而,你可能想要以“fail fast”模式运行一次分析,从而忽略那些错误。为了达到这个目的,你可以给analysis
的构造函数传入一个fail_fast=True
的参数。
网友评论