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

代码特征集构建方法、检测方法、装置、设备及程序产品与流程

2022-11-23 09:02:37 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种代码特征集构建方法、检测方法、装置、设备及程序产品。


背景技术:

2.现有的恶意代码特征提取方法,可分为静态分析提取和动态分析提取。其中,由于一般无法获得恶意代码源代码,静态提取方法一般需先对代码进行反汇编,对反汇编得到的代码提取文本特征。然后基于提取到的文本特征进行安全检测或者对比。
3.因此,但是目前的软件特征提取方法存在提取文本特征较少,不够详细的问题,进而导致检测结果准确率还有待提高。


技术实现要素:

4.本发明的主要目的在于提供一种代码特征集构建方法、检测方法、装置、设备及程序产品,旨在解决目前的软件特征提取方法存在提取特征较少,不够详细的问题。
5.为实现上述目的,本发明实施例提供一种代码特征集构建方法,方法包括以下步骤:
6.对可执行文件进行反汇编处理,以获得可执行文件中目标函数的基本块数据与控制流图;
7.对基本块数据进行特征提取,以获得目标函数的文本信息特征;
8.根据控制流图,生成目标函数对应的有向无环图结构邻接矩阵;
9.根据文本信息特征与邻接矩阵,构建目标函数的代码特征集。
10.在一实施例中,根据控制流图,生成目标函数对应的有向无环图结构邻接矩阵的步骤,包括:
11.遍历控制流图,以提取出控制流图中所有非回路访问路径;
12.基于所有非回路访问路径,生成邻接矩阵。
13.在一实施例中,遍历控制流图,以提取出控制流图中所有非回路访问路径的步骤,包括:
14.将控制流图中的根节点作为当前访问节点;其中,非回路访问路径的开始节点为根节点;
15.根据控制流图中的访问流向信息,从控制流图的未访问节点中提取出当前访问节点的后继节点;
16.基于后继节点更新当前提取节点,以获得更新后的当前提取节点;
17.根据控制流图中的访问流向信息,判断更新后的当前提取节点是否与根节点形成闭环;
18.若更新后的当前提取节点不与根节点形成闭环,则将更新后的当前提取节点记录至非回路访问路径中,根据控制流图中的访问流向信息,从访问节点库的未访问节点中提
取出更新后的当前提取节点的后继节点,并返回至基于后继节点更新当前提取节点,以获得更新后的当前提取节点的步骤,循环至更新后的当前提取节点无后继节点;
19.若更新后的当前提取节点与根节点形成闭环,则将该回路访问路径上的所有后继节点标记为已访问,并返回根据控制流图中的访问流向信息,从访问节点库的未访问节点中提取出当前提取节点的后继节点的步骤;
20.基于非回路访问路径中的已记录节点,获得一条非回路访问路径;
21.跳转至控制流图中与顶点最近的一个未访问分支节点处,将未访问分支节点作为更新后的当前提取节点,并返回执行根据控制流图中的访问流向信息,判断更新后的当前提取节点是否与根节点形成闭环的步骤,循环至控制流图中的所有节点均被访问。
22.在一实施例中,文本信息特征包括以下特征的至少一者:
23.同一操作指令在基本块中出现的次数;
24.操作指令在基本块中的执行顺序;
25.操作指令及其操作数在基本块中的执行顺序;
26.基本块中引用的字符串、变量、库函数;
27.相似函数调用行为的次数;以及
28.跳转已匹配的基本块和被已匹配的基本块跳转的次数。
29.第二方面,本发明实施例还提供了一种代码相似度检测方法,包括以下步骤:
30.获取对比函数代码样本的第一代码特征集与待检测函数代码的可执行文件;其中,第一代码特征集包括对比函数代码样本的第一文本信息特征和第一邻接矩阵;
31.提取出可执行文件的第二代码特征集;其中,第二代码特征集包括待检测函数代码的第二文本信息特征和第二邻接矩阵;
32.基于第一文本信息特征与第二文本信息特征、以及第一邻接矩阵与第二邻接矩阵,获得待检测函数代码与对比函数代码样本的第一相似度值;
33.若第一相似度值大于第一预设阈值,则待检测函数代码与对比函数代码样本相似。
34.在一实施例中,基于第一文本信息特征与第二文本信息特征、以及第一邻接矩阵与第二邻接矩阵,获得待检测函数代码与对比函数代码样本的第一相似度值的步骤,包括:
35.将第二邻接矩阵与第一邻接矩阵进行相似度对比;
36.若第二邻接矩阵与第一邻接矩阵相似,则对第一文本信息特征和第二文本信息特征进行相似度对比,以获得待检测函数代码与对比函数代码样本之间相似基本块的数量;
37.根据相似基本块的数量与待检测函数代码中基本块的总数,获得获得待检测函数代码与对比函数代码样本的第一相似度值。
38.第三方面,本发明实施例还提供了一种代码特征集构建装置,包括:
39.反汇编模块,用于对可执行文件进行反汇编处理,以获得可执行文件中目标函数的基本块数据与控制流图;
40.特征提取模块,用于对基本块数据进行特征提取,以获得目标函数的文本信息特征;
41.矩阵生成模块,用于根据控制流图,生成目标函数对应的有向无环图结构邻接矩阵;
42.代码特征集构建模块,用于根据文本信息特征与邻接矩阵,构建目标函数的代码特征。
43.第四方面,本发明实施例还提供了一种代码相似度检测装置,包括:
44.文件获取模块,用于获取对比函数代码样本的第一代码特征集与待检测函数代码的可执行文件;其中,第一代码特征集包括对比函数代码样本的第一文本信息特征和第一邻接矩阵;
45.代码特征提取模块,用于提取出可执行文件的第二代码特征集;其中,第二代码特征集包括待检测函数代码的第二文本信息特征和第二邻接矩阵;
46.相似度对比模块,用于基于第一文本信息特征与第二文本信息特征、以及第一邻接矩阵与第二邻接矩阵,获得待检测函数代码与对比函数代码样本的第一相似度值;
47.结果判定模块,用于若第一相似度值大于第一预设阈值,则待检测函数代码与对比函数代码样本相似。
48.第五方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序配置为实现如上述的方法的步骤。
49.第六方面,本发明实施例还提供了一种计算机程序产品,包括可执行的程序代码,其中,程序代码在由处理器执行时执行如上述的方法。
50.本发明实施例提出的一种代码特征集构建方法,通过对目标函数反汇编代码的基本块进行特征提取,得到函数的文本信息特征,并根据反汇编代码的控制流图,生成目标函数对应的有向无环图结构邻接矩阵,然后基于文本信息特征和邻接矩阵构建该目标函数的代码特征集,以对目标函数的代码进行细粒度更高的特征提取,进而提高对函数检测的准确性。
51.本发明实施例还提供了一种代码相似度检测方法,通过对待检测函数代码和对比函数代码样本的反汇编代码分别提出的文本信息特征和邻接矩阵进行相似度分析,以使得二进制代码的相似度分析、同源性分析更加准确。
附图说明
52.图1为本发明代码特征集构建方法与代码相似度检测方法的推荐电子设备的结构示意图;
53.图2为本发明代码特征集构建方法第一实施例的流程示意图;
54.图3为本发明一实施例提供的目标函数的控制流图;
55.图4为本发明代码特征集构建方法第二实施例的流程示意图;
56.图5为本发明代码相似度检测方法第一实施例的流程示意图;
57.图6为本发明代码特征集构建装置第一实施例的功能模块示意图;
58.图7为本发明代码相似度检测装置第一实施例的功能模块示意图。
59.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
60.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
61.现有技术中恶意代码的编写者为了适应不同的攻击目标环境,或实现不同的攻击
目的,甚至于为了提高攻击效果,会在原始恶意代码样本的基础上,通过修改或者更新函数代码得到不同版本的恶意代码。因此,发现恶意代码样本中的同源关系对攻击组织溯源、运行环境还原以及攻击防范具有重要的作用。需要说明的是,同源的定义可以理解为:若两个恶意代码样本是由同一恶意代码采用代码复用的方式演变而来,或者是行为具有相似性,而出现存在先后的关系,则认为这两个恶意代码样本存在同源关系。
62.现有的恶意代码特征提取方法中的静态分析提取方法,通过提取二进制代码的文本信息特征,包括二进制字符串、字节序列、文件名等特征,构建二进制代码特征库。当对代码样本进行检测时,通过将待检测样本的相关特征和特征库进行匹配,若出现匹配项则可判定待检测样本所属的恶意代码类别。但是面对海量新出现的恶意代码,传统的静态分析提取方法已经不能满足恶意代码的检测需求。
63.本发明实施例在通过对恶意代码等待检测代码的二进制可执行文件进行反汇编,对进行危险操作行为的函数进行定位,并提取函数的控制流图以及基本块,对基本块提取出文本信息特征,根据控制流图绘制出有向无环图结构邻接矩阵,从而对该函数提取出细粒度更高的特征,以使得恶意代码的相似检测、同源性分析更加准确,为研判恶意代码分类提供函数内部层面的依据。
64.下面结合一些具体实施例进一步阐述本技术的发明构思。
65.参照图1,图1为本发明实施例方案涉及的代码特征集构建方法与代码相似度检测方法的推荐设备结构示意图。
66.该电子设备包括:至少一个处理器301、存储器302以及存储在存储器上并可在处理器上运行的计算机程序,计算机程序配置为实现如下述的代码特征集构建方法或者代码相似度分析方法的步骤。
67.处理器301可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器301可以采用dsp(digital signal processing,数字信号处理)、fpga(field-programmable gate array,现场可编程门阵列)、pla(programmable logic array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器301也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(central processingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器301可以在集成有gpu(graphics processing unit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。
68.存储器302可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器302还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器302中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器301所执行以实现本技术中方法实施例提供的代码特征集构建方法或者代码相似度检测方法。
69.电子设备还包括有:通信接口303。处理器301、存储器302和通信接口303之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与通信接口303相连。通信接口303可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器301和存储器302。在一些实施例中,处理器301、存储器302和通信接口303被集成在同一芯片或电路板上;在一些其他实施例中,处理器301、存储器302和通信接口303中的
任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
70.本领域技术人员可以理解,图1中示出的结构并不构成对推荐电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
71.本发明实施例示出一种代码特征集构建方法第一实施例。参阅图2,图2为代码特征集构建方法第一实施例的流程示意图。
72.本实施例中,代码特征集构建方法包括以下步骤:
73.步骤s101、对可执行文件进行反汇编处理,以获得可执行文件中目标函数的基本块数据与控制流图(control flow graph,cfg)。
74.一般的,可执行文件可以是恶意代码等待检测代码的二进制代码文件。通过反汇编工具对可执行文件进行逆向分析,从而得到可执行文件的反汇编代码。然后通过对反汇编代码进行处理,可定位到二进制代码中的目标函数,并可获得二进制代码中目标函数的控制流图及其基本块数据。可以理解的,该步骤还可仅仅对可执行文件的目标函数部分进行反汇编处理,而对其余部分代码不做反汇编处理,以提高反汇编处理效率。
75.常见的反汇编工具有ida pro、w32dasm、c32asm等。作为本实施例的一种选择,可选择反汇编工具ida pro。ida pro采用递归下降反汇编算法并结合启发式技术来弥补递归下降算法的不足。
76.首先,使用ida pro对可执行文件进行反汇编处理,ida pro处理后得到目标函数的完整的反汇编代码清单,其中的每一行展示的是对应的每一条指令的虚拟地址、跳转或引用。对于反汇编代码,可将所有的转移指令(条件跳转、无条件跳转、call指令、ret指令)当作一个基本块结束的标志,从而可从反汇编代码中切分出切分基本块的标志。基本块指的是函数内一段顺序执行的语句序列,每个基本块除了入口和出口外,不存在其他分支,这种结构使得基本块构成的关系图易于分析。在目标函数内部基本块中,存在着一些可以作为程序指纹的文本信息,如子函数名、变量命名等,这些文本信息在一定程度上可以反应出不同程序内部的一些代码是否具有相似性、同源性等关系。可将此文本信息提取出来作为文本信息特征。
77.目标函数的控制流图是代码结构特征以及代码语义的表现形式,体现了函数代码的总体特征和局部联系,常被用于分析样本函数功能模块以及代码块(基本块)之间的调用关系和执行逻辑。控制流图由一些节点和关系指向组成,其中节点叫做基本块。节点中包括根节点,即start开始的节点。
78.步骤s102、对基本块数据进行特征提取,以获得目标函数的文本信息特征。
79.本步骤可基于预设的维度对基本块数据中指令文本等静态特征数据进行提取,将提出来的结果作为目标函数的文本信息特征中。
80.作为本实施例的一种选择,文本信息特征包括以下特征的至少一者:
81.同一操作指令在基本块中出现的次数;操作指令在基本块中的执行顺序;操作指令及其操作数在基本块中的执行顺序;基本块中引用的字符串、变量、库函数;相似函数调用行为的次数;以及跳转已匹配的基本块和被已匹配的基本块跳转的次数。
82.即本实施例基于上述的预设维度提取代码的文本信息特征。相较于现有的子函数名、变量命名等文本信息,本实施例提取的文本信息特征的细粒度更高。
83.步骤s103、根据控制流图,生成目标函数对应的有向无环图结构邻接矩阵。
84.可理解的是,本领域技术人员可在目标函数的控制流图的基础上绘制出该控制流图对应的邻接矩阵。而该步骤中,为了对恶意代码进行异常安全检测,需判定代码的调用以及跳转关系是否出现异常。因此,本实施例可绘制出目标函数的有向无环图结构的邻接矩阵,以表征出该目标函数的调用以及跳转关系。从而可以函数的调用关系为基础,使得恶意代码的相似度检测或同源性分析更加准确。
85.其中,有向无环图(directed acyclic graph,dag)指的是一个无回路的有向图。可以清楚的表示出代码的行为。
86.具体而言,在示出的一实施例中,步骤s103包括:
87.(1)遍历控制流图,以提取出控制流图中所有非回路访问路径。
88.(2)基于所有非回路访问路径,生成邻接矩阵。
89.由于控制流图中可能包含一些闭合的回路,因此,遍历时可得到一些非回路访问路径还可能获得一些回路访问路径。该步骤中仅仅使用所有非回路访问路径生成邻接矩阵。
90.可以理解的,本领域技术人员知晓如何生成邻接矩阵,此处不再赘述。
91.步骤s104、根据文本信息特征与邻接矩阵,构建目标函数的代码特征集。
92.该步骤中,将生成的邻接矩阵和提取出的文本信息特征均存储至构建好的代码特征库中,即获得该目标函数对应的代码特征集。
93.本实施例中通过对恶意代码等待检测代码的二进制可执行文件进行反汇编处理后对进行危险操作行为的函数进行定位,然后提取函数的控制流图以及基本块,对基本块按照预设的维度提取出文本信息特征,根据控制流图绘制出有向无环图结构邻接矩阵,从而对该函数进行出细粒度更高的特征提取,以使得恶意代码的相似检测、同源性分析更加准确,为研判恶意代码分类提供函数内部层面的依据。
94.本发明实施例还提供了一种代码特征集构建方法第二实施例。参阅图4,图4示出了代码特征集构建方法第二实施例的流程示意图。
95.本实施例中示出了一种遍历控制流图的具体方法,以自动获得控制流图中的非回路访问路径。
96.本实施例中,包括以下步骤:
97.步骤s201、将控制流图中的根节点作为当前访问节点。
98.其中,非回路访问路径的开始节点为根节点。即所有的非访问路径均从根节点开始。
99.本实施例中,将控制流图中的所有节点提取出以构建一节点库,并构建一访问路径栈。
100.参阅图3,图3示出了一实施例的控制流图。将控制流图中start开始的节点作为根节点后,将根节点1压入该访问路径栈中。此时,访问路径栈的栈顶节点即为根节点1。栈顶节点可视为当前访问节点,从而对当前访问节点进行访问处理。
101.且此时将入栈后的根节点标记。该节点库中的其余节点未标记,即为未访问节点。
102.步骤s202、根据控制流图中的访问流向信息,从控制流图的未访问节点中提取出当前访问节点的后继节点。
103.由于控制流图中所有节点均具有关系指向关系,如当前基本块在条件“true”以及“false”下指向不同的基本块。因此,可获得当前访问节点的指向的后继节点。
104.本实施例中,可将访问路径栈中的栈顶节点出栈,根据控制流图中的流向关系扩展,得到栈顶节点的后续节点。如根节点1包括“true”指向的节点2,和“false”指向的节点3。此时将根节点1出栈并可从节点库中扩展出节点2或者节点3,此步骤中,仅扩展出一个后继节点。
105.步骤s203、基于后继节点更新当前提取节点,以获得更新后的当前提取节点。
106.如,在扩展出根节点1后继的节点2后,将根节点1和节点2依次入栈。此时,节点2位于访问路径中的栈顶处作为栈顶节点。因此,此时,节点2也为更新后的当前提取节点。此时,还可将节点2标记后从节点库中删除,后续不能再从节点库中提取出节点2。
107.步骤s204、根据控制流图中的访问流向信息,判断更新后的当前提取节点是否与根节点形成闭环。
108.该步骤用于判断更新后的当前提取节点与当前已找出的路径是否构成闭合的回路。从而消除控制流图中出现的回路。
109.步骤s205、若更新后的当前提取节点不与根节点形成闭环,则将更新后当前提取节点记录至非回路访问路径中,根据控制流图中的访问流向信息,从访问节点库的未访问节点中提取出更新后的当前提取节点的后继节点,并返回至步骤s204,循环至更新后的当前提取节点无后继节点。
110.步骤s206、若更新后的当前提取节点与根节点形成闭环,则将该访问路径上的所有后继节点标记为已访问,并返回步骤s202。
111.如本实施例中,栈顶节点为节点2,即节点2为更新后的当前提取节点。将节点2出栈后扩展,若节点2的中的一个后继节点为1,即构成一闭环,则将节点2从访问路径栈中删除,将根节点移动至栈顶。并返回到步骤s202,将根节点1出栈后扩展,从节点库中扩展到未标记的节点3。将节点3入栈后作为栈顶节点。此时,节点3为更新后的当前访问节点。对节点3出栈后扩展,由于节点3不与根节点形成闭环,则将节点3存储至访问路径栈的栈顶,并可找到节点3“true”指向的节点4。将节点4存储至栈顶,然后对节点4出栈后继续扩展,循环执行上述步骤,直至节点6入栈。由于节点6没有后继节点,将节点6和空依次入栈,此时,访问路径栈的栈顶为空,获得一条非回路访问路径。
112.步骤s207、跳转至控制流图中与更新后的当前提取节点最近的一个未访问分支节点处,将未访问分支节点作为更新后的当前提取节点,并返回步骤s204,循环至控制流图中的所有节点均被访问。
113.本实施例中,当更新后的当前提取节点无后继节点时,此时即可获得一条非回路路径。在该过程中,已经记录的节点组成一条非回路访问路径。更新后的当前提取节点最近的一个未访问分支节点为控制流图中距离更新后的当前提取节点最近的一个节点,该节点是已经得到的非回路路径中的一个已访问节点的两个后继节点中的另一后继节点。可以理解的,已访问节点的一后继节点已经记录于本次得到的非回路访问路径中。从而,基于分支节点的上一节点已经得到的访问路径继续获取后续访问路径。将未访问分支节点作为更新后的当前提取节点,并可提取到该更新后的当前提取节点的直至根节点的所有上游节点及其已经访问的指向关系。
114.如非回路路径的路径终点为其上一节点的“true”指向的节点,此时,跳转后,更新
后的当前提取节点最近的一个未访问分支节点处为该上一节点的“false”指向的节点。如非回路路径的路径终点为其上一节点的“true”指向的节点,此时,该上一节点的“false”指向的节点也已经提取出另一条非回路访问路径。此时,更新后的当前提取节点最近的一个未访问分支节点处为其上上一节点的另一后继节点。依次类推,可得到最近的一个未访问分支节点。
115.参阅图3,如根节点1、节点3、节点4和节点6依次构成一非回路路径。然后,跳转后继续寻找新的路径,在节点库中,存在节点5和节点7,此时,节点7最接近节点6,从而回到节点6最近的一个未访问分支节点处,即节点7。节点7的上游节点为节点4,也即是节点7为节点4的指向的另一节点。节点7入栈作为栈顶节点,也即视为更新后的当前提取节点。节点7出栈后扩展,由于节点7没有后继节点,为空,将节点7和空依次入栈,此时,访问路径栈的栈顶为空,获得一条非回路访问路径。该访问路径即为:根节点1、节点3、节点4和节点7。然后继续回到节点5,再次执行步骤s204,直到节点库中的所有节点均已经标记,即均被访问。
116.本实施例示出了一种具体的自动找出控制流图中所有非回路访问路径中的方法,该方法可有效消除控制流图中的回路,从而可靠地获得非回路访问路径。
117.此外,本发明实施例还提供了一种代码相似度检测方法第一实施例。参阅图5,图5为代码相似度检测方法第一实施例的流程示意图。
118.本实施例中,方法包括以下步骤:
119.步骤s301、获取对比函数代码样本的第一代码特征集与待检测函数代码的可执行文件;其中,第一代码特征集包括对比代码的第一文本信息特征和第一邻接矩阵。
120.在对恶意代码进行同源性分析时,对比函数代码样本可以是已知恶意代码的执行恶意行为的函数的样本文件。在对未知代码进行安全性分析,对比代码可以是一已知的安全软件中的对同一数据执行操作或者其他接近的函数。并可基于上述方法实施例示出的代码特征集构建方法提取出第一代码特征集。且对比函数代码样本还可以是一已检测出的恶意代码中的执行恶意操作的函数部分对应的代码,以对该恶意代码进行分类,提供函数层面上的证据。
121.待检测函数代码可是一待检测软件的特定函数部分的代码段,以对该代码段进行相似度检测。
122.步骤s302、提取出可执行文件的第二代码特征集;其中,第二代码特征集包括待检测函数代码的第二文本信息特征和第二邻接矩阵。
123.该步骤中可采用上述任一方法实施例示出的代码特征集构建方法提取出第二代码特征集。本实施例在此不再赘述。
124.步骤s303、基于第一文本信息特征与第二文本信息特征、以及第一邻接矩阵与第二邻接矩阵,获得对比函数代码样本与待检测函数代码的第一相似度值。
125.由于文本信息特征和邻接矩阵通过多个维度更加细致地表征了该待检测函数,从而该步骤中第一相似度值可以更加准确地反映出对对比函数代码样本与待检测函数代码的相似程度。
126.在一示出的具体实施例中,步骤s303,包括:
127.步骤s10、将第二邻接矩阵与第一邻接矩阵进行相似度对比。
128.步骤s20、若第二邻接矩阵与第一邻接矩阵相似,则对第一文本信息特征和第二文
本信息特征进行相似度对比,以获得待检测函数代码与对比函数代码样本之间相似基本块的数量。
129.具体而言,若第二邻接矩阵与第一邻接矩阵相同或者相似,则判断待检测函数代码的任一基本块与对比函数代码样本中对应基本块的第二相似度值是否大于第二预设阈值。即可进行文本信息特征的相似度判断。
130.若第一邻接矩阵和第二邻接矩阵的结构不同,则表示对比函数代码样本与待检测函数代码的函数无匹配。无需再进行下一步判断。
131.判断待检测函数代码的任一基本块与对比代码中对应基本块的第二相似度值是否大于第二预设阈值可通过下述方式实现:
132.(1)提取出待检测函数代码的各个基本块,可以理解的,由于邻接矩阵的结构相似甚至于相同,还可提取出对比函数代码样本中的对应基本块。
133.(2)基于第一文本信息特征的和第二文本信息特征,判断待检测函数代码的任一基本块与对比函数代码样本中对应基本块的第二相似度值是否大于第二预设阈值。
134.如对第一文本信息特征的和第二文本信息特征做归一化处理,并通过欧式距离进行两者的相似度判断。
135.欧式距离为:
[0136][0137]
其中,d表示欧式距离,x
1i
表示基本块在维度i下归一化后的值,和x
2i
对应基本块在维度i下归一化后的值,n表示共有n个维度。维度为文本信息特征的任一维度。
[0138]
(3)若第二相似度值小于第二预设阈值,则基本块与对应基本块相似。
[0139]
若判定值越接近0,则表示基本块的相关性越强。可将第二预设阈值设置为接近0的一个数值。从而该步骤中可以判断出相似的基本块的数量。
[0140]
(4)、获得所有判断为相似的基本块的数量。
[0141]
步骤s30、根据相似基本块的数量与待检测函数代码中基本块的总数,获得获得待检测函数代码与对比函数代码样本的第一相似度值。
[0142]
可根据下式获得第一相似度值:
[0143][0144]
s表示第一相似度值。
[0145]
步骤s304、若第一相似度值大于第一预设阈值,则待检测函数代码与对比函数代码样本相似。
[0146]
相似度越接近1,表示对比的两个函数越相似。
[0147]
该步骤中,通过第一相似度值是否达到第一预设阈值,来判断待检测函数代码与对比代码是否相似。
[0148]
若对比函数代码样本为已知恶意代码,而待检测函数代码的函数与对比代码中的函数的第一相似度值达到第一预设阈值,可认为待检测函数代码与对比函数代码样本为同源的恶意代码。
[0149]
同时,本实施例定位出同源恶意代码中相似度低的函数,从而获得更加准确的软件对比结果,如定位出更加危险的函数。
[0150]
或者,如对比代码为安全的软件,而待检测函数代码的函数与对比函数代码样本的第一相似度值未达到第一预设阈值,则恶意代码中的相应函数与安全软件的相似度低,这类函数即为进行危险操作的函数。当相似度低的函数越多时,表示该待检测函数代码异常,为恶意代码的可能性越高。
[0151]
此外,本发明实施例还示出了一种代码特征集构建装置第一实施例。参阅图6,图6为本发明代码特征集构建装置第一实施例的功能模块示意图。
[0152]
本实施例中,代码特征集构建装置包括:
[0153]
反汇编模块101,用于对可执行文件进行反汇编处理,以获得可执行文件中目标函数的基本块数据与控制流图;
[0154]
特征提取模块102,用于对基本块数据进行特征提取,以获得目标函数的文本信息特征;
[0155]
矩阵生成模块103,用于根据控制流图,生成目标函数对应的有向无环图结构邻接矩阵;
[0156]
代码特征集构建模块104,用于根据文本信息特征与邻接矩阵,构建目标函数的代码特征。
[0157]
在一实施例中,矩阵生成模块103包括:
[0158]
流图遍历单元,用于遍历控制流图,以提取出控制流图中所有非回路访问路径;
[0159]
矩阵生成单元,用于基于所有非回路访问路径,生成邻接矩阵。
[0160]
在一实施例中,流图遍历单元用于将控制流图中的根节点作为当前访问节点;其中,非回路访问路径的开始节点为根节点;根据控制流图中的访问流向信息,从控制流图的未访问节点中提取出当前访问节点的后继节点;基于后继节点更新当前提取节点,以获得更新后的当前提取节点;根据控制流图中的访问流向信息,判断更新后的当前提取节点是否与根节点形成闭环;若更新后的当前提取节点不与根节点形成闭环,则将更新后的当前提取节点记录至非回路访问路径中,根据控制流图中的访问流向信息,从访问节点库的未访问节点中提取出更新后的当前提取节点的后继节点,并返回至基于后继节点更新当前提取节点,以获得更新后的当前提取节点的步骤,循环至更新后的当前提取节点无后继节点;若更新后的当前提取节点与根节点形成闭环,则将该回路访问路径上的所有后继节点标记为已访问,并返回根据控制流图中的访问流向信息,从访问节点库的未访问节点中提取出当前提取节点的后继节点的步骤;基于非回路访问路径中的已记录节点,获得一条非回路访问路径;跳转至控制流图中与顶点最近的一个未访问分支节点处,将未访问分支节点作为更新后的当前提取节点,并返回执行根据控制流图中的访问流向信息,判断更新后的当前提取节点是否与根节点形成闭环的步骤,循环至控制流图中的所有节点均被访问。
[0161]
本发明代码特征集构建装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
[0162]
本发明实施例还示出了一种代码相似度检测装置第一实施例。参阅图7,图7为代码相似度检测装置第一实施例的功能模块示意图。
[0163]
本实施例中,代码特征相似度检测装置包括:
[0164]
文件获取模块201,用于获取对比函数代码样本的第一代码特征集与待检测函数代码的可执行文件;其中,第一代码特征集包括对比函数代码样本的第一文本信息特征和第一邻接矩阵;
[0165]
代码特征提取模块202,用于提取出可执行文件的第二代码特征集;其中,第二代码特征集包括待检测函数代码的第二文本信息特征和第二邻接矩阵;
[0166]
相似度对比模块203,用于基于第一文本信息特征与第二文本信息特征、以及第一邻接矩阵与第二邻接矩阵,获得待检测函数代码与对比函数代码样本的第一相似度值;
[0167]
结果判定模块204,用于若第一相似度值大于第一预设阈值,则待检测函数代码与对比函数代码样本相似。
[0168]
在一实施例中,相似度对比模块203包括:
[0169]
邻接矩阵相似度对比单元,用于将第二邻接矩阵与第一邻接矩阵进行相似度对比;
[0170]
基本块相似度分析单元,用于若第二邻接矩阵与第一邻接矩阵相似,则对第一文本信息特征和第二文本信息特征进行相似度对比,以获得待检测函数代码与对比函数代码样本之间相似基本块的数量;
[0171]
第一相似度值计算单元,用于若根据相似基本块的数量与待检测函数代码中基本块的总数,获得获得待检测函数代码与对比函数代码样本的第一相似度值。
[0172]
本发明代码相似度检测装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
[0173]
本发明实施例还提出一种计算机程序产品,计算机程序产品上存储有计算机程序,计算机程序被处理器执行时实现如上文的方法实施例的步骤。因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机程序产品实施例中未披露的技术细节,请参照本技术方法实施例的描述。确定为示例,程序指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
[0174]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random accessmemory,ram)等。
[0175]
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0176]
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专
用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
再多了解一些

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

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

相关文献