CN115758164A - 二进制代码相似度检测方法、模型训练方法及装置 - Google Patents
二进制代码相似度检测方法、模型训练方法及装置 Download PDFInfo
- Publication number
- CN115758164A CN115758164A CN202211249732.5A CN202211249732A CN115758164A CN 115758164 A CN115758164 A CN 115758164A CN 202211249732 A CN202211249732 A CN 202211249732A CN 115758164 A CN115758164 A CN 115758164A
- Authority
- CN
- China
- Prior art keywords
- binary code
- target
- jump instruction
- word
- initial model
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012549 training Methods 0.000 title claims abstract description 66
- 238000001514 detection method Methods 0.000 title claims abstract description 49
- 238000000034 method Methods 0.000 title claims abstract description 37
- 239000013598 vector Substances 0.000 claims abstract description 89
- 230000011218 segmentation Effects 0.000 claims abstract description 18
- 230000006870 function Effects 0.000 claims description 33
- 238000004590 computer program Methods 0.000 claims description 12
- 238000005457 optimization Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000013135 deep learning Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及软件安全技术领域,提供一种二进制代码相似度检测方法、模型训练方法及装置,其中方法包括:将待检测的每个二进制代码分别输入语言模型,获得每个二进制代码的特征向量,检测各二进制代码之间的相似度;语言模型是通过如下方式训练得到的:通过分词获得二进制代码样本中的目标词;基于所有目标词对初始模型进行预训练,当目标词为第一跳转指令的操作数时,词嵌入包含第一跳转指令的操作数所表征的第一跳转指令的目标指令的地址,初始模型的输出目标对应各指令和第一跳转指令的操作数;基于携带有相似度标签的二进制代码样本形成的数据集,对初始模型进行微调得到语言模型,解决二进制代码相似度检测的准确性较低的问题,提升了准确性。
Description
技术领域
本发明涉及软件安全技术领域,尤其涉及一种二进制代码相似度检测方法、模型训练方法及装置。
背景技术
二进制代码相似度检测技术可以用于比较两个或多个二进制代码的片段(例如基本块和函数)以确定其相似度和差异性。在商业程序、遗留程序和恶意程序这些源代码不可用的情况下,二进制代码相似度检测技术非常重要,基于此,二进制代码相似度检测技术已得到广泛应用,例如可以应用到漏洞搜索,恶意软件聚类,恶意软件检测,补丁分析和软件盗版检测等涉及软件安全的应用场景中。
现有技术中,提供一种基于字符串编辑距离和传统程序分析的二进制代码相似度检测方案,通过图匹配算法来计算两个二进制代码的控制流图之间的相似度或者通过动态分析的方法来比较两个二进制代码的输入输出,此类方法没有考虑语义信息,只能进行基础的二进制代码相似度比对,二进制代码相似度检测的准确性较低。
发明内容
本发明提供一种二进制代码相似度检测方法、模型训练方法及装置,用以解决现有技术中二进制代码相似度检测的准确性较低的缺陷,实现二进制代码相似度检测的准确性的提升。
本发明提供一种二进制代码相似度检测方法,包括:
将待检测的每个二进制代码分别输入语言模型,获得每个所述二进制代码的特征向量;基于每个所述二进制代码的特征向量,检测各所述二进制代码之间的相似度;所述语言模型是通过如下方式训练得到的:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
根据本发明提供的一种二进制代码相似度检测方法,所述基于所有所述目标词对初始模型进行预训练,包括:
将所有所述目标词进行正则化;其中,若所述目标词为字符串,将所述目标词替换为第一预设符号;若所述目标词为常数值,将所述目标词替换为第二预设符号;若所述目标词被所述二进制代码外部的函数调用,确定所述目标词保持不变;若所述目标词被所述二进制代码内部的函数调用,将所述目标词替换为第三预设符号;若所述目标词为第一跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第一跳转指令的所述目标指令的地址;
将正则化的所有所述目标词中的指令和操作数输入至初始模型中,对所述初始模型进行预训练。
根据本发明提供的一种二进制代码相似度检测方法,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,所述第二跳转指令为间接跳转指令,所述初始模型的输出目标还对应所述第二跳转指令的操作数。
根据本发明提供的一种二进制代码相似度检测方法,所述将所有所述目标词进行正则化,还包括:
若所述目标词为第二跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第二跳转指令跳转的所有可能目标的地址的平均值。
根据本发明提供的一种二进制代码相似度检测方法,所述二进制代码样本的获得方式包括:
对同一源文件在同一处理器架构中进行交叉编译,得到对应不同处理器架构的多个二进制代码样本。
根据本发明提供的一种二进制代码相似度检测方法,所述数据集包括携带有相似度标签的多组二进制代码样本,每组二进制代码样本包括第一二进制代码样本、第二二进制代码样本和第三二进制代码样本;所述第二二进制代码样本与所述第一二进制代码样本的源文件相同;所述第三二进制代码样本与所述第一二进制代码样本的源文件不同;
所述基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型,包括:
将所述数据集中的每组二进制代码样本输入所述初始模型,得到所述第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量;
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数;
基于所述损失函数,对所述初始模型进行微调。
根据本发明提供的一种二进制代码相似度检测方法,所述第一二进制代码样本与所述第二二进制代码样本是基于相同的编译器的不同优化等级对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是基于不同的编译器对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是针对不同处理器架构基于相同的源文件编译得到的。
本发明还提供一种语言模型训练方法,包括:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
本发明还提供一种二进制代码相似度检测装置,包括:
特征向量获得模块,用于将待检测的每个二进制代码分别输入语言模型,获得每个所述二进制代码的特征向量;
相似度检测模块,用于基于每个所述二进制代码的特征向量,检测各所述二进制代码之间的相似度;所述语言模型是通过如下方式训练得到的:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
本发明还提供一种语言模型训练装置,包括:
分词模块,用于通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
预训练模块,用于基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
微调模块,用于基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述二进制代码相似度检测方法或者所述语言模型训练方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述二进制代码相似度检测方法或者所述语言模型训练方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述二进制代码相似度检测方法或者所述语言模型训练方法。
本发明提供的二进制代码相似度检测方法,通过将待检测的每个二进制代码分别输入语言模型,获得每个二进制代码的特征向量,基于此,检测各二进制代码之间的相似度,其中的语言模型是通过分词获得二进制代码样本中的目标词,所有目标词包括指令及其操作数,然后基于所有目标词对初始模型进行预训练,基于携带有相似度标签的二进制代码样本形成的数据集,对预训练后的初始模型进行微调得到的,由于初始模型的输入表示包括每个目标词对应的词嵌入和位置嵌入,位置嵌入表征目标词的地址,当目标词为第一跳转指令即直接跳转指令或者条件跳转指令的操作数时,词嵌入包含第一跳转指令的操作数所表征的第一跳转指令的目标指令的地址,实现了跳转信息嵌入,该初始模型的输出目标对应各指令和第一跳转指令的操作数,从而可以通过自监督学习的方式,使得初始模型对各指令语义进行学习以及对控制流信息进行提取,得到的语言模型能够获得良好的二进制代码的特征向量的表示,从而提升了二进制代码相似度检测的准确性。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的二进制代码相似度检测方法的流程示意图之一;
图2是本发明提供的二进制代码相似度检测方法的流程示意图之二;
图3是本发明提供的语言模型训练方法的流程示意图;
图4是本发明提供的二进制代码相似度检测装置的结构示意图;
图5是本发明提供的语言模型训练装置的结构示意图;
图6是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着深度学习技术的快速发展,现有技术提供一种基于深度学习的二进制代码相似度检测方案,通过将二进制代码嵌入到向量空间中来计算二进制代码的相似度,其中,每个二进制代码对应一个向量空间的一个向量,二进制代码的相似度问题就被转换为向量空间中向量距离的问题。在一类具体的方案中,利用图神经网络来编码二进制代码的控制流信息,将人工提取的指令的特征作为每个基本块的特征,这种基本块的特征,无法体现出指令的语义。另一类具体的方案中,基于自然语言处理的语言模型,通过指令嵌入的方式获得指令的特征表示,然后通过神经网络获得整个二进制代码的特征,此类方案没有考虑到程序的控制流信息。又一类具体的方案中,利用语言模型获得二进制代码的基本块的特征表示,进一步使用图神经网络算法编码控制流信息,进而表示二进制代码,然而这类方案仍然存在局限性,虽然图神经网络可以编码控制流信息,但是这类方案没有充分发挥语言模型长序列的能力,没有考虑到基本块的上下文,例如没有建立基本块之间的指令关系。
综上所述,目前基于深度学习的二进制相似度检测方案还存在各种不足,在表示二进制代码中指令的语义和控制流信息方面没有取得一个良好的平衡关系。为此,本发明提供一种二进制代码相似度检测方法,下面结合图1-图2描述本发明的二进制代码相似度检测方法。
本实施例提供的一种二进制代码相似度检测方法,如图1所示,至少包括如下步骤:
步骤101、将待检测的每个二进制代码分别输入语言模型,获得每个所述二进制代码的特征向量。
步骤102、基于每个所述二进制代码的特征向量,检测各所述二进制代码之间的相似度。
其中,所述语言模型是通过如下方式训练得到的:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数。
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令。
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
其中,二进制代码可以是通过对源文件进行编译得到的可执行代码,其中为汇编语言。二进制代码中包括指令及其操作数和地址,举例来说,二进制代码中的内容包括:
“0x68EF0A:sub rsp,0x70
0x68EF0E:lea rbp,[rsp+0x78]
0x68EF13:jz 0x68EF28
0x68EF18:mov rdx,[rsp+8]
0x68EF20:jmp 0x68EF0E
0x68EF28:mov rdx,rax
0x68EF2D:mov rcx,rbx
0x68EF30:call sub_47A400”。
举例来说,“0x68EF0A:sub rsp,0x70”中,0x68EF0A为地址,“sub”为指令,也即指令助记符,“rsp,0x70”为操作数。
其中,语言模型用于生成二进制代码的特征向量。实际应用中,如果需要对两个或者两个以上的二进制代码进行相似度检测,可以依次将每个待检测的二进制代码分别输入语言模型,得到每个二进制代码的特征向量。基于每个二进制代码的特征向量,检测各二进制代码之间的相似度。具体的,可以计算两个二进制代码的特征向量之间的余弦相似度,得到两个二进制代码之间的相似度。当然,也可以通过计算两个二进制代码的特征向量之间的欧式距离,得到两个二进制代码之间的相似度,等等。
实施中,训练语言模型时,可以首先构建初始模型。然后,以指令及其操作数和地址为词进行分词得到词表,获得二进制代码样本中的目标词,该目标词是与构建的初始模型的输入对应的词,所有目标词中包括指令和操作数,其中的指令包括跳转指令,例如条件跳转指令jz和直接跳转指令jmp,该跳转指令用于跳转到指定的新位置并开始执行该新位置的指令,该新位置的指令为目标指令,跳转指令的操作数可以表征目标指令的地址,通过以上二进制代码举例来说,jmp的操作数“0x68EF0E”即表征目标指令lea的地址,跳转指令及其操作数和目标指令为二进制代码的跳转信息,可以反映二进制代码的控制流信息。
随后,基于所有所述目标词对初始模型进行预训练,该初始模型的输入表示包括每个目标词对应的词嵌入和位置嵌入,目标词对应的位置嵌入表征目标词的地址,该目标词的地址为目标词在所有目标词中的相对地址,举例来说,所有目标词的数量为22个,目标词的地址为所有目标词中第22位。
目标词的词嵌入表征目标词的语义。当目标词为跳转指令的操作数时,该目标词的词嵌入包含跳转指令的操作数所表征的跳转指令的目标指令的地址,以将跳转信息嵌入,由于词嵌入和位置嵌入都包含目标指令的地址,在词嵌入和位置嵌入之间构建了一座桥梁,实现了跳转信息的编码。
基于此,所述初始模型的输出目标对应各所述指令和所述跳转指令的操作数,从而可以通过自监督学习的方式,可以使得初始模型对各指令语义进行学习以及对控制流信息进行提取。最后,基于携带有相似度标签的二进制代码样本形成的数据集,对预训练后的初始模型进行微调,得到上述语言模型,使得语言模型能够获得良好的语义空间的二进制代码的特征向量的表示,实现高准确率和高召回率的二进制代码相似度检测目标。
通过自监督学习的方式,获得预训练的初始模型后,可以只需少量下游有相似度标签的二进制代码样本形成的数据集即可微调获得语言模型。其中的初始模型可以为神经网络模型,例如Transformer网络。通过轻量级的Transformer网络的改进,可以同时编码二进制代码的语义信息(包括各指令语义等)和控制流信息,大大简化了二进制代码相似度检测的复杂性。由于基于注意力机制的神经网络模型中没有区分词的先后顺序,因此使用位置嵌入来表征目标词的地址。
本实施例中,通过将待检测的每个二进制代码分别输入语言模型,获得每个二进制代码的特征向量,基于此,检测各二进制代码之间的相似度,其中的语言模型是通过分词获得二进制代码样本中的目标词,所有目标词包括指令及其操作数,然后基于所有目标词对初始模型进行预训练,基于携带有相似度标签的二进制代码样本形成的数据集,对预训练后的初始模型进行微调得到的,由于初始模型的输入表示包括每个目标词对应的词嵌入和位置嵌入,位置嵌入表征目标词的地址,当目标词为第一跳转指令的操作数时,词嵌入包含第一跳转指令的操作数所表征的第一跳转指令的目标指令的地址,实现了跳转信息嵌入,该初始模型的输出目标对应各指令和第一跳转指令的操作数,从而可以通过自监督学习的方式,使得初始模型对各指令语义进行学习以及对控制流信息进行提取,得到的语言模型能够获得良好的二进制代码的特征向量的表示,从而提升了二进制代码相似度检测的准确性。
另外,跳转指令还可以包括第二跳转指令,所述第二跳转指令为间接跳转指令,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,所述初始模型的输出目标还对应所述第二跳转指令的操作数。
实际应用中,由于间接跳转指令后面的操作数并非目标指令的地址,而是一个存储位置(例如寄存器或者存储器中),可以通过间接跳转识别策略预先得到间接跳转指令可能跳转的所有的可能目标,例如,通过IDA pro识别出跳转表,以得到所有的可能目标,在输入到初始模型时将间接跳转的词嵌入设置为所有可能目标的位置嵌入的平均值,从而将间接跳转的控制流信息也进行了编码,进一步使得初始模型对各指令语义进行学习以及对控制流信息进行全面的提取。
在示例性实施例中,所述基于所有所述目标词对初始模型进行预训练,其具体实现方式可以包括:
第一步、将所有所述目标词进行正则化。
示例性的,所述将所有所述目标词进行正则化,其具体实现方式可以包括:
若所述目标词为字符串,将所述目标词替换为第一预设符号;
若所述目标词为常数值,将所述目标词替换为第二预设符号;
若所述目标词被所述二进制代码外部的函数调用,确定所述目标词保持不变;
若所述目标词被所述二进制代码内部的函数调用,将所述目标词替换为第三预设符号;
若所述目标词为所述第一跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第一跳转指令的所述目标指令的地址。
若所述目标词为第二跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第二跳转指令跳转的所有可能目标的地址的平均值。
其中,第一预设符号、第二预设符号、第三预设符号以及目标词对应的符号可以根据实际需要进行设置。
示例性的,第一预设符号可以为<str>,第二预设符号可以为<const>;第三预设符号可以为<function>;第一跳转指令的操作数对应的符号替换为JUMP_XXX,其中,XXX为目标指令的地址,举例来说,0x68EF13地址处的指令为jz 0x68EF28,位于分词后所有目标词的第14个词,因此,可以将0x68EF13替换为JUMP_14,0x68EF20地址处的指令为jmp0x68EF0E,因此可以0x68EF0E替换为JUMP_04。正则化后的结果示例如下:
“1:sub rsp<const>
4:lea rbp[rsp+const]
7:jz JUMP_14
9:mov rdx[rax+const]
12:jmp JUMP_04
14:mov rdx rax
17:mov rcx rbx
20:call<function>”。
第二步、将正则化的所有所述目标词中的指令和操作数输入至初始模型中,对所述初始模型进行预训练。
具体的,将正则化的所有所述目标词中的指令和操作数输入至初始模型中,所述初始模型的输入表示包括正则化的每个所述目标词的词嵌入和位置嵌入,所述位置嵌入表征正则化的所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,以正则化的各所述指令和所述第一跳转指令的操作数、所述第二跳转指令的操作数为输出目标,对所述初始模型进行预训练。
举例来说,初始模型的输入包括:<CLS>sub rsp<const>……jz JUMP_14mov rdx<rax+function>jmp JUMP_04mov rdx rax…。
相应的,词嵌入包括:E<CLS>Esub Ersp E<const>……Ejz EJUMP_14 Emov Erdx E<rax+const>EjmpEJUMP_04Emov Erdx Erax……。
位置嵌入包括:P0 P1 P2 P3……P7 P8 P9P10 P11 P12P13 P14 P15 P16……。
其中,对于正则化后的JUMP_14来说,词嵌入和位置嵌入中均包含地址14,对于正则化后的JUMP_04来说,词嵌入和位置嵌入中均包含地址04。
在对初始模型进行预训练时,以遮蔽语言模型和跳转目标预测为训练任务,通过遮蔽语言模型的训练任务使得初始模型能够输出各指令,例如,输出指令sub等,通过跳转目标预测的训练任务使得初始模型能够输出正则化的第一跳转指令的操作数JUMP_14,JUMP_04。
本实施例中,通过对所有目标词进行正则化的方法可以减小语言模型所需的词表。
在示例性实施例中,所述二进制代码样本的获得方式包括:对同一源文件在同一处理器架构中进行交叉编译,得到对应不同处理器架构的多个二进制代码样本。
实际应用中,二进制代码有可能是针对不同处理器架构的,其中,处理器架构可以包括x86架构以及arm架构等等。本实施例中,通过使用同一份源码通过交叉编译获得不同处理器架构的二进制代码样本,获得的二进制代码样本具有同名函数,通过不同处理器架构的二进制代码样本对初始模型进行预训练,可以学习到不同架构的二进制代码样本的相同语义,适用于跨架构的场景中的二进制代码相似度检测。
在示例性实施例中,所述数据集包括携带有相似度标签的多组二进制代码样本,每组二进制代码样本包括第一二进制代码样本、第二二进制代码样本和第三二进制代码样本;所述第二二进制代码样本与所述第一二进制代码样本的源文件相同;所述第三二进制代码样本与所述第一二进制代码样本的源文件不同。
相应的,所述基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型,其具体实现方式可以包括:
将所述数据集中的每组二进制代码样本输入所述初始模型,得到所述第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量;
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数;
基于所述损失函数,对所述初始模型进行微调。
实际应用中,可以通过对比学习的方式对初始模型进行微调。基于携带有相似度标签的二进制代码样本形成的数据集中可以包括多组二进制代码样本,每组二进制代码样本可以是第一二进制代码样本、第二二进制代码样本和第三二进制代码样本形成的三元组。由于第二二进制代码样本与第一二进制代码样本的源文件相同,因此,第二二进制代码样本与第一二进制代码样本是相似的,而第三二进制代码样本与所述第一二进制代码样本的源文件不同,因此,第三二进制代码样本与所述第一二进制代码样本是不相似的。
实施中,所述第一二进制代码样本与所述第二二进制代码样本是基于相同的编译器的不同优化等级对相同的源文件进行编译得到的。或者,所述第一二进制代码样本与所述第二二进制代码样本是基于不同的编译器对相同的源文件进行编译得到的;或者,所述第一二进制代码样本与所述第二二进制代码样本是针对不同处理器架构基于相同的源文件编译得到的。
其中的编译器可以包括gcc和clang。编译器具有不同优化等级,例如-O0、-O1、-O2、-O3等,可以根据实际需要灵活选择不同的编译器或者优化等级,对源文件进行编译。
举例来说,二进制代码用于实现查询功能,将该二进制代码作为第一二进制代码样本,可以采样一个来自相同源文件但是采用不同优化等级编译的二进制代码作为第二二进制代码样本,然后,随机采样一个与查询功能无关的二进制代码作为第三二进制代码样本。如图2所示,依次将第一二进制代码样本、第二二进制代码样本和第三二进制代码样本分别输入语言模型,得到语义空间的第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量,然后计算所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的余弦相似度,图中以0.99示意,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的余弦相似度,图中以0.48示意。
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数,通过该损失函数,结合相似度标签,对预训练的初始模型进行微调。
本实施例中,通过对比学习,让相似的所述第二二进制代码样本的特征向量与所述第一二进制代码样本的特征向量之间的距离更近,即更相似,让不相似的所述第三二进制代码样本的特征向量与所述第一二进制代码样本的特征向量之间的距离更远,即更不相似,来微调预训练好的初始模型,可以提升语言模型输出的二进制代码的特征向量的准确性,进而提升二进制代码相似度检测的准确性。其中,可以使用跨架构的二进制代码样本形成的数据集进行微调获得跨架构的二进制代码相似度检测方案,二进制代码相似度检测更加准确。
下面对本发明提供的语言模型训练方法进行描述,下文描述的语言模型训练方法与上文描述的二进制代码相似度检测方法可相互对应参照。
如图3所示,本实施例提供的一种语言模型训练方法,包括:
步骤301、通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
步骤302、基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
步骤303、基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
在示例性实施例中,所述基于所有所述目标词对初始模型进行预训练,包括:
将所有所述目标词进行正则化;其中,若所述目标词为字符串,将所述目标词替换为第一预设符号;若所述目标词为常数值,将所述目标词替换为第二预设符号;若所述目标词被所述二进制代码外部的函数调用,确定所述目标词保持不变;若所述目标词被所述二进制代码内部的函数调用,将所述目标词替换为第三预设符号;若所述目标词为第一跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第一跳转指令的所述目标指令的地址;
将正则化的所有所述目标词中的指令和操作数输入至初始模型中,对所述初始模型进行预训练。
在示例性实施例中,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,所述第二跳转指令为间接跳转指令,所述初始模型的输出目标还对应所述第二跳转指令的操作数。
在示例性实施例中,所述将所有所述目标词进行正则化,还包括:
若所述目标词为第二跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第二跳转指令跳转的所有可能目标的地址的平均值。
在示例性实施例中,所述二进制代码样本的获得方式包括:
对同一源文件在同一处理器架构中进行交叉编译,得到对应不同处理器架构的多个二进制代码样本。
在示例性实施例中,所述数据集包括携带有相似度标签的多组二进制代码样本,每组二进制代码样本包括第一二进制代码样本、第二二进制代码样本和第三二进制代码样本;所述第二二进制代码样本与所述第一二进制代码样本的源文件相同;所述第三二进制代码样本与所述第一二进制代码样本的源文件不同;
所述基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型,包括:
将所述数据集中的每组二进制代码样本输入所述初始模型,得到所述第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量;
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数;
基于所述损失函数,对所述初始模型进行微调。
在示例性实施例中,所述第一二进制代码样本与所述第二二进制代码样本是基于相同的编译器的不同优化等级对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是基于不同的编译器对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是针对不同处理器架构基于相同的源文件编译得到的。
下面对本发明提供的二进制代码相似度检测装置进行描述,下文描述的二进制代码相似度检测装置与上文描述的二进制代码相似度检测方法可相互对应参照。
本实施例提供一种二进制代码相似度检测装置,如图4所示,包括:
特征向量获得模块401,用于将待检测的每个二进制代码分别输入语言模型,获得每个所述二进制代码的特征向量;
相似度检测模块402,用于基于每个所述二进制代码的特征向量,检测各所述二进制代码之间的相似度;所述语言模型是通过如下方式训练得到的:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
在示例性实施例中,所述基于所有所述目标词对初始模型进行预训练,包括:
将所有所述目标词进行正则化;其中,若所述目标词为字符串,将所述目标词替换为第一预设符号;若所述目标词为常数值,将所述目标词替换为第二预设符号;若所述目标词被所述二进制代码外部的函数调用,确定所述目标词保持不变;若所述目标词被所述二进制代码内部的函数调用,将所述目标词替换为第三预设符号;若所述目标词为第一跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第一跳转指令的所述目标指令的地址;
将正则化的所有所述目标词中的指令和操作数输入至初始模型中,对所述初始模型进行预训练。
在示例性实施例中,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,所述第二跳转指令为间接跳转指令,所述初始模型的输出目标还对应所述第二跳转指令的操作数。
在示例性实施例中,所述将所有所述目标词进行正则化,还包括:
若所述目标词为第二跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第二跳转指令跳转的所有可能目标的地址的平均值。
在示例性实施例中,所述二进制代码样本的获得方式包括:
对同一源文件在同一处理器架构中进行交叉编译,得到对应不同处理器架构的多个二进制代码样本。
在示例性实施例中,所述数据集包括携带有相似度标签的多组二进制代码样本,每组二进制代码样本包括第一二进制代码样本、第二二进制代码样本和第三二进制代码样本;所述第二二进制代码样本与所述第一二进制代码样本的源文件相同;所述第三二进制代码样本与所述第一二进制代码样本的源文件不同;
所述基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型,包括:
将所述数据集中的每组二进制代码样本输入所述初始模型,得到所述第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量;
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数;
基于所述损失函数,对所述初始模型进行微调。
在示例性实施例中,所述第一二进制代码样本与所述第二二进制代码样本是基于相同的编译器的不同优化等级对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是基于不同的编译器对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是针对不同处理器架构基于相同的源文件编译得到的。
下面对本发明提供的语言模型训练装置进行描述,下文描述的语言模型训练装置与上文描述的语言模型训练方法可相互对应参照。
本实施例提供一种语言模型训练装置,如图5所示,包括:
分词模块501,用于通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
预训练模块502,用于基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
微调模块503,用于基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
在示例性实施例中,预训练模块502,具体用于:
将所有所述目标词进行正则化;其中,若所述目标词为字符串,将所述目标词替换为第一预设符号;若所述目标词为常数值,将所述目标词替换为第二预设符号;若所述目标词被所述二进制代码外部的函数调用,确定所述目标词保持不变;若所述目标词被所述二进制代码内部的函数调用,将所述目标词替换为第三预设符号;若所述目标词为第一跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第一跳转指令的所述目标指令的地址;
将正则化的所有所述目标词中的指令和操作数输入至初始模型中,对所述初始模型进行预训练。
在示例性实施例中,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,所述第二跳转指令为间接跳转指令,所述初始模型的输出目标还对应所述第二跳转指令的操作数。
在示例性实施例中,预训练模块502,还用于:
若所述目标词为第二跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第二跳转指令跳转的所有可能目标的地址的平均值。
在示例性实施例中,所述数据集包括携带有相似度标签的多组二进制代码样本,每组二进制代码样本包括第一二进制代码样本、第二二进制代码样本和第三二进制代码样本;所述第二二进制代码样本与所述第一二进制代码样本的源文件相同;所述第三二进制代码样本与所述第一二进制代码样本的源文件不同;
所述微调模块503,具体用于:
将所述数据集中的每组二进制代码样本输入所述初始模型,得到所述第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量;
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数;
基于所述损失函数,对所述初始模型进行微调。
在示例性实施例中,所述二进制代码样本的获得方式包括:
对同一源文件在同一处理器架构中进行交叉编译,得到对应不同处理器架构的多个二进制代码样本。
在示例性实施例中,所述第一二进制代码样本与所述第二二进制代码样本是基于相同的编译器的不同优化等级对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是基于不同的编译器对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是针对不同处理器架构基于相同的源文件编译得到的。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行上述各方法所提供的二进制代码相似度检测方法或者语言模型训练方法。
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的二进制代码相似度检测方法或者语言模型训练方法。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的二进制代码相似度检测方法或者语言模型训练方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (11)
1.一种二进制代码相似度检测方法,其特征在于,包括:
将待检测的每个二进制代码分别输入语言模型,获得每个所述二进制代码的特征向量;基于每个所述二进制代码的特征向量,检测各所述二进制代码之间的相似度;所述语言模型是通过如下方式训练得到的:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
2.根据权利要求1所述的二进制代码相似度检测方法,其特征在于,所述基于所有所述目标词对初始模型进行预训练,包括:
将所有所述目标词进行正则化;其中,若所述目标词为字符串,将所述目标词替换为第一预设符号;若所述目标词为常数值,将所述目标词替换为第二预设符号;若所述目标词被所述二进制代码外部的函数调用,确定所述目标词保持不变;若所述目标词被所述二进制代码内部的函数调用,将所述目标词替换为第三预设符号;若所述目标词为第一跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第一跳转指令的所述目标指令的地址;
将正则化的所有所述目标词中的指令和操作数输入至初始模型中,对所述初始模型进行预训练。
3.根据权利要求1或2所述的二进制代码相似度检测方法,其特征在于,当所述目标词为第二跳转指令的操作数时,所述词嵌入包括通过间接跳转识别策略识别出的所述第二跳转指令跳转的所有可能目标的所述位置嵌入的平均值,所述第二跳转指令为间接跳转指令,所述初始模型的输出目标还对应所述第二跳转指令的操作数。
4.根据权利要求3所述的二进制代码相似度检测方法,其特征在于,所述将所有所述目标词进行正则化,还包括:
若所述目标词为第二跳转指令的操作数,将所述目标词替换为所述目标词对应的符号,所述目标词对应的符号中包含所述第二跳转指令跳转的所有可能目标的地址的平均值。
5.根据权利要求1所述的二进制代码相似度检测方法,其特征在于,所述二进制代码样本的获得方式包括:
对同一源文件在同一处理器架构中进行交叉编译,得到对应不同处理器架构的多个二进制代码样本。
6.根据权利要求1所述的二进制代码相似度检测方法,其特征在于,所述数据集包括携带有相似度标签的多组二进制代码样本,每组二进制代码样本包括第一二进制代码样本、第二二进制代码样本和第三二进制代码样本;所述第二二进制代码样本与所述第一二进制代码样本的源文件相同;所述第三二进制代码样本与所述第一二进制代码样本的源文件不同;
所述基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型,包括:
将所述数据集中的每组二进制代码样本输入所述初始模型,得到所述第一二进制代码样本的特征向量、所述第二二进制代码样本的特征向量和所述第三二进制代码样本的特征向量;
基于所述第一二进制代码样本的特征向量和所述第二二进制代码样本的特征向量的相似度,以及所述第一二进制代码样本的特征向量和所述第三二进制代码样本的特征向量的相似度,确定损失函数;
基于所述损失函数,对所述初始模型进行微调。
7.根据权利要求6所述的二进制代码相似度检测方法,其特征在于,所述第一二进制代码样本与所述第二二进制代码样本是基于相同的编译器的不同优化等级对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是基于不同的编译器对相同的源文件进行编译得到的;
或者,所述第一二进制代码样本与所述第二二进制代码样本是针对不同处理器架构基于相同的源文件编译得到的。
8.一种语言模型训练方法,其特征在于,包括:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
9.一种二进制代码相似度检测装置,其特征在于,包括:
特征向量获得模块,用于将待检测的每个二进制代码分别输入语言模型,获得每个所述二进制代码的特征向量;
相似度检测模块,用于基于每个所述二进制代码的特征向量,检测各所述二进制代码之间的相似度;所述语言模型是通过如下方式训练得到的:
通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
10.一种语言模型训练装置,其特征在于,包括:
分词模块,用于通过分词获得二进制代码样本中的目标词,所有所述目标词包括指令及其操作数;
预训练模块,用于基于所有所述目标词对初始模型进行预训练,所述初始模型的输入表示包括每个所述目标词对应的词嵌入和位置嵌入,所述位置嵌入表征所述目标词的地址,当所述目标词为第一跳转指令的操作数时,所述词嵌入包含所述第一跳转指令的操作数所表征的所述第一跳转指令的目标指令的地址,所述初始模型的输出目标对应各所述指令和所述第一跳转指令的操作数,所述第一跳转指令为直接跳转指令或者条件跳转指令;
微调模块,用于基于携带有相似度标签的二进制代码样本形成的数据集,对所述初始模型进行微调,得到所述语言模型。
11.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述二进制代码相似度检测方法或者如权利要求7所述语言模型训练方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211249732.5A CN115758164A (zh) | 2022-10-12 | 2022-10-12 | 二进制代码相似度检测方法、模型训练方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211249732.5A CN115758164A (zh) | 2022-10-12 | 2022-10-12 | 二进制代码相似度检测方法、模型训练方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115758164A true CN115758164A (zh) | 2023-03-07 |
Family
ID=85351439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211249732.5A Pending CN115758164A (zh) | 2022-10-12 | 2022-10-12 | 二进制代码相似度检测方法、模型训练方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115758164A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951931A (zh) * | 2023-03-14 | 2023-04-11 | 山东大学 | 基于bert的二进制代码相似性检测方法 |
CN116578979A (zh) * | 2023-05-15 | 2023-08-11 | 软安科技有限公司 | 一种基于代码特征的跨平台二进制代码匹配方法及系统 |
CN116882382A (zh) * | 2023-07-18 | 2023-10-13 | 中国人民解放军国防科技大学 | 基于Jump-SBERT的二进制代码相似性检测方法 |
CN117473494A (zh) * | 2023-06-06 | 2024-01-30 | 兴华永恒(北京)科技有限责任公司 | 同源二进制文件的确定方法、装置、电子设备及存储介质 |
CN117608539A (zh) * | 2023-11-02 | 2024-02-27 | 清华大学 | 二进制代码的表示向量生成方法、装置、设备及存储介质 |
CN118133036A (zh) * | 2024-02-02 | 2024-06-04 | 清华大学 | 二进制代码相似性检测模型的训练/应用方法及设备 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7702499B1 (en) * | 2000-05-02 | 2010-04-20 | Cadence Design Systems, Inc. | Systems and methods for performing software performance estimations |
CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
CN106407809A (zh) * | 2016-09-20 | 2017-02-15 | 四川大学 | 一种Linux平台恶意软件检测方法 |
CN107357566A (zh) * | 2017-06-06 | 2017-11-17 | 上海交通大学 | 多架构二进制相似代码检测系统及方法 |
US20200019704A1 (en) * | 2018-07-12 | 2020-01-16 | Saudi Arabian Oil Company | Systems and Methods for Detecting Obfuscated Malware in Obfuscated Just-In-Time (JIT) Compiled Code |
CN112733137A (zh) * | 2020-12-24 | 2021-04-30 | 哈尔滨工业大学 | 一种面向漏洞检测的二进制代码相似性分析方法 |
CN113010209A (zh) * | 2020-10-19 | 2021-06-22 | 四川大学 | 一种抗编译差异的二进制代码相似性比较技术 |
CN113204764A (zh) * | 2021-04-02 | 2021-08-03 | 武汉大学 | 一种基于深度学习的无符号二进制间接控制流识别方法 |
CN113900923A (zh) * | 2021-08-16 | 2022-01-07 | 中国人民解放军战略支援部队信息工程大学 | 一种跨指令集架构的二进制函数相似性检查系统及方法 |
CN114077741A (zh) * | 2021-11-01 | 2022-02-22 | 清华大学 | 软件供应链安全检测方法和装置、电子设备及存储介质 |
CN114625844A (zh) * | 2022-05-16 | 2022-06-14 | 湖南汇视威智能科技有限公司 | 一种代码搜索方法、装置及设备 |
CN114742069A (zh) * | 2022-04-13 | 2022-07-12 | 中国农业银行股份有限公司 | 一种代码相似度检测方法及装置 |
-
2022
- 2022-10-12 CN CN202211249732.5A patent/CN115758164A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7702499B1 (en) * | 2000-05-02 | 2010-04-20 | Cadence Design Systems, Inc. | Systems and methods for performing software performance estimations |
CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
CN106407809A (zh) * | 2016-09-20 | 2017-02-15 | 四川大学 | 一种Linux平台恶意软件检测方法 |
CN107357566A (zh) * | 2017-06-06 | 2017-11-17 | 上海交通大学 | 多架构二进制相似代码检测系统及方法 |
US20200019704A1 (en) * | 2018-07-12 | 2020-01-16 | Saudi Arabian Oil Company | Systems and Methods for Detecting Obfuscated Malware in Obfuscated Just-In-Time (JIT) Compiled Code |
CN113010209A (zh) * | 2020-10-19 | 2021-06-22 | 四川大学 | 一种抗编译差异的二进制代码相似性比较技术 |
CN112733137A (zh) * | 2020-12-24 | 2021-04-30 | 哈尔滨工业大学 | 一种面向漏洞检测的二进制代码相似性分析方法 |
CN113204764A (zh) * | 2021-04-02 | 2021-08-03 | 武汉大学 | 一种基于深度学习的无符号二进制间接控制流识别方法 |
CN113900923A (zh) * | 2021-08-16 | 2022-01-07 | 中国人民解放军战略支援部队信息工程大学 | 一种跨指令集架构的二进制函数相似性检查系统及方法 |
CN114077741A (zh) * | 2021-11-01 | 2022-02-22 | 清华大学 | 软件供应链安全检测方法和装置、电子设备及存储介质 |
CN114742069A (zh) * | 2022-04-13 | 2022-07-12 | 中国农业银行股份有限公司 | 一种代码相似度检测方法及装置 |
CN114625844A (zh) * | 2022-05-16 | 2022-06-14 | 湖南汇视威智能科技有限公司 | 一种代码搜索方法、装置及设备 |
Non-Patent Citations (2)
Title |
---|
BINGCHANG LIU 等: "αDiff: Cross-Version Binary Code Similarity Detection with DNN", 《ACM》 * |
HAO WANG 等: ""jTrans: Jump-Aware Transformer for Binary Code Similarity Detection"", 《ARXIV:2205.12713V1》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951931A (zh) * | 2023-03-14 | 2023-04-11 | 山东大学 | 基于bert的二进制代码相似性检测方法 |
CN116578979A (zh) * | 2023-05-15 | 2023-08-11 | 软安科技有限公司 | 一种基于代码特征的跨平台二进制代码匹配方法及系统 |
CN116578979B (zh) * | 2023-05-15 | 2024-05-31 | 软安科技有限公司 | 一种基于代码特征的跨平台二进制代码匹配方法及系统 |
CN117473494A (zh) * | 2023-06-06 | 2024-01-30 | 兴华永恒(北京)科技有限责任公司 | 同源二进制文件的确定方法、装置、电子设备及存储介质 |
CN116882382A (zh) * | 2023-07-18 | 2023-10-13 | 中国人民解放军国防科技大学 | 基于Jump-SBERT的二进制代码相似性检测方法 |
CN117608539A (zh) * | 2023-11-02 | 2024-02-27 | 清华大学 | 二进制代码的表示向量生成方法、装置、设备及存储介质 |
CN118133036A (zh) * | 2024-02-02 | 2024-06-04 | 清华大学 | 二进制代码相似性检测模型的训练/应用方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115758164A (zh) | 二进制代码相似度检测方法、模型训练方法及装置 | |
WO2022142041A1 (zh) | 意图识别模型的训练方法、装置、计算机设备和存储介质 | |
CN111241287A (zh) | 用于生成对抗文本的生成模型的训练方法及装置 | |
CN111343203B (zh) | 一种样本识别模型训练方法、恶意样本提取方法及装置 | |
CN115168856B (zh) | 二进制代码相似性检测方法及物联网固件漏洞检测方法 | |
CN112257437B (zh) | 语音识别纠错方法、装置、电子设备和存储介质 | |
CN113190849A (zh) | Webshell脚本检测方法、装置、电子设备及存储介质 | |
CN113900923A (zh) | 一种跨指令集架构的二进制函数相似性检查系统及方法 | |
CN114398855A (zh) | 基于融合预训练的文本抽取方法、系统及介质 | |
CN115544303A (zh) | 用于确定视频的标签的方法、装置、设备及介质 | |
CN112825114A (zh) | 语义识别方法、装置、电子设备及存储介质 | |
CN115357699A (zh) | 文本抽取方法、装置、设备及存储介质 | |
CN113723070A (zh) | 文本相似度模型训练方法、文本相似度检测方法及装置 | |
CN113553052A (zh) | 使用Attention编码表示自动识别与安全相关的代码提交的方法 | |
CN117688560A (zh) | 一种面向语义分析的恶意软件智能检测方法 | |
CN117217233A (zh) | 文本纠正、文本纠正模型训练方法及装置 | |
CN114692624A (zh) | 一种基于多任务迁移的信息抽取方法、装置及电子设备 | |
CN112686030B (zh) | 语法纠错方法、装置、电子设备和存储介质 | |
CN111737417B (zh) | 修正自然语言生成结果的方法和装置 | |
CN116306676A (zh) | 在线业务应用的信息处理方法及人工智能服务系统 | |
CN116702765A (zh) | 一种事件抽取方法、装置及电子设备 | |
CN116610936A (zh) | 二进制漏洞特征提取和匹配的处理方法、装置、处理器及其计算机可读存储介质 | |
CN112528674B (zh) | 文本处理方法、模型的训练方法、装置、设备及存储介质 | |
CN114547614A (zh) | 一种恶意文件识别方法及系统 | |
CN114529993B (zh) | 图片识别方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20230307 |