Angr

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

其他支持HackTricks的方式:

这份备忘录的部分内容基于angr文档

安装

sudo apt-get install python3-dev libffi-dev build-essential
python3 -m pip install --user virtualenv
python3 -m venv ang
source ang/bin/activate
pip install angr

基本操作

import angr
import monkeyhex # this will format numerical results in hexadecimal
#Load binary
proj = angr.Project('/bin/true')

#BASIC BINARY DATA
proj.arch #Get arch "<Arch AMD64 (LE)>"
proj.arch.name #'AMD64'
proj.arch.memory_endness #'Iend_LE'
proj.entry #Get entrypoint "0x4023c0"
proj.filename #Get filename "/bin/true"

#There are specific options to load binaries
#Usually you won't need to use them but you could
angr.Project('examples/fauxware/fauxware', main_opts={'backend': 'blob', 'arch': 'i386'}, lib_opts={'libc.so.6': {'backend': 'elf'}})

已加载和主对象信息

已加载数据

主要目标

符号和重定位

动态分析

模拟管理器,状态

调用函数

  • 通过 argsenv 将参数列表和环境变量字典传递给 entry_statefull_init_state。这些结构中的值可以是字符串或位向量,并将被序列化为状态中的参数和环境,用于模拟执行。默认的 args 是一个空列表,因此,如果您要分析的程序期望至少找到一个 argv[0],您应该始终提供它!

  • 如果您希望 argc 是符号的,可以将符号位向量作为 argc 传递给 entry_statefull_init_state 构造函数。但要小心:如果这样做,您还应该向生成的状态添加一个约束,即您的 argc 值不能大于您传递给 args 的参数数量。

  • 要使用调用状态,应该使用 .call_state(addr, arg1, arg2, ...),其中 addr 是您想要调用的函数的地址,argN 是该函数的第 N 个参数,可以是 Python 整数、字符串、数组或位向量。如果您想要分配内存并实际传递一个对象的指针,您应该将其包装在 PointerWrapper 中,即 angr.PointerWrapper("point to me!")。这个 API 的结果可能有点不可预测,但我们正在努力改进。

位向量

符号位向量和约束

Hooking

钩子

此外,您可以使用proj.hook_symbol(name, hook),将符号的名称作为第一个参数提供,以挂钩符号所在的地址

示例

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

最后更新于