首页
社区
课程
招聘
[原创] 符号学习之 Angr(一)angr API 简要学习
发表于: 2021-4-26 11:28 7570

[原创] 符号学习之 Angr(一)angr API 简要学习

2021-4-26 11:28
7570

angr 是多架构二进制分析工具,能够执行动态符号执行和多种静态分析

主要查看常见信息

angr 模块的主类,用来容纳二进制集及他们之间的关系并提供分析
常见变量

常用函数

SimState 表示程序的状态,包括内存、寄存器等

常见变量与属性

常用函数

SimMemView
访问内存便捷接口

SimFile
在硬盘中构建文件
参数:name, content, size

Memory Mixins

主要功能是处理 State,并根据需要进行 step forward, filter, merge, move around

例如,可以以不同的速率步进两个不同的状态 stashes,然后将其进行 merge

Stashes 可以被作为属性获取到(比如 .active

多路复用 可以加上 mp_ ,单个状态可以加上 one_

注意:不应直接构造 SimulationManager,有便携的方式创建 factory

最重要的方法是 step explore use_technique

explore
explore(stash='active', n=None, find=None, avoid=None, find_stash='found',avoid_stash='avoid', cfg=None, num_find=1, **kwargs)

explore 主要用来探索路径的可能性

查找 find 条件 --> 存入 find_stash
避免 avoid 条件 --> 存入 avoid_stash

find 和 avoid 参数可能是:

SimProcedure
这是一个非常棒的对象,可以用来描述状态运行的流程
通常可以构建子类并重写 run() 函数

程序上的各种分析
主要类

angr.analysis.backward_slice.BackwardSlice
程序后端切片。
基于 CFG,CDG,DDG 从特定语句创建后端切片

angr.analysis.bindiff.BinDiff
计算 angr Project 表示的两个二进制之间的 diff

angr.analysis.cfg.cfg_fast.CFGFast
在给定的二进制文件中查找函数,并以非常快速的方式构建控制流程图:避免模拟程序执行、跟踪状态、展示花费巨大的数据流分析,CFGFast 将展现轻量级分析,部分启发式,部分强假设

CLE 是一个可拓展的二进制加载器,主要目标是加载可执行文件及所依赖的各种库,生成程序加载和执行的地址空间

Loder 加载所有对象和输出进程的内存抽象
常见可选参数:

可选项字典需要从以下键值中选取:

除非进行核心分析,否则不必要用到深层 API,大部分时间均当作 z3 的简易前端

PyVEX 提供接口,能够将二进制代码转换成 VEX 中间语言

archinfo 是一个类集合,包含了制定架构信息,用于辅助跨架构工具,比如 pyvex

参考资料
官网文档
https://docs.angr.io/
http://angr.io/api-doc/index.html
https://github.com/angr/angr/tree/master/angr/procedures/libc

https://www.jianshu.com/p/f660800bb70f
https://xz.aliyun.com/t/7117#toc-14

 
 
 
 
 
 
 
 
 
 
 
 
 
  • analysis — 可用分析类型
  • factory — 提供对重要分析节点的访问,比如路径组、符号执行结果
  • loader — 程序加载器
  • storage — 应该被加载或存储的字典
  • hook(addr, hook=None, length=0)
    使用一个函数去 Hook 一节代码
  • factory.blank_state(**kargs)
    返回一个几乎未初始化的状态对象
  • factory.entry_state(**kargs)
    返回一个代表程序入口点的状态对象
  • call_state(addr, *args, **kwargs)
    返回初始化到给定函数起点的状态对象,就像是被传入给定参数调用
  • simulation_manager()
  • regs — 寄存器
  • mem — 内存
  • memory — 作为 flat memory region
  • solver — 符号求解和变量管理器
  • addr — 指令指针的具体地址
  • add_constraints — 添加约束
  • satisfiable — 当约束满足时
  • step — 使用当前状态执行符号执行
  • copy — 复制状态
  • stack_push — 入栈
  • stack_pop — 出栈

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//