Angr-Learn-0x01
介绍
本文并不会在此介绍angr
该怎么使用(如果想快速开始angr
,可以尝试从angr_ctf中学习),而是打算说说它的设计理念。
以编程的理念来分析二进制文件必须克服几个问题,它们大致是:
- 将二进制文件加载到分析程序中
- 将二进制文件转换为中间表示(
IR
) - 进行确切的分析
- 对程序部分或者全部的静态分析
- 对程序状态空间的符号探索
- 上面两种的组合
但angr
可以应对上诉这些问题
About Angr
Angr
框架的总体架构包含如下几个部分:
-
加载器—
CLE
:用于解析加载二进制文件,识别文件格式,从ELF/PE头中提取架构、代码段和数据段等程序信息 -
架构数据库—
Archinfo
:根据程序架构信息,加载对应的CPU架构模型,包括寄存器、位宽、大小端等数据 -
翻译器—
PyVEX
:将程序机器码翻译成中间语言VEX,VEX是开源二进制插桩工具Valgrind所使用的中间语言,angr需要处理不同的架构,所以它选择一种中间语言来进行它的分析 -
模拟执行引擎—
SimEngine
:对VEX指令进行解释执行,支持具体值执行和符号值执行,执行时支持自定义函数Hook和断点,支持自定义路径探索策略 -
约束求解器—
Claripy
:将符号执行中生成的路径约束转化成SMT公式,使用Z3进行求解 -
OS模拟器—
SimOS
:用于模拟程序与系统环境交互,提供了许多模拟的libc函数和系统调用,用户也可以自行编写Hook函数进行模拟
解析二进制文件 -> 获取架构信息 -> 使用翻译器翻译