一、什么是angr?
angr 是一个功能强大的二进制程序分析框架,可用于程序的静态分析和动态符号执行。支持 x86、ARM、MIPS 和 PPC 架构中 32 bit 和 64 bit 可执行程序的分析。
二、安装angr
前提条件:要python3.6以上版本,因为python2.7的版本,angr已经不支持了。
1. 安装基本开发环境
sudo apt-get install python-dev libffi-dev build-essential
2. 安装、配置 virtualenvwrapper
virtualenv 是一个可以在同一台计算机中隔离多个 Python 环境的工具。它能够用于创建独立的 Python 环境,使得多个 Python 环境互不影响。virtualenvwrapper 是 virtualenv 的扩展管理包,可以更方便地管理虚拟环境。
sudo pip install virtualenvwrapper
我的环境有点特殊,之前装过pyenv,用来切换各版本的python。因此virtualenvwrapper.sh不在缺省位置:/usr/local/bin/virtualenvwrapper.sh,而在/root/.pyenv/versions/3.8.0/bin/virtualenvwrapper.sh下。
打开virtualenvwrapper.sh,写入
export WORKON_HOME=$HOME/Virtualenv
执行source /root/.pyenv/versions/3.8.0/bin/virtualenvwrapper.sh
打开开机配置文件
sudo gedit ~/.bashrc
写入
source /root/.pyenv/versions/3.8.0/bin/virtualenvwrapper.sh
每次开机时都会初始化,使得angr环境可以直接建立
3. virtualenvwrapper操作命令
创建环境
mkvirtualenv env1
mkvirtualenv env2
环境创建之后,会自动进入该目录,并激活该环境。
切换环境
workon env1
workon env2
列出已有环境
workon
退出环境
deactivate
删除环境
rmvirtualenv
4. 安装angr
mkvirtualenv angr
pip install angr
三、使用angr
以https://github.com/jakespringer/angr_ctf 的第2题02_angr_find_condition为例,说明怎样使用angr。
编写脚本02.py
import angr
import sys
def main(argv):
bin_path = argv[1]
project = angr.Project(bin_path)
initial_state = project.factory.entry_state()
sm = project.factory.simgr(initial_state)
def is_successful(state):
return b'Good Job' in state.posix.dumps(1) # :boolean
def should_abort(state):
return b'Try again' in state.posix.dumps(1) # :boolean
sm.explore(find=is_successful, avoid=should_abort)
if sm.found:
solution_state = sm.found[0]
print(solution_state.posix.dumps(0))
else:
raise Exception('Could not find the solution')
if __name__ == '__main__':
main(sys.argv)
切换到angr环境
workon angr
执行脚本02.py,跑出结果HETOBRCU
python 02.py 02_angr_find_condition

验证结果,输入HETOBRCU果然出现Good Job.的提示

网友评论