基于中间表达的二进制代码开源成分识别方法及系统
未命名
07-19
阅读:73
评论:0
1.本发明涉及软件的开源成分检测技术领域,尤其涉及一种基于中间表达的二进制代码开源成分识别方法及系统。
背景技术:
2.开源运动推动了开源社区的发展,这些开源社区提供了大量的开源存储库,因此,基于开源组件的开发和代码重用大大提高了软件开发的效率,但是,由于开源组件的引入,这也会带来一些问题,如违反许可和安全漏洞等。
3.现如今大量的软件开发者出于各种原因的考虑,未公开其软件的源代码,这使得对软件中使用的第三方组件的识别工作带来不小的挑战。主要原因在于不同的软件的二进制文件可能通过各种不同的编译配置编译而来,包括不同的编译器、优化级别、指令架构等等。同一份源代码在通过不同的编译配置编译后产生的二进制文件往往存在较大的差异,难以很好的在二进制文件与源代码间进行匹配。
4.因此,需要对二进制代码开源成分检测技术进行改进。
技术实现要素:
5.本发明的目的是提供一种基于中间表达的二进制代码开源成分识别方法及系统,以有效检测二进制软件代码与开源的源代码之间的相似性,并可消除因编译配置带来的影响。
6.为了实现上述目的,本发明公开了一种基于中间表达的二进制代码开源成分识别方法,其包括:
7.将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库;
8.将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据;
9.通过第一神经网络模型分别对所述基础数据库中的各个数据进行转换处理,以获得基于高维空间向量表达的源代码向量;同时,
10.通过所述第一神经网络模型对所述目标数据进行转换处理,以获得与所述源代码向量维度相同的目标代码向量;
11.分别计算所述目标代码向量与每一所述源代码向量的相似度,以获得相似度值。
12.较佳地,所述第一神经网络模型的生成方法包括:
13.提供一bert预训练模型;
14.通过所述基础数据库中的数据对bert预训练模型进行精调,以获得所述第一神经网络模型。
15.较佳地,采用第二神经网络模型计算目标代码向量与源代码向量的相似度。
16.较佳地,所述源代码向量的维度大于或等于1024。
17.本发明还公开一种基于中间表达的二进制代码开源成分识别系统,其包括:
18.第一转换模块,其用于将将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库;
19.第二转换模块,其用于将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据;
20.向量化表示模块,其用于通过第一神经网络模型分别对所述基础数据库中的各个数据和所述目标数据进行转换处理,以获得基于高维空间向量表达的源代码向量和目标代码向量;
21.相似度计算模块,其用于分别计算所述目标代码向量与每一所述源代码向量的相似度,以获得相似度值。
22.较佳地,还包括模型生成模块,所述模型生成模块用于通过所述基础数据库中的数据对bert预训练模型进行精调,以获得所述第一神经网络模型。
23.较佳地,还包括第二神经网络模型,所述相似度计算模块采用所述第二神经网络模型计算目标代码向量与源代码向量的相似度。
24.较佳地,所述源代码向量的维度大于或等于1024。
25.本发明还公开一种基于中间表达的二进制代码开源成分识别系统,其包括:
26.一个或多个处理器;
27.存储器;
28.以及一个或多个程序,其中一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如上所述的基于中间表达的二进制代码开源成分识别方法的指令。
29.本发明还公开一种计算机可读存储介质,其包括计算机程序,所述计算机程序可被处理器执行以完成如上所述的基于中间表达的二进制代码开源成分识别方法。
30.与现有技术相比,本发明上述技术方案,将开源组件和待检测的二进制的目标文件统一转换为相同的中间媒介,即中间表达式,然后通过第一神经网络模型分别对开源组件的中间表达式和待测的二目标文件的中间表达式进行处理,以获得基于高维空间向量表达的源代码向量和目标代码向量,最后通过计算目标代码向量和源代码向量之间的相似度即可找出与目标文件相近的开源组件;由此可知,通过上述方案,通过中间表达式的转换,有效消除了二进制代码文件在进行开源成分检测过程中因编译配置带来的影响,从而提升检测结果的准确性和效率。
附图说明
31.图1为本发明实施例中二进制代码开源成分识别方法流程图。
32.图2为本发明实施例中二进制代码开源成分识别原理图。
33.图3为本发明实施例中二进制代码开源成分识别系统原理结构图。
具体实施方式
34.为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
35.本实施例公开了一种二进制代码开源成分识别方法,以检测软件中二进制的目标
代码的开源组件成分信息,如图,该识别方法包括如下步骤:
36.s1:采用编译工具(如clang)将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库。
37.s2:通过llvm-mctoll、retdec等工具,将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据。
38.本实施例中,步骤s1和步骤s2中的中间表达式为llvm ir,llvm ir连接着编译器前端和编译器后端。
39.s3:通过第一神经网络模型分别对基础数据库中的各个数据(也即与每一开源组件相对应的中间表达式)进行转换处理,以获得基于高维空间向量表达的源代码向量;
40.s4:通过第一神经网络模型对目标数据进行转换处理,以获得与源代码向量维度相同的目标代码向量;
41.s5:分别计算目标代码向量与每一源代码向量的相似度,以获得相似度值;
42.s6:根据相似度值确认与当前目标文件相近的开源组件。具体地,当某一源代码向量与当前目标代码向量的相似度超过预设值时,那么该目标文件为开源文件,其来源于与该源代码向量相对应的开源组件。如果通过比对,未有源代码向量与当前目标代码向量的相似度超出预设值,则说明当前目标文件为非开源文件。
43.本发明上述识别方法,将开源组件和待检测的二进制的目标文件统一转换为相同的中间媒介,即中间表达式,然后通过第一神经网络模型分别对开源组件的中间表达式和待测的二目标文件的中间表达式进行处理,以获得基于高维空间向量表达的源代码向量和目标代码向量,最后通过计算目标代码向量和源代码向量之间的相似度即可找出与目标文件相近的开源组件。由此可知,通过中间表达式的转换,有效消除了二进制代码文件在进行开源成分检测过程中因编译配置带来的影响,从而提升检测结果的准确性和效率。
44.进一步地,第一神经网络模型的生成方法包括:
45.首先,提供一bert预训练模型;
46.然后,通过基础数据库中的数据对bert预训练模型进行精调,以获得第一神经网络模型。在本实施例中,使用已构建的基础数据库作为语料库对一个基于bert的预训练模型的文本语义相似性对比模型sentence-bert进行微调,将中间表达式转换为高维空间的向量表达,该预训练模型的语义嵌入为一个规模至少为1024维的向量表示,使得第一神经网络模型能够获得中间表达式的语义嵌入,从而,所获得的源代码向量和目标代码向量的维度大于或等于1024。
47.更进一步地,采用第二神经网络模型计算目标代码向量与源代码向量的相似度,以获得精确的计算结果,并有效提升计算速度。具体地,可采用孪生网络或三胞胎网络用作该第二神经网络模型。
48.本发明另一较佳实施例中,还公开一种二进制代码开源成分识别系统,其包括第一转换模块10、第二转换模块11、向量化表示模块12以及相似度计算模块13。
49.对于第一转换模块10,其用于将将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库。
50.对于第二转换模块11,其用于将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据。
51.对于向量化表示模块12,其用于通过第一神经网络模型分别对基础数据库中的各个数据和目标数据进行转换处理,以获得基于高维空间向量表达的源代码向量和目标代码向量。
52.对于相似度计算模块13,其用于分别计算目标代码向量与每一源代码向量的相似度,以获得相似度值。
53.进一步地,该识别系统还包括模型生成模块,模型生成模块用于通过基础数据库中的数据对bert预训练模型进行精调,以获得第一神经网络模型。
54.更进一步地,该识别系统还包括第二神经网络模型,相似度计算模块采用第二神经网络模型计算目标代码向量与源代码向量的相似度。
55.本实施例中二进制代码开源成分识别系统的工作原理和工作方式详见上述二进制代码开源成分识别方法,在此不再赘述。
56.本发明还公开另一种二进制代码开源成分识别系统,其包括一个或多个处理器、存储器以及一个或多个程序,其中一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如上所述的二进制代码开源成分识别方法的指令。处理器可以采用通用的中央处理器(central processing unit,cpu),微处理器,应用专用集成电路(application specific integrated circuit,asic),或者一个或多个集成电路,用于执行相关程序,以实现本技术实施例的二进制代码开源成分识别系统中的模块所需执行的功能,或者执行本技术方法实施例的二进制代码开源成分识别方法。
57.本发明还公开一种计算机可读存储介质,其包括计算机程序,所述计算机程序可被处理器执行以完成如上所述的二进制代码开源成分识别方法。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是只读存储器(read-onlymemory,rom),或随机存取存储器(random access memory,ram),或磁性介质,例如,软盘、硬盘、磁带、磁碟、或光介质,例如,数字通用光盘(digital versatile disc,dvd)、或者半导体介质,例如,固态硬盘(solid state disk,ssd)等。
58.本技术实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述二进制代码开源成分识别方法。
59.以上所披露的仅为本发明的优选实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。
技术特征:
1.一种基于中间表达的二进制代码开源成分识别方法,其特征在于,包括:将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库;将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据;通过第一神经网络模型分别对所述基础数据库中的各个数据进行转换处理,以获得基于高维空间向量表达的源代码向量;同时,通过所述第一神经网络模型对所述目标数据进行转换处理,以获得与所述源代码向量维度相同的目标代码向量;分别计算所述目标代码向量与每一所述源代码向量的相似度,以获得相似度值。2.根据权利要求1所述的基于中间表达的二进制代码开源成分识别方法,其特征在于,所述第一神经网络模型的生成方法包括:提供一bert预训练模型;通过所述基础数据库中的数据对bert预训练模型进行精调,以获得所述第一神经网络模型。3.根据权利要求1所述的基于中间表达的二进制代码开源成分识别方法,其特征在于,采用第二神经网络模型计算目标代码向量与源代码向量的相似度。4.根据权利要求1所述的基于中间表达的二进制代码开源成分识别方法,其特征在于,所述源代码向量的维度大于或等于1024。5.一种基于中间表达的二进制代码开源成分识别系统,其特征在于,包括:第一转换模块,其用于将将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库;第二转换模块,其用于将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据;向量化表示模块,其用于通过第一神经网络模型分别对所述基础数据库中的各个数据和所述目标数据进行转换处理,以获得基于高维空间向量表达的源代码向量和目标代码向量;相似度计算模块,其用于分别计算所述目标代码向量与每一所述源代码向量的相似度,以获得相似度值。6.根据权利要求5所述的基于中间表达的二进制代码开源成分识别系统,其特征在于,还包括模型生成模块,所述模型生成模块用于通过所述基础数据库中的数据对bert预训练模型进行精调,以获得所述第一神经网络模型。7.根据权利要求5所述的基于中间表达的二进制代码开源成分识别系统,其特征在于,还包括第二神经网络模型,所述相似度计算模块采用所述第二神经网络模型计算目标代码向量与源代码向量的相似度。8.根据权利要求5所述的基于中间表达的二进制代码开源成分识别系统,其特征在于,所述源代码向量的维度大于或等于1024。9.一种基于中间表达的二进制代码开源成分识别系统,其特征在于,包括:一个或多个处理器;存储器;
以及一个或多个程序,其中一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如权利要求1至4任一项所述的基于中间表达的二进制代码开源成分识别方法的指令。10.一种计算机可读存储介质,其特征在于,包括计算机程序,所述计算机程序可被处理器执行以完成如权利要求1至4任一项所述的基于中间表达的二进制代码开源成分识别方法。
技术总结
本发明公开了一种基于中间表达的二进制代码开源成分识别方法及系统,其包括:将开源组件库中的开源组件的源代码转换为二进制文件,并抽取和存储转换过程中的中间表达式,以获得基础数据库;将待检测的二进制的目标文件反编译为中间表达式,以获得目标数据;通过第一神经网络模型分别对基础数据库中的各个数据以及目标数据进行转换处理,以获得基于高维空间向量表达的源代码向量和目标代码向量;分别计算目标代码向量与每一源代码向量的相似度,以获得相似度值;基于上述方法,通过中间表达式的转换,有效消除了二进制代码文件在进行开源成分检测过程中因编译配置带来的影响,从而提升检测结果的准确性和效率。而提升检测结果的准确性和效率。而提升检测结果的准确性和效率。
技术研发人员:万振华 胡佳豪 蒋建春 程泽凯
受保护的技术使用者:中国科学院软件研究所
技术研发日:2023.03.13
技术公布日:2023/7/18
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种百部种子直播栽培方法与流程 下一篇:一种转轴装置及电子设备的制作方法
