(State of) The Art of War: Offensive Techniques in Binary Analysis

本文系统化实现了多种二进制分析技术的框架。

设计

目标:跨架构、跨平台、支持不同的分析范式(抽象化内存模型和数据域)、可用性(学习曲线)。易于复现已有的二进制分析方案。

中间语言(IR)表示模块

将架构特定的代码转换为中间语言。使用VEX(IR lifter of the Valgrind project)。

二进制加载模块

使用CLE完成,支持任何二进制程序。CLE抽象了各种二进制格式,可以加载不同的依赖。包括POSIX-compliant systems (Linux, FreeBSD, etc.), Windows, and the DECREE OS created for the DARPA Cyber Grand Challenge.

程序状态表示模块

SimuVEX模块用于表示程序状态,SimState实现了一系列状态插件

  • 寄存器
  • 符号内存
  • 抽象内存
  • POSIX:系统环境
  • Log
  • 监测:用于Debug
  • Solver:求解路径约束
  • 架构:提供架构特定的相关信息

数据模型模块

SimState中的寄存器和内存使用Claripy代表,抽象了表示,跟踪表达式的所有操作。

表达式可以在任意时刻翻译为Claripy的后端,例如符号整数和浮点数由z3提供,值集域由值集分析提供。

Claripy提供几种前端:

  • FullFrontend:全部暴露,使用z3解决约束,缓存结果
  • CompositeFrontend:像KLEE一样,将约束分为独立的集合
  • LightFrontend:不支持跟踪,简单地使用VSA后端,求解VSA域
  • ReplacementFrontend:扩展LightFrontend,添加支持
  • HybridFrontend:结合FullFronted和ReplacementFrontment,提供更快的约束求解支持

Full-Program Analysis模块

所有分析的入口点是Project,包括二进制文件和相关库。

  • Path Groups:动态符号执行的接口,跟踪程序运行的路径。
  • Analyses:管理静态分析,例如CFG