Angr
大一就接触过,然而没怎么用过(毕竟是pwner),浅记一下安装和基础使用吧。
angr/angr: A powerful and user-friendly binary analysis platform! (github.com)
安装
“如何安装 angr”的简短版本是 。mkvirtualenv --python=$(which python3) angr && python -m pip install angr
,当然我们得先安装好依赖。
virtualenvwrapper
没记错的话,angr这个库需要对某个库进行修改,所有不推荐直接安装,常见的解决办法是在 virtualenvwrapper 这一python虚拟环境中操作。
1 | # 喜欢用python3的话 |
1 | # 设置一个环境变量WORKON_HOME |
看到脚本位置之后通过$ source /路径/virtualenvwrapper.sh
启动virtualenvwrapper.sh脚本,并将上述语句直接写入到~/.bashrc
1 | # virtualenvwrapper相关命令 |
angr
进入环境后,直接安装angr
目前官方不再维护python2版本 ,所以建议装python3版本
1 | $ pip3 install angr |
使用
angr功能很强大,我们只介绍一些和CTF相关的,主要是Simulation Managers相关内容
1 | #1 创建项目 |
但实际上,angr是可以自己找到入口地址的
1 | #3 创建模拟管理器Simulation Managers |
.explore()
应该是最常用的了,通过设置find
和avoid
参数, 它将一直运行,直到找到与 find 条件匹配的状态,该状态可以是要停止的指令的地址、要停止的地址列表,也可以是采用状态并返回是否满足某些条件的函数。
find参数可以是地址,也可以用lambda表达式。
1 | #4 开始执行直到到达希望的解决方案或者探索完所有的可能的路径 |
例子
举个最简单的例子
我们能够找到输入正确时的回显,因此很容易利用angr来求解