简单的活着

angr

Posted on By Mista Cai

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.