0x00 开发环境的搭建
这里扯点和分析无关的内容。我在开发的时候,最开始使用的是Angr提供的docker,开始没觉得有啥不爽,后来自己写代码之后发现,docker里面没有IDE呀,我写代码的时候不能自动补全,简直煎熬。于是乎重新装了一个ubuntu14.04系统,可是再运行就出现segmentation fault。查看issue发现是32位的锅。只好换到Ubuntu 16.04 64位。我这里说下安装过程,和官方的不太一样。
首先安装依赖库
[plain]
- sudo apt-get install git python-dev libffi-dev build-essential
再clone一下angr-dev
[plain]
- git clone https://github.com/angr/angr-dev
- cd angr-dev
- ./setup.sh -i -e angr
在这之后,setup脚本会为我们自动创建angr这个虚拟环境,但是此时我们还不能直接使用workon进入,因为还没有增加环境变量。
[plain]
- gedit .bashrc
- #在末尾添加一行
- export WORKON_HOME=$HOME/.virtualenvs
这样再使用workon angr就能够进入angr的虚拟环境了。接下来祭出我最喜欢的VSCode编辑器!需要注意的是,因为VSCode默认使用的是python默认环境,我们需要设置一下进入我们虚拟的angr环境。打开一个工程,点击setting,搜索"python.pythonPath",将这个属性更改为
[plain]
- "python.pythonPath":"$your_HOME/.virtualenvs/angr/bin/python"
如图所示。
0x01 开始分析
官方的例子里面提供了源码,很简单,我不进行详细分析了。主要功能就是接受用户输入的用username和password,验证文件名为usernmae的文件里面存的内容和password相不相同。当然这里留了一个后门,如果输入密码为"SOSNEAKY"的话,直接验证成功。我们这次就是要找到这个后门。
进行分析的代码如下:
[python]
- import angr
- def basic_symbolic_execution():
- p = angr.Project('fauxware')
- state = p.factory.entry_state()
- sm = p.factory.simulation_manager(state)
- def success_auth(state):
- try:
- return 'Welcome' in state.posix.dumps(1)
- except:
- return False
- def failed_auth(state):
- try:
- return 'Go' in state.posix.dumps(1)
- except:
- return False
- sm.explore(find=success_auth, avoid=failed_auth)
- return sm.found[0].posix.dumps(0)
- if __name__ == '__main__':
- print basic_symbolic_execution()
解法和上一篇实例分析一样,都是判断两个状态的输出字符串,然后选择成功的那个状态,求解得到其输入内容。
登录 | 立即注册