BitBlaze(三) - 静态分析组件Vine

3 Vine:静态分析组件

这一部分主要介绍Vine,BitBlaze平台的静态分析组件,描述它的中间语言(IL),它的前端组件、后端组件以及其实现。

3.1 Vine概述

图二Vine的高级结构图。Vine分为平台相关的前端和平台无关的后端。Vine的核心是一种平台无关的中间语言(IL)。IL是一种完全对应汇编语言的小规模的语言。汇编语言通过通过前端转换成IL,后端的分析都是建立在IL之上的。因此,可以实现与计算机架构无关的分析,而且不需要处理复杂的指令集(如x86)。这种设计还具有很强的扩展性—利用Vine提供的核心组件用户可以简单的实现自己的基于IL的分析。


Vine前端现在支持把x86和ARMv4转换成IL。它利用一系列第三方库来分析不同的二进制文件并生成汇编代码。汇编代码再通过语法导向的方式转换成IL。

Vine后端支持多种核心的程序分析工具。这些工具可以创建不同的图,比如控制流图和程序依赖图。后端也包含一个优化框架。此框架通常用来简化特定的指令集。它也提供程序校验能力,这包括符号执行,计算最弱前提,以及决策过程。Vine也能通过后端的代码生成器生成c代码。

为了把静态分析和动态分析结合起来,我们也提供了一个接口以使Vine能够使用动态分析组件(如TEMU)生成的执行跟踪。执行跟踪文件可以转换成IL以支持更进一步的分析。

3.2 Vine中间语言

IL是转换的目标语言,也是后端程序分析的分析语言。IL的语义是与汇编语言对应的。表一展示了IL。

IL中的基本类型是1位、8位、16位、32位和64位寄存器(如n位向量)和内存。内存类型可以根据字节序分为little(如x86架构的小端模式),big(如PowerPC架构的大端模式)和norm(稍后将介绍)三类。内存类型也可由其索引类型(必须是寄存器类型)进行区别。例如,mem_t(little,reg32_t)表示一个小端模式的地址为32位的内存类型。

Vine支持三种数值类型。第一种是τreg类型。第二,Vine有内存数值{na1 → nv1, na2→ nv2, ...},其中nai表示地址值,nvi表示该地址处的数值。另外,Vine还有一种特有的类型⊥。该数值对于用户是透明的。它被用来指示一次执行异常。

Vine中的表达式是没有副作用的。IL支持二元操作⋄b(&和|是位操作符),一元操作⋄u,常量,let绑定以及类型转换。类型转换用来改变数值的宽度。例如,x86中EAX的低8位是al。我们可以取出eax的低8位。


在Vine中,load和store操作都是纯粹的。Load的语义通常是纯粹的,但store并非这样。每条store表达式都必须指定要用到的内存地址。例如,下列Vine的store操作mem1 =store(mem0, a, y),其中mem1和mem0基本相同,只是mem1中的地址a指向的数值是y。Vine采用纯粹的存储操作的优点在于可以从句法上区分那块内存被修改过或读取过。这可以用于计算SSA(单一静态指派,标量和内存都有唯一静态地地址)。

Vine程序一般格式是一系列变量声明,随后是指令。共有7中不同的指令,包括赋值、跳转、条件转移和标签。所有跳转和条件转移的目标必须是一个合法的标签,否则程序将终止。注意跳向一个未定义的位置也会导致程序终止。在任何时候都可以使用halt语句终止程序。Vine也支持assert,类似c语言的assert:断言的语句必须为真,否则将终止。

Vine中的special相对于调用一个外部定义的过程或函数。Special的id代表相应的类型。Special的语义取决与分析过程;其操作语义是不确定的。之所以把special算作一种指令类型,就是要在发生那些会影响分析效果的调用是显式的辨别出来。处理special指令的典型方法是用IL编写一个适于分析的摘要函数。


正规化存储

机器的字节序通常由硬件的字节存储顺序决定。小端模式先存低序字节,大端模式先存高序字节。X86使用小端模式,而PowerPC使用大端模式。

在分析内存访问时必须考虑端模式问题。考虑图3a中的汇编代码。第二行的mov指令使用小端模式向内存中写入4字节(由于x86是小端模式)。执行完第二行后内存如b所示。第2、3行,ebx = eax+3。第4、5行把16位的值0x1122写入ebx。分析这几行代码可知,第4行复写了第1行所写内容的最后一个字节,如c所示。

正规化内存是指对于b字节可寻址的内存load和store都是b字节对齐的。例如,x86是按字节寻址的,所以x86的正规化存储就是其所有的load和store都是字节级的。图3a中第1行的正规化形式如图4所示。注意第7行的当前存储是mem6。


正规化内存简化了涉及内存的程序分析。正规化存储在句法上指出了那些本来隐含在端模式中的内存更新。Vine后端提供了正规化的工具。

3.3 Vine前端

Vine前端负责把二进制代码转换为IL。另外,前端也关联诸如GNU二进制文件描述符(libbfd)库之类的库以分析二进制文件的低级细节。

把二进制代码翻译成IL分为三步:

-第一步。首先对二进制文件按进行反汇编。Vine当前支持三种反汇编工具:IDA Pro,一款商业反汇编器,Kruegel er al.的可以反汇编x86混淆代码的汇编器,我们自己开发的基于GNU libopcodes的线性扫描反汇编器。

-第二步。反汇编完成后,由VEX(一个第三方库)把汇编代码转化为VEX中间语言(VEX IL)。VEX IL是Valgrind动态测量工具的一部分。它有点像基于RISC的语言。因此,它只有少数几种指令类型,类似于Vine。然而,VEX IL本身不适合程序分析,因为它没有处理指令副作用的问题。这一步主要是为了简化Vine的生成:这一步生成一种基本的IL,第三步就只需处理指令副作用问题了。

-第三步。把VEX IL翻译成Vine。

汇编指令中所有的副作用在翻译完成后都将作为Vine指令显式的表示出来。因而,一条汇编指令可能会翻译成一系列Vine指令。例如x86指令add eax,0x2

翻译成一下Vine指令:

tmp1 = EAX; EAX = EAX + 2;

//eflags calculation

CF:reg1_t = (EAX<tmp1);

tmp2 = cast(low, EAX, reg8_t);

PF =(!cast(low,

((((tmp2>>7)ˆ(tmp2>>6))ˆ((tmp2>>5)ˆ(tmp2>>4)))ˆ

(((tmp2>>3)ˆ(tmp2>>2))ˆ((tmp2>>1)ˆtmp2)))), reg1_t);

AF = (1==(16&(EAXˆ(tmp1ˆ2))));

ZF = (EAX==0);

SF = (1==(1&(EAX>>31)));

OF = (1==(1&(((tmp1ˆ(2ˆ0xFFFFFFFF))&(tmp1ˆEAX))>>31)));

翻译完的指令列出了add指令的所有副作用,包括操作可能更新的六个eflags标志。

除了二进制文件,Vine也可以把指令跟踪(instruction trace)转化成IL。跟踪中的条件分支转化成assert语句。Vine和TEMU是联合设计的,因此TEMU生成的trace文件可以被Vine识别和使用。

3.4 Vine后端

在Vine后端,分析工具都是基于Vine IL开发的。Vine提供了基础的组件。下面我们将介绍Vine后端提供的分析工具和组件。

鉴定机。Vine提供了一个实现了Vine IL的操作语义的鉴定机。通过鉴定机,我们可以直接执行程序,而不需把IL重新编译成汇编。

图。Vine可以建立控制流图(CFG)、数据依赖图以及程序依赖图。

创建CFG面临的一个问题是如何判定非直接跳转(跳转到一个计算得到的地址)的后继指令。解决非直接跳转通常需要诸如VSA(值集分析)之类的程序分析工具。因此,可能出现循环依赖。注意,非直接跳转可能跳到任何地方,可能是堆,也可能是还未进行反汇编的代码。

一种解决方案是在CFG图中设置一个指向未确定非直接跳转后继的节点。这样基于CFG的分析工具可以得知我们不知道后继的状态。例如,数据流分析可以把所有事实都扩展到格底。更好的方法是先执行一个非直接跳转解析过程以生成一个更精确的CFG。Vine提供了一个分析工具,VSA。

单一静态赋值(SSA)。Vine支持与单一静态指派之间的相互转化。由于每个变量只能静态地定义一次,因而SSA格式使分析变得更加简单。我们将内存和标量都转化成SSA格式。之所以要把内存转化成SSA格式,是因为这样我们就能从句法上辨别在写操作执行前后的内存,而分析工具本身就不需要做类似的记录了。

截断。对于给定的源和汇,程序截断是一个包含了引起源的定义影响汇的使用的语句的图。例如,截断可以用作把后继分析限定在一部分代码中(这部分代码与给定的源和汇有关而非与整个程序相关)。

数据流和优化。Vine提供了一个通用的基于用户自定义结构的数据流引擎。Vine也实现了一些数据流分析。Vine目前实现了Simpson全局数值编号,常量传播及合并,不可达代码删除,动态变量分析,整数范围分析,以及值集分析(VSA)。VSA是一种在任何一个程序点逼近每个变量的值得数据流分析过程。值集分析对非直接跳转问题的解决大有裨益。也可用来做别名分析。两次内存访问值集的交集若不为空,则一个可能是另一个的别名。

优化用来简化或加速后继分析。例如,优化可以是决策过程STP返回一个查询结果的时间减半。

C代码生成器。Vine可以从IL生成合法的C代码。Vine可用作一个基本的反编译器,先把汇编语言转换为IL,再生成C代码。这也提供了一种编译Vine程序的方法:先把IL转换成C代码,在用C编译器进行编译。

C代码生成器把IL中的存储体转换成数组。Store操作是对数组的存储操作,load操作是从数组加载。因此,C代码模拟真实的内存。例如,一个易受缓冲区溢出攻击的程序提交给Vine并生成C代码,继而进行编译。原程序的越界将在相应的C数组中模拟,但并不会导致真正的缓冲区溢出。

程序校验分析。Vine目前支持两种正式的程序校验方式。第一,Vine能够把IL转化为Dijkstra守卫命令语言(GCL),并计算GCL程序的最弱前提。对于一个程序而言,关于谓词q的最弱前提是保证对任意满足该条件的输入都会得到一个满足q的状态的一个最普遍条件。目前只支持无循环的程序,如,不支持GCL的while。

Vine包含与决策过程的接口。Vine能够用CVC语法产生表达式(如,最弱前提)。Vine可以通过直接调用STP库与STP决策过程相关联。

3.5 Vine的实现

Vine采用C++和OCaml实现。前端主要由C++实现,包括大约17200行代码。后端由OCaml实现,包含约40000行代码。通过IDL生成的存根可以实现前端和后端的衔接。

前端采用Valgrind VEX协助转换指令,采用GNU BFD分析可执行对象,采用GNU libopcodes打印反汇编后的程序。

除了图1中的指令,Vine IL还包含几种构造器:

-Vine IL包含注释构造器。它可以打印每条反汇编的指令和用户自定义的注释。

-Vine IL支持跨块地变量辖域。

-Vine IL含有一个修饰用户自定义属性的语句和类型的构造器。


Bitblaze环境搭建之TEMU/Tracecap的编译和安装 ubuntu12.04下TEMU的安装 The following script shows the steps for building and installing TEMU and the other software it depends on: (This is also found as docs/install-temu-release.sh in the TEMU 阅读详情

相关推荐

bitblaze:A New Approach to Computer Security via Binary Analysis

bitblaze是一个比较强大的恶意软件,恶意代码检测平台,很实用,这个是介绍文档

BitBlaze:一种通过二进制代码分析实现计算机安全的全新方法(一)

BitBlaze:一种通过二进制代码分析实现计算机安全的全新方法 Dawn Song,David Brumley,Heng Yin,Juan Caballero,Ivan Jager, Min Gyung Kang,ZhenKai Liang,James Newsome,Pongsin Poosankam, And Prateek Saxena UC Berkeley Carnegi...

数据库 410

UNITE真菌数据库使用避坑指南:从下载到注释的完整流程

本文提供了UNITE真菌数据库从下载到注释的完整实战指南。针对真菌ITS序列分析,重点解析了数据库版本选择、格式转换的常见陷阱,并详细介绍了如何训练优化的sklearn分类器以提升物种注释的精度和可靠性,帮助用户构建高效稳定的本地工作流。

weixin_29240343的博客 196

BitBlaze(二) - BitBlaze架构

2BitBlaze二进制代码分析平台的架构 在这一节中,我们首先讨论对安全问题的二进制分析的难点,然后介绍一个满足安全应用的二进制分析平台需要的条件,最后勾勒出Bitblaze平台的架构。 2.1挑战 二进制代码分析面临几个主要挑战,有一些还是需要具体分析的。 复杂性。二进制代码分析的第一个主要难点在于二进制代码是很复杂的。二进制分析必须对这些复杂的代码进行精确的建模以保证分析的精确性。然...

数据库 356

【小贪】万字长文介绍因果推断和增益模型

本文首先从一个实例出发阐述了因果性不等于相关性,进而引出因果推断和增益模型。然后简单介绍了因果推断的基础内容,并介绍了主要的三类增益模型:元学习、增益直接建模、表示学习,每一类模型都简要介绍了其经典模型。之后介绍了增益模型的评价指标,包括uplift bins、uplift curve和qini曲线。增益模型实际上是一大类模型框架,本质上可以用传统响应模型或其他机器学习模型嵌入增益模型的框架,但是预测结果并不是一个概率,模型评价方式也有变化。训练样本收集增益模型建模强依赖于ab实验,数据要求很高。

打瞌睡_的博客 2500

告别Vysor!用Scrcpy在Mac上无线投屏安卓手机(附魅族16th闪退修复实战)

本文详细介绍了如何在Mac上配置和使用开源投屏工具Scrcpy,实现安卓手机无线投屏的高效解决方案。从基础环境准备到高级功能调优,包括无线连接配置、输入控制增强、多设备管理和性能优化等实用技巧,特别针对魅族16th等机型的闪退问题提供了修复方案,帮助用户彻底告别Vysor等商业软件。

weixin_28712661的博客 389

关于BitBlaze的中文介绍

http://blog.csdn.net/kingzone_2008/article/details/8826445

tony的专栏 1027

【论文阅读|小目标分割算法ASF-YOLO】

论文题目:ASF-YOLO: A novel YOLO model with attentional scale sequence fusion for cell instance segmentation 论文链接: https://arxiv.org/abs/2312.06458 代码链接:https://github.com/mkang315/ASF-YOLO 摘要(Abstract) 作者提出了一种新颖的基于 "You Only Look Once"(YOLO)的注意力尺度序列融合框架(ASF-YO

dally2的博客 8116

bitblaze中静态分析工具vine安装

实验环境: 操作系统:32位Ubuntu desktop 12.04.5 mkdir bitblaze cd bitblaze/ mkdir temu cd temu/ wget http://bitblaze.cs.berkeley.edu/release/vine-1.0/vine-1.0.tar.gz tar zxvf vine-1.0.tar.gz 在vine

myw_katrina的博客 491

【第一篇】Xshell连接服务器部署前后端项目(连接服务器)

利用Xshell连接服务器部署前后端项目

blog 1066

银河麒麟硬盘健康检测:smartctl/badblocks实战与坏盘预判

xfs_repair检查。S.M.A.R.T检测。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 849

BitBlaze(四) - 动态分析组件TEMU

4 TEMU:动态分析组件 这一部分主要介绍TEMU,BItBlaze平台的动态分析组件,描述其提取操作系统级语义的组件,执行系统全局的动态污点分析,以及它的插件和实现。 4.1 TEMU概述 TEMU是一个基于全系统仿真器QEMU开发的全系统的动态二进制分析平台。在这个仿真器上运行一个完整的系统(包括操作系统和应用程序),并对相关二进制代码的执行进行细粒度的观察。TEMU是基于一下考量而采...

数据库 727

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8361

Vine:实验性编程语言的交互新范式

Vine:实验性编程语言的交互新范式 项目介绍 Vine 是一种基于交互网(Interaction Nets)的新型实验性编程语言。这种语言致力于将函数式和命令式编程范式无缝结合,为开发者提供更加灵活和高效的编程体验。Vine 的设计理念在于探索编程语言的新边界,并试图解决传统编程语言中的某些局限性。 项目技术分析 Vine 的核心是基于交互网的编程模型。交互网是一种用于描述异步交互的计算模型,它...

gitblog_00918的博客 640

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

漏洞挖掘的艺术-面向二进制的静态漏洞挖掘

0x00 本文是本系列的第二篇,将对面向二进制程序的静态漏洞挖掘技术进行介绍与分析。 面向二进制程序的静态漏洞的挖掘技术由于缺少源代码中的结构化信息,面临着值集分析(vaule-set analysis,VSA)与控制流恢复不精确的问题,但是二进制程序相对于源码而言更容易获得,所以这方面的研究工作一直都有新的研究动态,并且会在0x02部分介绍目前流程的两种技术。在进一步分析之前,我们首先来具体解释前文提出的两个问题。 0x01 1.1 值集分析是一种结合数值分析和指针分析的静态分析算法。VSA是一种基于抽象

Yale的博客 2546

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

如何快速上手 Vue Vine:革新 Vue.js 组件开发的完整指南

Vue Vine 是一个创新的 Vue.js 组件库,它提供了一种全新的组件编写方式,让开发者能够以更直观、更高效的方式构建 Vue 应用。本文将为您提供一个简单快速的 Vue Vine 入门指南,帮助您迅速掌握这个强大工具的核心功能和使用方法。 ## 🚀 为什么选择 Vue Vine? Vue Vine 专为 Vue 3.0+ 设计,提供了对 Vite 和 Rspack 的官方支持,并专注

gitblog_00091的博客 1844

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux守护进程运行命令daemonize

我们一般在编写服务器的时候都希望能让服务器在后台运行,而且能记录下这个服务器的pid,防止一个进程重复启动。之前我的方案是自己使用fork函数,将服务器运行成后台模式;并且在启动之前去检查配置文件中指定的pid文件中是否能读出pid信息,并且在当前的ps aux中查找这个pid的进程是否还活着。这样来判定服务器是否已经启动了。当正常启动完毕之后,将会把当前进程的pid写入文件。这样就能防止重复启动...

Data & Analysis 1297

用Bitblaze进行程序分析之三------VINE的使用

ine操作步骤: (1)进入vine程序所在目录 cd bitblaze/vine (2)(可选)把trace文件翻译成汇编并在控制台显示 ./trace_utils/trace_reader -traceexamples/five.trace | grep T1 (3)根据trace文件生成il/stp/wp文件 ./trace_utils/appreplay

JochenZou的专栏 3075

动态污点分析浅述

转载:http://blog.csdn.net/leeeryan/article/details/6267521        动态污点分析(Dynamic Taint Analysis)是近几年刚刚被提出的一种新的有效检测各种蠕虫攻击和自动提取特征码用于IDS和IPS的一系列解决方案。其原理主要分为两大部分:动态污点标记和非法操作检测、以及更精确的提取特征码的方法。 1、动态污点标记和非

YiShiWenYan 1万+

用Bitblaze进行程序分析之一------如何遍历程序所有可执行路径

整体执行流程: (1)在temu的guestos中加载目标程序(exe),生成.trace文件。.trace文件中记录着一条执行的路径,但是用二进制机器码的形式记录的,人工是不可读的,可以用vine下的工具把trace文件翻译成汇编并在控制台显示(~bitblaze/vine-1.0/trace_utils/trace_reader-trace examples/five.trace |

JochenZou的专栏 1972

BitBlaze Vine和TEMU的安装

在安装之前自然需要下载Vine和TEMU的源代码啦。Vine的官网(戳这里)和TEMU的官网(戳这里)分别提供了Vine和TEMU的源码下载。在下载完成后,下面开始Vine和TEMU的安装。   一、gcc-3.4的安装和设置 本次安装的平台是Ubuntu 12.04,使用的编译器是gcc-3.4.6。Ubuntu 12.04的默认编译器是gcc-4.6,但是TEMU安装的编译只支持gcc-

wxywang89的专栏 2157

Kubernetes Service 与 kube-proxy 详解

本文详解 Kubernetes Service 与 kube-proxy 的协同机制:Service 提供固定 IP 与负载均衡,屏蔽后端 Pod 动态变化;kube-proxy 在节点上通过 iptables/IPVS 实现流量转发。通过 ClusterIP 类型 Service 实践,展示如何基于标签选择器自动发现并路由至后端 Pod,验证了服务发现、负载均衡及弹性伸缩能力,揭示了 K8s 网络核心原理。

2403_87659444的博客 183
上一篇: oracle flashback database
下一篇: postgresql 表权限查询
iteye_14608
博客等级 码龄8年 103粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值