angr
Installation
安装python虚拟环境,使用apt
包安装找不到/usr/local/bin/virtualenvwrapper.sh
,使用pip
安装
sudo pip install virtualenvwrapper
打开~/.bashrc
,添加
source /usr/local/bin/virtualenvwrapper.sh
export ~/virtualenv # 存放虚拟环境的地方
创建虚拟环境,安装angr
mkvirtualenv angr
sudo pip install angr
loading
angr的二进制装载组件是CLE,CLE现在有对于ELF、PE、CGC和ELF核心转储文件的后端支持。也可以手动配置custom_arch
来启动IDA来解析文件。
使用angr装载二进制文件"/bin/true"
>>> import angr
>>> b = angr.Project("/bin/true")
b
就是主二进制文件以及它依赖的所有库的代表。
# 二进制文件的入口点
>>> print b.entry
# 二进制文件的CPU架构
>>>print b.arch
# 这些是二进制文件内存空间中的最大值和最小值
>>> print b.loader.min_addr(), b.loader.max_addr()
# 这些是文件的全名
>>> print b.filename
Factory
类Project.factory
block
angr以基本块为代码分析的基本单元。基本块:只有入口进来、出口出去的分支,基本块里面的语句一并执行。
Project.factory.block()
,从给定地址取一个基本块。
>>> block = b.factory.block(b.entry)
# “pretty print”的意思,打印当前代码块的反汇编代码到标准输出
>>> block.pp()
# 显示当前代码块有多少条指令
>>> block.instructions
# 显示每条指令的起始地址
>>> block.instruction_addrs
State
project
只表示一个程序的“初始镜像”。angr执行程序的时候,实际操作的是一个代表程序的模拟状态(simulated program state)的特定对象,一个Simstate
,类似快照.
# 获取一个simstate
>>> state = b.factory.entry_state()
Simulation Managers
state
方法获取程序快照,SM使程序执行到下一个快照。是angr利用state实现模拟的基本接口。
# 创建sm,以state或state列表为参数
>>> sm = b.factory.simulation_manager(state)
>>> sm
>>> sm.active
SM默认包含的列表是active
,它和传入的state(或state的列表)一起被初始化。sm.active[0]
显示当前的状态信息。
Analyses
ipython
环境下按TAB
键,以下命令显示b.analyses.
封装的内置分析工具
>>> b.analyses.