一.angr对象
1.angr对象的创建:
使用angr的第一步总是将二进制文件加载到项目中,这样就可以实现对加载的二进制可执行文件分析和模拟。
代码展示:
import angr #导入angr模块
proj=angr.Project("二进制文件路径")
2.angr对象的基本属性:
angr对象创建完毕后,可以访问angr对象的基本属性。angr对象的基本属性包括:CPU架构、二进制文件名称和二进制入口点地址。
代码展示:
print(proj.arch) #查看可执行文件的CPU架构
print(proj.entry) #查看可执行文件的入口地址
print(proj.filename)#查看可执行文件的文件名
二.angr中project.factory类的使用方法
angr中有很多类,其中大部分类需要实例化一个对象。为了避免让你到处传递对象。angr官方提供了preject.factory,该类为经常使用的对象提供了几个方便的构造函数,包括:block函数、
1.block函数
在angr中,以基本代码块为单位分析代码,你将得到一个block对象,这个block对象包含了许多代码块信息。project.factory.block(),该函数用于从给定地址中提取基本代码块。
以下是提取代码块的演示:
block=proj.factory.block(地址) #这是构造block对象的方法,地址可以是入口地#址。此时block就是一个基本代码块对象。
block.pp() #将block对象中内容输出展示
在获取完block对象后,可以通过block对象,实现将提取得到的基本代码块转换为其他表示方法。(vex,capstone)。
以下是通过block对象实现将提取到的基本代码块准换为其他表示:
block.capstone
block.vex