兴趣研究 May 13, 2020

angr的学习与使用探究

Words count 6.4k Reading time 6 mins. Read count 0

一、什么是angr?

angr 是一个功能强大的二进制程序分析框架,可用于程序的静态分析和动态符号执行。支持 x86、ARM、MIPS 和 PPC 架构中 32 bit 和 64 bit 可执行程序的分析,是一款非常强大的python库。

二、angr怎么安装?

1、安装 virtualenvwrapper

virtualenv 是一个可以在同一台计算机中隔离多个 Python 环境的工具。它能够用于创建独立的 Python 环境,使得多个 Python 环境互不影响。virtualenvwrapper 是 virtualenv 的扩展管理包,可以更方便地管理虚拟环境。

使用 pip 命令安装 virtualenvwrapper,默认安装在 /usr/local/bin 目录下。

1
sudo pip install virtualenvwrapper

2、打开virtualenvwrapper.sh并配置虚拟环境

1
2
cd //
sudo gedit /usr/local/bin/virtualenvwrapper.sh

3、写入

1
export WORKON_HOME=$HOME/Virtualenv

4、执行下

1
source /usr/local/bin/virtualenvwrapper.sh

5、打开开机配置的文件

1
sudo gedit ~/.bashrc

6、写入

1
source /usr/local/bin/virtualenvwrapper.sh

以上每次开机时都会初始化,使得angr环境可以直接建立

7、安装依赖包

由于安装 angr 时需要编译一些 C 文件,需要安装 python-dev 和 libffi-dev。

1
sudo apt-get install python-dev libffi-dev build-essential

8. 安装 angr

使用以下命令以开发模式安装 angr,安装完后可修改和重新编译 angr 的各模块,并且这些改动会自动反映到虚拟环境中,记得要python3.6以上版本~因为python2.7的版本,angr已经不支持了

1
2
mkvirtualenv angr
sudo pip3 install angr

然后退出angr模式,需要安装下protobuf,不然会报错:

1
__new__() got an unexpected keyword argument 'serialized_options'

还是用python3去安装:

1
pip3 install -U protobuf

搞定后退出来后,直接python3运行并试着导入angr包,成功!

开启和关闭虚拟环境的方法:

1
2
workon angr #进入angr环境
deactivate #退出angr环境

三、angr在逆向中的使用

比如看一道简单的逆向题:test

image-20200517210447349

这里需要输入flag,然后判断是否正确,这里直接跑angr脚本,爆破得到flag:

1
2
3
4
5
6
7
8
9
#-*- coding:utf-8 -*-
import angr #导入包
p = angr.Project("test") #打开二进制文件
state = p.factory.entry_state() #保存入口状态
sm = p.factory.simgr(state) #根据入口状态创建进程
sm.explore(find=0x040088C, avoid=0x00400898) #进行爆破,找到正确的输入
flag = sm.found[0].posix.dumps(0) #得到结果然后打印
print(flag)
#flag{just_dynamic_test!}

image-20200517210527340

四、angr在挖洞中的使用

0%