一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种二进制函数代码的语义比对方法及装置

2022-12-09 23:27:26 来源:中国专利 TAG:


1.本发明涉及网络安全技术领域,尤其涉及一种二进制函数代码的语义比对方法及装置。


背景技术:

2.在没有源码的情况下对二进制文件进行分析,可以广泛应用于漏洞挖掘、恶意代码发现等领域。由于源代码的复用和共享,开源项目提供便利的同时,对软件安全问题造成了很大的隐患。比较二进制文件的局部相似性,剖析软件之间相互包含、代码复用等问题,对漏洞发现、软件安全性分析等领域有着重要的意义。
3.现有技术中,针对软件的克隆检测或相似性度量有多重不同的思路和方法,包括基于字符串匹配的检测方法、基于令牌的匹配方法、基于树的方法等。有的方法从源代码的角度考虑,只能解决有源码的软件相似性比较,而无法处理二进制文件的比较,在实践中并不实用。有的研究者使用符号执行和定理证明器比较二进制代码的语义相似性,例如binhunt和cop,但它们的方法时空复杂度很高,需要占用大量的计算资源,并消耗大量时间,因此不适用于大型代码库。最近有研究证明了将机器学习和深度学习技术应用于代码分析的有效性,提出使用词嵌入来表示指令,但是他们仅采用了词嵌入模型对汇编指令进行理解,损失了程序的整体语义信息,从而导致准确性不高。
4.由此可知,现有技术中的方法存在准确性不高的技术问题。


技术实现要素:

5.本发明提供了一种二进制函数代码的语义比对方法及装置,用以解决或者至少部分解决现有技术中存在的准确性不高的技术问题。
6.为了解决上述技术问题,本发明第一方面提供了一种二进制函数代码的语义比对方法,包括:
7.获取包含二进制函数代码的二进制文件;
8.将二进制文件中的二进制函数代码进行反汇编,得到反汇编代码,采用二进制控制流程图对反汇编代码进行表示,并提取二进制控制流程图中的数据流关系,其中,二进制控制流程图的节点表示反汇编代码中的基本块,边表示基本块之间的调用指令,基本块包括二进制函数代码段;
9.构建二进制函数代码语义比对模型,模型包括语义感知模块、结构感知模块以及相似度计算模块,其中,语义感知模块用于采用bert模型根据输入的指令生成指令嵌入,结构感知模块以采用有向图神经网络基于基本块的指令嵌入得到整个二进制函数的全局嵌入,相似度计算模块采用全连接计算不同二进制函数的全局嵌入之间的相似度;
10.利用构建的二进制函数代码语义比对模型对二进制函数代码进行语义比对。
11.在一种实施方式中,所述方法还包括对二进制控制流程图中的调用指令进行规范化处理,具体包括:
12.对于每一个二进制控制流程图进行调用指令的提取,并保留调用指令相对于函数起始地址的偏移量。
13.在一种实施方式中,所述方法还包括对二进制控制流程图中基本块中的操作数与操作数分离进行标记,并对每个操作数进行规范化处理。
14.在一种实施方式中,语义感知模块基于多层次的双向transformer编码器实现,二进制代码段中的调用指令通过串联的方式输入语义感知模块,在指令嵌入的基础上加上位置嵌入和分段嵌入,并使用位置嵌入和分段嵌入的混合矢量作为双向transformer编码器的输入,然后使用倒数第二层的隐藏状态的平均池化得到调用指令的高维向量表征,即指令的嵌入;其中,位置嵌入代表输入指令序列中的不同位置,分段嵌入用以区分不同的指令。
15.在一种实施方式中,结构感知模块利用有向图神经网络graphsage网络捕捉二进制控制流程图的结构、顺序以及节点信息,并为每一个二进制控制流程图生成一个全局嵌入,一个二进制流程图对应一个二进制函数。
16.在一种实施方式中,graphsage网络的计算公式为:
[0017][0018][0019]
代表节点v在第t轮节点更新时的高维向量表征,为v节点的邻居节点的高纬维向量表征,nv表示与节点v相邻的节点集合,σ表示graphsage中的聚合函数,w
t
表示第t轮可学习的权重,∥表示连接操作,表示节点v在第t-1轮节点更新时的高维向量表征;α表示非线性激活函数;表示节点v的出度节点集合,表示节点v的入度节点集合,p,q分别为属于和中的临近节点,表示节点p在第t轮节点更新时的高维向量表征,表示节点q在第t轮节点更新时的高维向量表,wo表示出度的权重矩阵,wi表示入度的权重矩阵,i,o分别表示入度和出度。
[0020]
基于同样的发明构思,本发明第二方面提供了一种二进制函数代码的语义比对装置,包括:
[0021]
二进制函数代码获取模块,用于获取包含二进制函数代码的二进制文件;
[0022]
反汇编模块,用于将二进制文件中的二进制函数代码进行反汇编,得到反汇编代码,采用二进制控制流程图对反汇编代码进行表示,并提取二进制控制流程图中的数据流关系,其中,二进制控制流程图的节点表示反汇编代码中的基本块,边表示基本块之间的调用指令,基本块包括二进制函数代码段;
[0023]
模型构建模块,用于构建二进制函数代码语义比对模型,模型包括语义感知模块、结构感知模块以及相似度计算模块,其中,语义感知模块用于采用bert模型根据输入的指令生成指令嵌入,结构感知模块以采用有向图神经网络基于基本块的指令嵌入得到整个二进制函数的全局嵌入,相似度计算模块采用全连接计算不同二进制函数的全局嵌入之间的相似度;
[0024]
语义对比模块,用于利用构建的二进制函数代码语义比对模型对二进制函数代码进行语义比对。
[0025]
基于同样的发明构思,本发明第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现第一方面所述的方法。
[0026]
基于同样的发明构思,本发明第四方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
[0027]
相对于现有技术,本发明的优点和有益的技术效果如下:
[0028]
本发明公开的二进制函数代码的语义比对方法,首先对二进制文件中的二进制函数代码进行反汇编,并用二进制控制流程图进行表示,构建了二进制函数代码语义比对模型fusion,通过该模型的语义感知模块可以同时学习语句的语义信息,结构感知模块可以学习二进制控制流图的结构和节点的执行顺序信息,从而更好表征二进制代码各类特征,通过语义对比模块得到二进制函数的相似度,从而可以提高二进制函数比对的准确性。并且,该方法具有较好的时间和空间复杂度,能够满足在海量代码库中进行二进制代码文件快速溯源分析的要求。具有较高的准确率和召回率,从而为软件安全性和知识产权自主性提供技术支撑;可以基于海量代码库的二进制代码文件溯源应用场景。
附图说明
[0029]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0030]
图1为本发明实施例中二进制函数代码的语义比对方法的流程示意图;
[0031]
图2为本发明实施例中二进制代码段构成的串联输入的示意图。
具体实施方式
[0032]
为解决二进制函数比对中,由于提取的信息较少从而导致的比对准确率低的技术问题。本发明提出一个基于有向图神经网络处理控制流图的二进制代码嵌入框架fusion。fusion可以更好地表征二进制代码嵌入的语义特征和结构特征,进而通过相似性计算更准确地度量二进制函数相似性。
[0033]
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0034]
实施例一
[0035]
本发明实施例提供了一种二进制函数代码的语义比对方法,包括:
[0036]
获取包含二进制函数代码的二进制文件;
[0037]
将二进制文件中的二进制函数代码进行反汇编,得到反汇编代码,采用二进制控制流程图对反汇编代码进行表示,并提取二进制控制流程图中的数据流关系,其中,二进制控制流程图的节点表示反汇编代码中的基本块,边表示基本块之间的调用指令,基本块包括二进制代码段;
[0038]
构建二进制函数代码语义比对模型,模型包括语义感知模块、结构感知模块以及相似度计算模块,其中,语义感知模块用于采用bert模型根据输入的指令生成指令嵌入,结构感知模块以采用有向图神经网络基于基本块的指令嵌入得到整个二进制函数的全局嵌入,相似度计算模块采用全连接计算不同二进制函数的全局嵌入之间的相似度;
[0039]
利用构建的二进制函数代码语义比对模型对二进制函数代码进行语义比对。
[0040]
请参见图1,为本发明实施例中二进制函数代码的语义比对方法的流程示意图。
[0041]
具体来说,对于给定的二进制代码文件,将代码段转换为汇编代码。具体实施例中使用angr进行反汇编,也可以使用其他反汇编程序来实现。
[0042]
二进制函数代码语义比对模型的语义感知模块利用自然语言技术将二进制文件映射到高纬空间,其中每个代码片段被映射为一个高维向量,通过语义感知模块可以提取二进制函数代码的语义信息,通过结构感知模块通过利用控制流图节点顺序信息来更新节点信息,从而有效捕捉结构顺序信息,从而更好表征二进制代码各类特征,提取出更丰富的特征,再通过语义对比模块得到二进制函数代码的相似度,从而可以提高二进制函数比对的准确性。
[0043]
在一种实施方式中,所述方法还包括对二进制控制流程图中的调用指令进行规范化处理,具体包括:
[0044]
对于每一个二进制控制流程图进行调用指令的提取,并保留调用指令相对于函数起始地址的偏移量。
[0045]
在一种实施方式中,所述方法还包括对二进制控制流程图中基本块中的操作数与操作数分离进行标记,并对每个操作数进行规范化处理。
[0046]
具体来说,首先,对二进制文件中的二进制函数代码进行反汇编得到二进制控制流程图,每一个二进制函数对应一个二进制控制流程图。二进制函数代码段可以得到多个二进制函数控制流图(以下简称为控制流图)组成,控制流图中的节点为二进制文件中的基本块(包括一段二进制函数代码),而其边则为基本块之间的调用指令,如jumps,由于调用指令具有指向性,所以得到的控制流图为一个有向图,多个节点与边的结合得到二进制代码段。
[0047]
接着,对控制流图提取了数据流关系,用来发现控制流图中隐藏的数据流特征。此外,为了解决自然语言处理中存在的oov(out of vocabulary)问题本实施例对控制流图中的指令进行了规范化(normalization)处理。对于每一个二进制的控制流图,都提取了所有调用指令,并保留其相对于函数起始地址的偏移量。调用指令中包含调用目标,即指令所调用的地址。与此同时,由于使用了自然语言处理的处理模型,那么也必然要考虑到自然语言问题中出现的oov问题,oov问题指的是在自然语言处理过程中我们通常会有一个字词库来进行二进制代码中指令的初始化向量化处理,然而类似于常量或字符串这些可以随意改变的变量无法被全部存入单词表。为了解决这个问题,在将指令序列送入fusion模型前,将汇编指令中的操作数和操作数分离进行标记,并对每个操作数进行规范化处理。
[0048]
其中,对操作数进行规范化处理的过程包括:
[0049]
如果操作数属于内存类型,则先确定操作数是否基于基址,如果不是,用“mem”代替操作数。
[0050]
其次,将操作数的数值高于设定阈值的即时数据替换为字符串”imm”。这样做是考
虑到恶意软件可以在函数返回时将堆栈指针错位一个小值,从而导致影响分析效率。因此,一些较小的常量是不能不能被忽视。
[0051]
所有的操作码和一般寄存器都保持原来的名称,因为它们每个都有特定的用途。将所有的字符串用特殊符号”str“表示。
[0052]
在一种实施方式中,语义感知模块基于多层次的双向transformer编码器实现,二进制代码段中的调用指令通过串联的方式输入语义感知模块,在指令嵌入的基础上加上位置嵌入和分段嵌入,并使用位置嵌入和分段嵌入的混合矢量作为双向transformer编码器的输入,然后使用倒数第二层的隐藏状态的平均池化得到调用指令的高维向量表征,即指令的嵌入;其中,位置嵌入代表输入指令序列中的不同位置,分段嵌入用以区分不同的指令。
[0053]
具体来说,将进行了规范化处理的二进制函数指令送入语义感知模块(bert模型)将得到指令嵌入作为输出。
[0054]
bert所提出的模型是一个多层次的双向transformer编码器。transformer是一个完全基于多头注意力机制的神经网络架构。通过修改bert预训练模型来捕捉基本块的语义特征,本发明的模型中,transformer单元是双向连接的,并堆叠成多个层。
[0055]
具体实施过程中,将每条调用指令视为一个句子,每个指令操作符号(标记)视为一个词。二进制代码段中的指令被串联起来,然后送入bert模型。如图2所示,这个串联输入的第一个标记是一个特殊的标记[cls],它被用来识别一个序列的开始。其次,本发明使用另一个标记[sep]来分离串联的指令。位置嵌入和片段嵌入将与标记嵌入一起被训练。这两个嵌入可以帮助根据位置动态地调整标记嵌入。
[0056]
在将规范化处理的二进制函数指令送入模型后,需要将隐藏层转换为可以被下游结构模型作为输入的指令嵌入,由于transformer编码器将所有的输入信息编码到隐藏状态中,本发明使用倒数第二层的隐藏状态的平均池化来表示整个指令。
[0057]
在一种实施方式中,结构感知模块利用有向图神经网络graphsage网络捕捉二进制控制流程图的结构、顺序以及节点信息,并为每一个二进制控制流程图生成一个全局嵌入,一个二进制流程图对应一个二进制函数。
[0058]
具体来说,在使用bert得到二进制控制流程图中所有基本块的指令嵌入后,原来的二进制控制流程图被转换为具有更明显语义特性的增强控制流图。将指令嵌入的控制流图输入有向图神经网络(结构感知模块)中,输出整个函数控制流图的嵌入,并利用这个图嵌入作为整个函数的向量表征。
[0059]
该步骤的主要目标是利用有向图神经网络捕捉函数控制流图的结构,顺序以及节点信息,然后为每一个控制流图生成一个全局嵌入,这种方法包含图节点信息感应,图注意力机制获取等步骤。
[0060]
在一种实施方式中,graphsage网络的计算公式为:
[0061][0062][0063]
代表节点v在第t轮节点更新时的高维向量表征,为v节点的邻居节点的高纬维向量表征,nv表示与节点v相邻的节点集合,σ表示graphsage中的聚合函数,w
t
表示第t轮
可学习的权重,∥表示连接操作,表示节点v在第t-1轮节点更新时的高维向量表征;α表示非线性激活函数;表示节点v的出度节点集合,表示节点v的入度节点集合,p,q分别为属于和中的临近节点,表示节点p在第t轮节点更新时的高维向量表征,表示节点q在第t轮节点更新时的高维向量表,wo表示出度的权重矩阵,wi表示入度的权重矩阵,i,o分别表示入度和出度。
[0064]
具体来说,为了获取图结构中每个节点的节点信息,本实施方式采用基于有向图方法的graphsage网络,graphsage是一种归纳性的节点嵌入方法,它可以对未见过的节点进行归纳,当去学习一个节点的信息是怎么通过其邻居节点的特征聚合而来的,当学习到了这样的“聚合函数”,而通过前文中的二进制控制流程图可以知道各个节点的特征和邻居关系,从而可以方便地得到一个新节点的表示来计算归纳的增强控制流图中的节点嵌入。通过上述方法,可以解决固定权重的图算法带来的节点嵌入固定的问题。
[0065]
具体实施过程中,将节点的临近节点分为出度和入度两种类型,分别计算来表示出度和入度信息的区别。并使用两个不同的权重矩阵来分别计算出度信息和入读信息,最终将一个二进制函数用一个高维向量表征。为了有效地识别cfg中的边的方向,fusion中增强的graphsage将v的外度和内度节点分别收集为和
[0066]
最后通过多层全连接神经网络来生成相似度分数。全连接层是一个非线性神经网络,它使用多层加权神经元乘法将输入维度m的输入映射到所需的输出维度n。通过全连接神经网络的最后一层,计算出一个代表二进制函数相似度的分数,用来表示二进制函数代码的语义相似度。
[0067]
实施例二
[0068]
基于同样的发明构思,本实施例提供了一种二进制函数代码的语义比对装置,包括:
[0069]
二进制函数代码获取模块,用于获取包含二进制函数代码的二进制文件;
[0070]
反汇编模块,用于将二进制文件中的二进制函数代码进行反汇编,得到反汇编代码,采用二进制控制流程图对反汇编代码进行表示,并提取二进制控制流程图中的数据流关系,其中,二进制控制流程图的节点表示反汇编代码中的基本块,边表示基本块之间的调用指令,基本块包括二进制代码段;
[0071]
模型构建模块,用于构建二进制函数代码语义比对模型,模型包括语义感知模块、结构感知模块以及相似度计算模块,其中,语义感知模块用于采用bert模型根据输入的指令生成指令嵌入,结构感知模块以采用有向图神经网络基于基本块的指令嵌入得到整个二进制函数的全局嵌入,相似度计算模块采用全连接计算不同二进制函数的全局嵌入之间的相似度;
[0072]
语义对比模块,用于利用构建的二进制函数代码语义比对模型对二进制函数代码进行语义比对。
[0073]
由于本发明实施例二所介绍的装置为实施本发明实施例一中二进制函数代码的语义比对方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的装置都属于本发明所欲保护的范围。
[0074]
实施例三
[0075]
基于同一发明构思,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现如实施例一中所述的方法。
[0076]
由于本发明实施例三所介绍的计算机可读存储介质为实施本发明实施例一中二进制函数代码的语义比对方法所采用的计算机可读存储介质,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机可读存储介质的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的计算机可读存储介质都属于本发明所欲保护的范围。
[0077]
实施例四
[0078]
基于同一发明构思,本技术还提供了一种计算机设备,包括存储、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述程序时实现实施例一中的方法。
[0079]
由于本发明实施例四所介绍的计算机设备为实施本发明实施例一中二进制函数代码的语义比对方法所采用的计算机设备,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机设备的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的计算机设备都属于本发明所欲保护的范围。
[0080]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0081]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0082]
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0083]
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献