最近做CTF了解到了符号执行这一技术,发现符号执行真是时十分便捷。
符号执行介绍:https://www.anquanke.com/post/id/157928
我使用的是python下的angr这一工具
环境配置:
1.windows10:
环境:python2(python3好像也支持了)
分别执行:
pip install pyvex
pip install unicorn
pip install simuvex
pip install angr
之后import angr验证
成功(无视warning)
2.Kali linux下安装angr
环境:python2
由于我的kalilinux版本问题,直接pip install virtualenvwrapper是不能成功的(由于python2不支持最新的virtualenvwrapper版本,会报错)
所以我选择安装以前版本的virtualenvwrapper
pip install virtualenvwrapper==4.0
之后
设置一个环境变量WORKON_HOME:
export WORKON_HOME=$HOME/Python-workhome
启动virtualenvwrapper.sh脚本:
source /usr/local/bin/virtualenvwrapper.sh
创建一个虚拟环境:
mkvirtualenv angr
之后会自动进入到虚拟环境中,再安装angr
pip install angr
之后便可以在虚拟环境中使用angr了
切换环境: workon angr
退出环境: deactivate
删除环境: rmvirtualenv
用一个CTF题举例
正好手上有一道简单的CTF题,用来测试一下这个工具的使用
如图:这一题将输入进行了异或操作并与固定字符串比较
试一试用angr而不是写逆向算法来解
#exp.py
import angr
proj = angr.Project("./re2") #获取程序创建angr
simgr = proj.factory.simgr()
simgr.explore(find=lambda s: b"congratulations!" in s.posix.dumps(1)) #匹配到赢得方法
print simgr.found[0].posix.dumps(0)
只跑了十几秒即打印出了flag
参考链接: