mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 19:21:15 +07:00
update angr
This commit is contained in:
parent
d761dc19fa
commit
113d2a3d9b
163
doc/5.3_angr.md
163
doc/5.3_angr.md
@ -1 +1,164 @@
|
|||||||
# angr 二进制自动化分析
|
# angr 二进制自动化分析
|
||||||
|
|
||||||
|
angr是一个多架构的二进制分析平台,具备对二进制文件的动态符号执行能力和多种静态分析能力。
|
||||||
|
|
||||||
|
## 安装
|
||||||
|
|
||||||
|
在Ubuntu上,首先我们应该安装所有的编译所需要的依赖环境:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt install python-dev libffi-dev build-essential virtualenvwrapper
|
||||||
|
```
|
||||||
|
|
||||||
|
强烈建议在虚拟环境中安装angr,因为有几个angr的依赖(比如z3)是从他们的原始库中fork而来,如果你已经安装了z3,那么你肯定不希望angr的依赖覆盖掉官方的共享库。
|
||||||
|
|
||||||
|
对于大多数*unix系统,只需要`mkvirtualenv angr && pip install angr`安装angr就好了。
|
||||||
|
|
||||||
|
如果这样安装失败的话,那么你可以按照这样的顺序:
|
||||||
|
|
||||||
|
```text
|
||||||
|
1. claripy
|
||||||
|
2. archinfo
|
||||||
|
3. pyvex
|
||||||
|
4. cle
|
||||||
|
5. angr
|
||||||
|
```
|
||||||
|
|
||||||
|
从angr的官方仓库安装。
|
||||||
|
|
||||||
|
附安装方法:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/angr/claripy
|
||||||
|
cd claripy
|
||||||
|
sudo pip install -r requirements.txt
|
||||||
|
sudo python setup.py build
|
||||||
|
sudo python setup.py install
|
||||||
|
```
|
||||||
|
|
||||||
|
其他几个angr官方库的安装也是如此。
|
||||||
|
|
||||||
|
## 一些`import angr`可能出现的问题
|
||||||
|
|
||||||
|
如果你在安装angr之后,进入python环境,在import之后有这样的报错:
|
||||||
|
|
||||||
|
```python
|
||||||
|
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
|
||||||
|
[GCC 5.4.0 20160609] on linux2
|
||||||
|
Type "help", "copyright", "credits" or "license" for more information.
|
||||||
|
>>> import angr
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
File "angr/__init__.py", line 25, in <module>
|
||||||
|
from .project import *
|
||||||
|
File "angr/project.py", line 592, in <module>
|
||||||
|
from .analyses.analysis import Analyses
|
||||||
|
File "angr/analyses/__init__.py", line 22, in <module>
|
||||||
|
from .reassembler import Reassembler
|
||||||
|
File "angr/analyses/reassembler.py", line 9, in <module>
|
||||||
|
import capstone
|
||||||
|
File "/usr/local/lib/python2.7/dist-packages/capstone/__init__.py", line 6, in <module>
|
||||||
|
from . import arm, arm64, mips, ppc, sparc, systemz, x86, xcore
|
||||||
|
ImportError: cannot import name arm
|
||||||
|
>>>
|
||||||
|
```
|
||||||
|
|
||||||
|
在ipython环境中也许会有这样的报错:
|
||||||
|
|
||||||
|
```python
|
||||||
|
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
|
||||||
|
Type "copyright", "credits" or "license" for more information.
|
||||||
|
|
||||||
|
IPython 2.4.1 -- An enhanced Interactive Python.
|
||||||
|
? -> Introduction and overview of IPython's features.
|
||||||
|
%quickref -> Quick reference.
|
||||||
|
help -> Python's own help system.
|
||||||
|
object? -> Details about 'object', use 'object??' for extra details.
|
||||||
|
|
||||||
|
In [1]: import angr
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
ImportError Traceback (most recent call last)
|
||||||
|
<ipython-input-1-bcea9b74a356> in <module>()
|
||||||
|
----> 1 import angr
|
||||||
|
|
||||||
|
/root/angr/angr/__init__.pyc in <module>()
|
||||||
|
23 from .state_plugins.inspect import BP
|
||||||
|
24
|
||||||
|
---> 25 from .project import *
|
||||||
|
26 from .errors import *
|
||||||
|
27 #from . import surveyors
|
||||||
|
|
||||||
|
/root/angr/angr/project.py in <module>()
|
||||||
|
590 from .factory import AngrObjectFactory
|
||||||
|
591 from .simos import SimOS, os_mapping
|
||||||
|
--> 592 from .analyses.analysis import Analyses
|
||||||
|
593 from .surveyors import Surveyors
|
||||||
|
594 from .knowledge_base import KnowledgeBase
|
||||||
|
|
||||||
|
/root/angr/angr/analyses/__init__.py in <module>()
|
||||||
|
20 from .congruency_check import CongruencyCheck
|
||||||
|
21 from .static_hooker import StaticHooker
|
||||||
|
---> 22 from .reassembler import Reassembler
|
||||||
|
23 from .binary_optimizer import BinaryOptimizer
|
||||||
|
24 from .disassembly import Disassembly
|
||||||
|
|
||||||
|
/root/angr/angr/analyses/reassembler.py in <module>()
|
||||||
|
7 from itertools import count
|
||||||
|
8
|
||||||
|
----> 9 import capstone
|
||||||
|
10 import cffi
|
||||||
|
11 import cle
|
||||||
|
|
||||||
|
/usr/local/lib/python2.7/dist-packages/capstone/__init__.py in <module>()
|
||||||
|
4 if _python2:
|
||||||
|
5 range = xrange
|
||||||
|
----> 6 from . import arm, arm64, mips, ppc, sparc, systemz, x86, xcore
|
||||||
|
7
|
||||||
|
8 __all__ = [
|
||||||
|
|
||||||
|
ImportError: cannot import name arm
|
||||||
|
```
|
||||||
|
|
||||||
|
可以看到,是capstone出现了问题。
|
||||||
|
|
||||||
|
解决这个问题的方法是重新安装angr:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo pip install -I --no-use-wheel capstone
|
||||||
|
```
|
||||||
|
|
||||||
|
这样就能解决问题。
|
||||||
|
|
||||||
|
若是问题依然存在,那么请先卸载所有的capstone:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo pip3 uninstall capstone
|
||||||
|
sudo pip uninstall capstone
|
||||||
|
```
|
||||||
|
|
||||||
|
然后从pypi源中获取最新版本安装:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget https://pypi.python.org/packages/fd/33/d1fc2d01b85572b88c9b4c359f36f88f8c32f2f0b9ffb2d21cd41bad2257/capstone-3.0.5rc2-py2-none-manylinux1_x86_64.whl#md5=ecd7e1e39ea6dacf027c0cfe7eb1bf94
|
||||||
|
sudo pip2 install capstone-3.0.5rc2-py2-none-manylinux1_x86_64.whl
|
||||||
|
```
|
||||||
|
|
||||||
|
(如果wget这个安装包失败的话,你可以在[https://pypi.python.org/pypi/capstone/](https://pypi.python.org/pypi/capstone/)找到capstone最新的版本)
|
||||||
|
|
||||||
|
## 一个例子
|
||||||
|
|
||||||
|
这里是一个简单的使用符号执行去获取一道CTF赛题的flag:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import angr
|
||||||
|
|
||||||
|
project = angr.Project("CTF-All-In-One/src/Reverse/defcamp_r100", auto_load_libs=False)
|
||||||
|
|
||||||
|
@project.hook(0x400844)
|
||||||
|
def print_flag(state):
|
||||||
|
print "FLAG SHOULD BE:", state.posix.dump_fd(0)
|
||||||
|
project.terminate_execution()
|
||||||
|
|
||||||
|
project.execute()
|
||||||
|
```
|
||||||
|
|
||||||
|
BIN
src/Reverse/defcamp_r100
Normal file
BIN
src/Reverse/defcamp_r100
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user