当前位置: 首页 > 专利查询>山东大学专利>正文

基于BERT的二进制代码相似性检测方法技术

技术编号:37210855 阅读:18 留言:0更新日期:2023-04-20 23:01
本发明专利技术涉及代码相似性检测技术领域,具体涉及基于BERT的二进制代码相似性检测方法。基于BERT的二进制代码相似性检测方法,包括:利用预训练数据集对BERT模型进行预训练,获得预训练后的通用模型;利用新数据集对通用模型进行重训练,获得微调模型,所述微调模型用于预测两个二进制代码是否相似。本发明专利技术的方法由两个独立的训练阶段组成,采用两阶段训练的关键优势是支持潜在的应用程序,允许重新利用预训练的模型,以使用更低成本的计算资源快速应用其他下游任务。其他下游任务。其他下游任务。

【技术实现步骤摘要】
基于BERT的二进制代码相似性检测方法


[0001]本专利技术涉及代码相似性检测
,具体涉及基于BERT的二进制代码相似性检测方法。

技术介绍

[0002]代码相似性检测常用于代码预测、知识产权保护和漏洞搜索等领域,可分为源代码相似性检测和二进制代码相似性检测。软件的源代码通常难以获得,因此针对二进制代码的相似性检测技术能够适用的场景更加广泛。由于二进制代码具有非常简洁的表示形式,因为编译时的大量转换导致了大多数高级概念(例如,变量名、结构、类型、类层次结构)的丢失,因此推断潜在的上下文含义非常具有挑战性。根据关注的代码信息的不同,当前的二进制代码相似性检测技术分为4类:基于文本、基于属性度量、基于程序逻辑、基于语义的检测技术。
[0003]基于语义的检测技术,它通过捕获程序汇编代码中的语义信息,来比较函数或组件的语义差异,已实现相似性度量。这类方法通常借鉴图像识别或其它领域的技术,利用深度神经网络来实现程序语义的嵌入,通过对嵌入向量的比较或查询操作来实现大规模任务的处理。例如BinDNN模型,利用了CNN,LSTM(长

短期存储器)和DNN这3种类型的神经网络模型,将模型进行分层,学习函数汇编代码并判断函数是否相似;SAFE模型,将基于Word2vec模型的函数语义嵌入模型,可实现跨架构函数相似性度量。
[0004]传统检测方法所采用的匹配算法通常是固定不变的,神经网络可以针对不同任务进行再训练,应用场景更加广阔;此外,神经网络不但可以自行学习和选择特征,还可以习得人工方法很难确定的不同特征对相似度影响的权重,从而降低甚至避免人工设计和筛选特征带来的拟合。然而,目前的很多神经网格模型还是存在一些缺点,例如RNN由于梯度消失问题,难以从长序列中捕获有用信息。虽然通过设计用于长距离错误传播的特殊单元来缓解这种短存储器问题,但是仍有几个问题:1)跟踪长期依赖性的能力有限;简单地说,来自编码器的暗示所有先前单词的单个向量可能会丢失部分信息。2)由于顺序性而禁止并行计算。而且,目前针对于二进制相似性检测在语义恢复方面仍有缺陷。由于二进制函数通常由多个指令组成,因此需要比RNN或其变体更好的体系结构。

技术实现思路

[0005]本专利技术的目的在于针对目前二进制相似性检测中基于语义的检测技术存在的缺陷,提供一种基于BERT的二进制代码相似性检测方法, 采用更加平衡的指令归一化方案,并且采用BERT模型深度推断底层代码语义,在预先训练的通用模型就绪后进行代码语义推断,从而进行相似性检测。
[0006]为了实现上述目的,本专利技术采用的技术手段是:基于BERT的二进制代码相似性检测方法,包括:利用预训练数据集对BERT模型进行预训练,获得预训练后的通用模型;
利用新数据集对通用模型进行重训练,获得微调模型,所述微调模型用于预测两个二进制代码是否相似;其中,所述预训练数据集为进行归一化处理的函数语料库,所述归一化处理是指针对函数中的每一个指令,采用静态分析的方式进行如下处理:(1)将立即数按照跳转或调用目的地、调用的值本身、或者一个引用进行归一化处理;引用包括字符串、静态分配的常量或其它数据;(2)将寄存器按大小或者类型进行归一化处理;(3)指针表达式或当displacement为字符串引用时,其指令遵循原始格式:base+index*scale+displacement。
[0007]进一步地,所述新数据集包含若干带有标签的归一化函数对;该标签用于标识每一个归一化函数对中的两个函数是否相同。
[0008]进一步地,所述新数据集还包括补充信息,所述补充信息来源于函数原始的指令信息,包括字符串或数字常量。
[0009]进一步地,预训练的通用模型从输入的每个归一化函数对中获得两个隐藏向量和补充信息,计算两个函数的补充信息的余弦相似度;将两个隐藏向量与计算的余弦相似度传递到线性层,输出检测结果。
[0010]进一步地,归一化处理的步骤(2)中,具有特殊用途的指针保持不变,包括堆栈指针、指令指针或基指针。
[0011]本专利技术与现有技术相比,具有如下优点与有益效果:(1)该模型基于最前沿的BERT (transformer的双向编码器表示)架构,保留了更多的语义信息;(2)该模型经过了精心设计,以便能够利用BERT来实现本专利技术的目标,包括:函数级粒度,例如,嵌入的单位是二进制函数;函数嵌入作为一个整体,例如,根据函数的位置,每个指令可能有多个表示;良好平衡的指令归一化,在太粗粒度和太细粒度归一化之间取得平衡;基于预训练模型的两阶段训练模型来支持广泛的其他下游任务;(3)模型由两个独立的训练阶段组成,采用两阶段训练的关键优势是支持潜在的应用程序,允许重新利用预训练的模型,以使用更低成本的计算资源快速应用其他下游任务。
附图说明
[0012]图1为本专利技术实施例中BERT模型结构的简化图;图2为本专利技术实施例中基于BERT的二进制代码相似性检测方法的流程示意图;图3为本专利技术实施例中的二元相似度预测模型(DS

BinSim)。
具体实施方式
[0013]下面将结合本专利技术的实施例和附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,绝不作为对本专利技术及其应用或使用的任何限制。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提
下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0014]二进制代码是类似于自然语言的机器指令序列。事实上,InnerEye将神经机器翻译(Neural Machine Translation, NMT)的思想借鉴到二进制函数相似性比较任务中,将指令视为单词,将基本块视为句子。为了成功地用深度神经网络表示二进制代码,必须仔细理解它的性质。
[0015]1、机器指令遵循齐夫定律本专利技术的研究发现,指令分布曲线像自然语言一样密切遵循齐夫定律,这意味着在自然语言处理领域中利用有效的技术(如BERT)对二进制任务有效。
[0016]2、函数通常传达有意义的上下文本专利技术在语料库中分析了1,681,467个函数(18,751,933个基本块或108,466,150条指令),排除了链接器插入的函数。本专利技术测量了几个统计数据:1)每个函数的平均指令数(I/F)为64.5(中位数=19,标准差=374.7)。2)每个函数的基本块数(B/F)平均为5.8(中位数=4,标准差=16.4),以及3)每个基本块的平均指令数(I/B)为11.2(中位数=3,标准差=95.8)。由于标准差相当大,本专利技术通过截断大于标准差三倍的值(约为12%)来去除异常值,最终得到(I/F,B/F,I/B)=(25.1,3.9,3.7)的平均值。本专利技术发现大约70%的基本块包括五条或更少指令,其中二进制函数平均包含大约四个基本块和25条指令。本专利技术选择一个粒度为单个函数,该函数足够大,能够传达本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于BERT的二进制代码相似性检测方法,其特征在于,包括:利用预训练数据集对BERT模型进行预训练,获得预训练后的通用模型;利用新数据集对通用模型进行重训练,获得微调模型,所述微调模型用于预测两个二进制代码是否相似;其中,所述预训练数据集为进行归一化处理的函数语料库,所述归一化处理是指针对函数中的每一个指令,采用静态分析的方式进行如下处理:(1)将立即数按照跳转或调用目的地、调用的值本身、或者一个引用进行归一化处理;引用包括字符串、静态分配的常量或其它数据;(2)将寄存器按大小或者类型进行归一化处理;(3)指针表达式或当displacement为字符串引用时,其指令遵循原始格式:base+index*scale+displacement。2.根据权利要求1所述的基于BERT的二进制代码相似...

【专利技术属性】
技术研发人员:胡鹏飞赵斌郝立鹏潘润宇钟方天底晓强
申请(专利权)人:山东大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1