CN108875317A - 软件克隆检测方法及装置、检测设备及存储介质 - Google Patents
软件克隆检测方法及装置、检测设备及存储介质 Download PDFInfo
- Publication number
- CN108875317A CN108875317A CN201710319060.3A CN201710319060A CN108875317A CN 108875317 A CN108875317 A CN 108875317A CN 201710319060 A CN201710319060 A CN 201710319060A CN 108875317 A CN108875317 A CN 108875317A
- Authority
- CN
- China
- Prior art keywords
- software
- node
- flow chart
- control flow
- eigenvector
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
Abstract
本发明实施例公开了一种软件克隆检测方法及装置、检测设备及存储介质,所述软件克隆检测方法包括:解析第一软件,确定所述第一软件的控制流程图;提取所述控制流程图的第一特征向量;确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;根据所述相似度,判断所述第一软件是否有克隆所述第二软件。在本发明实施例提供的技术方案中,通过提取待检测的第一软件的控制流程图,并提取控制流程图的特征向量,与软件特征库中采用同样方式提取的其他软件的特征向量进行相似度的计算之后,确定待检测软件是否有克隆其他软件,具有检测精度高及实现简便的特点,且可以检测各种类型的软件克隆。
Description
技术领域
本发明涉及信息技术领域,尤其涉及一种软件克隆检测方法及装置、检测设备及存储介质。
背景技术
在软件的开发过程中,存在着很多的代码克隆现象。这里的代码克隆是指:从其他软件中复制代码,不修改或进行少量修改之后用于到新的软件中。
在进行应用的防盗版或防非法软件的过程中,需要对这种代码克隆进行检测。
现有的检测代码克隆的方法,要不检测准确性低,要不就只能精确检测完全复制的代码克隆检测,针对少量修改的代码克隆的检测能力差,故提出一种检测能力强且可适用于各种代码克隆的技术方案,是现有技术亟待解决的问题。
发明内容
有鉴于此,本发明实施例期望提供一种软件克隆检测方法及装置、检测设备及存储介质,至少部分解决上述问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例第一方面提供一种软件克隆检测方法,包括:
解析第一软件,确定所述第一软件的控制流程图;
提取所述控制流程图的第一特征向量;
确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;
根据所述相似度,判断所述第一软件是否有克隆所述第二软件。
基于上述方案,所述提取所述控制流程图的第一特征向量,包括:
分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量;
关联所述控制流程图中的所述节点向量,获得所述第一特征向量。
基于上述方案,所述分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量,包括:
以如下预设向量模型<p1,p2,p3,p4,p5,p6,p7>构建所述节点向量,其中,所述p1指示对应节点的节点标识;所述p2指示对应节点所在的循环层次;所述p3指示对应节点内包括的函数数量;所述P4指示对应节点是否涉及进程间通信;所述P5指示对应节点是否涉及文件相关操作;所述P6指示对应节点是否存在网络通信,所述P7指示对应节点是否存在应用界面信息。
基于上述方案,所述关联所述控制流程图中的所述节点向量,获得所述第一特征向量,包括:
采用如下函数关系,确定所述第一特征向量的元素;
其中,所述nps为所述第一特征向量的第s个元素;所述mx为第x个节点的指令数量;所述psx为第x个节点的节点向量中的第s个元素;所述my为第y个节点的指令数量;所述psy为第y个节点的节点向量中的第s个元素;所述e(x,y)为CFG中从第x个节点到第y个节点的有向路径。
基于上述方案,所述关联所述控制流程图中的所述节点向量,获得所述第一特征向量,还包括:
确定所述流程控制图对应的总指令数m,其中,所述m为所述第一特征向量的最后一个元素。
基于上述方案,所述确定所述第一特征向量与软件特征库中的第二特征向量的相似度,包括:
采用如下函数关系计算第一特征向量和所述第二特征向量的相似度;
为所述相似度;
为所述第一特征向量;所述np1至npS为所述对应的第1个元素至第S个元素;所述m为所述第一软件对应的控制流程图的总指令数;
为所述第二特征向量;所述n'p1至n'pS为所述对应的第1个元素至第S个元素;所述m'为所述第二软件对应的控制流程图的总指令数;
所述根据所述相似度,判断所述第一软件是否有克隆所述第二软件,包括:
根据所述判断所述第一软件是否有克隆所述第二软件。
本发明实施例第二方面提供一种软件克隆检测装置,包括:
解析单元,用于解析第一软件,确定所述第一软件的控制流程图;
提取单元,用于提取所述控制流程图的第一特征向量;
确定单元,用于确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;
判断单元,用于根据所述相似度,判断所述第一软件是否有克隆所述第二软件。
基于上述方案,所述提取单元,具体用于分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量;关联所述控制流程图中的所述节点向量,获得所述第一特征向量。
基于上述方案,所述提取单元,具体用于以如下预设向量模型<p1,p2,p3,p4,p5,p6,p7>构建所述节点向量,其中,所述p1指示对应节点的节点标识;所述p2指示对应节点所在的循环层次;所述p3指示对应节点内包括的函数数量;所述P4指示对应节点是否涉及进程间通信;所述P5指示对应节点是否涉及文件相关操作;所述P6指示对应节点是否存在网络通信,所述P7指示对应节点是否存在应用界面信息。
基于上述方案,所述提取单元,具体用于采用如下函数关系,确定所述第一特征向量的元素;
其中,所述nps为所述第一特征向量的第s个元素;所述mx为第x个节点的指令数量;所述psx为第x个节点的节点向量中的第s个元素;所述my为第y个节点的指令数量;所述psy为第y个节点的节点向量中的第s个元素;所述e(x,y)为CFG中从第x个节点到第y个节点的有向路径。
基于上述方案,所述提取单元,具体用于确定所述流程控制图对应的总指令数m,其中,所述m为所述第一特征向量的最后一个元素。
基于上述方案,所述确定单元,具体用于采用如下函数关系计算第一特征向量和所述第二特征向量的相似度;
为所述相似度;
为所述第一特征向量;所述np1至npS为所述对应的第1个元素至第S个元素;所述m为所述第一软件对应的控制流程图的总指令数;
为所述第二特征向量;所述n'p1至n'pS为所述对应的第1个元素至第S个元素;所述m'为所述第二软件对应的控制流程图的总指令数;
所述判断单元,具体用于根据所述判断所述第一软件是否有克隆所述第二软件。
本发明实施例第三方面提供一种检测设备,包括:
存储器,用于存储计算机程序;
处理器,与所述存储器连接,用于通过执行所述计算机程序,实现权利前述任意一个或多个技术方案提供的软件克隆检测方法。
本发明实施例第四方面提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行之后,能够实现权利前述任意一个或多个技术方案提供的软件克隆检测方法。
在本发明实施例提供的技术方案中,通过提取待检测的第一软件的控制流程图,并提取控制流程图的特征向量,与软件特征库中采用同样方式提取的其他软件的特征向量进行相似度的计算之后,确定待检测软件是否有克隆其他软件,具有检测精度高及实现简便的特点,且可以检测各种类型的软件克隆。
附图说明
图1为本发明实施例第一种提供软件克隆检测方法的流程示意图;
图2A为本发明实施例提供的一种程序代码与节点的对应关系示意图;
图2B为图2A所示的程序代码的流程控制图。
图3为本发明实施例第二种提供软件克隆检测方法的流程示意图;
图4为本发明实施例提供的一种供软件克隆检测装置的结构示意图;
图5为本发明实施例提供的一种供检测设备的结构示意图;
图6为本发明实施例第三种提供软件克隆检测方法的流程示意。
具体实施方式
以下结合说明书附图及具体实施例对本发明的技术方案做进一步的详细阐述。
如图1所示,本实施例提供一种软件克隆检测方法,包括:
步骤S110:解析第一软件,确定所述第一软件的控制流程图;
步骤S120:提取所述控制流程图的第一特征向量;
步骤S130:确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;
步骤S140:根据所述相似度,判断所述第一软件是否有克隆所述第二软件。
本实施例所述的软件克隆检测方法,可为应用于各种检测设备中的方法,例如,检测服务器。
在本实施例中所述第一软件和所述第二软件可为各种类型的软件,可包括:操作系统软件、应用软件或检测软件等。在本实施例中所述第一软件和第二软件可均为安卓软件。
在本实施例中所述步骤S110可包括解析第一软件,确定第一软件的控制流程图。通常一个软件的代码量很大,存在多个相互独立的控制流程图。在本实施例中所述第一软件为待检测的软件,可提取出一个或多个控制流程图。在本实施例中所述控制流程图可称为CFG,所述CFG为Control Flow Graph的缩写。
所述CFG为指示所述第一软件的图结构,CFG中的一个节点表示程序中的一个基本程序块,CFG中的每条边表示节点之间的执行顺序,即跳转关系。
基本程序块包括一组直线型执行代码段,或称顺序执行代码段,即除了基本程序块最后一条语句,不存在从块内语句向块外语句的跳转关系,且除了基本程序块第一条语句,不存在从块外语句向块内语句的跳转关系。
控制流程图还有两个特殊的节点:入口节点及出口节点;入口节点用于控制进入控制流程图的节点;出口节点,用于所有控制流通过该节点停止。
若节点E、节点F为CFG的两个节点,且存在从节点E到节点F的跳转关系,即存在节点E—>节点F的边(有向路径),则下面两个表达式至少有一个满足:节点E的出度大于1;节点F的入度大于1。
图2A为一段源代码与节点A、B、C及D的对应关系示意图;图2B为图2A中所示的源代码转换成的CFG。图2B中的节点A、节点B、节点C及节点D都为本实施例中CFG中的节点。
在所述CFG中包括多个节点,节点与节点之间用箭头等信息进行关联。在本实施例中一个CFG中的每一个节点都对应于软件中的一段代码即一个基本程序块。
在本实施例中在提取所述CFG之后,会提取该CFG中每一个节点的节点属性,构建所述节点向量。在本实施例中所述节点向量可包括:一个或多个按照预先顺序排序的节点属性。
对应于图2A和图2B,则需要提取节点A、节点B、节点C及节点D的节点属性。
在获得CFG的每一个节点的节点向量之后,会关联CFG中任意两个节点之间的节点属性,获得该待检测的第一软件的第一特征向量。该第一特征向量表示待检测的第一软件的软件特征。
在软件特征库中预先提取了多个合法的第二软件的软件特征,第二软件的第二特征向量的提取方式与所述第一特征向量是相同的。
在本实施例中会在步骤S130确定出第一特征向量和第二特征向量之间的相似度,最终在步骤S140中将根据相似度可以确定出第一软件是否有克隆第二软件,例如,当所述相似度高于预设阈值时,则可认为所述第一软件有克隆所述第二软件的至少部分代码,当所述相似度低于预设阈值时,则可认为所述第一软件未克隆所述第二软件。当然具体如何基于相似度,确定第一软件是否有克隆第二软件是不局限于上述举例的。
软件克隆可分为4种类型:
类型1:除空格、布局和注释外,其余部分都相同的代码复制;
类型2:除标识符、字面量、类型、空格、布局注释外,进行语法结构相同的代码复制;
类型3:除标识符、字面量、类型、空格、布局注释外,进一步对克隆代码进行稍微变动,例如,修改、增加或者删除部分语句的代码复制;
类型4,语法结构不同,但是执行相同的代码复制。
在本实施例中提供的软件克隆检测方法,可以进行上述任意一种类型的克隆类型的检测,同时还具有检测精度高的特点;尤其适用于类型2和类型3的代码克隆检测。
如图3所示,所述步骤S120可包括:
步骤S121:分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量;
步骤S122:关联所述控制流程图中的所述节点向量,获得所述第一特征向量。
在本实施例中首先会提取每一个节点的节点向量,具体可包括:分析每一个节点对应的程序源代码,通过分析源代码,提取出该节点的节点属性,例如,该节点包括的指令数、函数个数,是否包括预定类型的指令,这里的预定类型可包括循环语句,例如C语言中的,for循环语句或while循环语句等。该节点的所在循环语句的层次。例如,某一个软件包括A个循环嵌套,则当前节点所在的循环层次,例如,可能是第1层、2层或第a层;所述a为不大于A的正整数。这些元素可以作为所述节点向量中的元素。
在本实施例中在获得每一个节点的节点向量之后,关联任意两个节点的节点向量,例如,按照CFR中节点的执行顺序,依次计算两个节点之间的向量积,直至遍历完所述节点的节点向量,就可认为获得了该控制流程图的第一特征向量。
当然以上仅是提供了一种节点向量的方法,但是实际过程中不局限于上述方法。
可选地,所述步骤S121可包括:
以如下预设向量模型<p1,p2,p3,p4,p5,p6,p7>构建所述节点向量,其中,所述p1指示对应节点的节点标识;所述p2指示对应节点所在的循环层次;所述p3指示对应节点内包括的函数数量;所述P4指示对应节点是否涉及进程间通信;所述P5指示对应节点是否涉及文件相关操作;所述P6指示对应节点是否存在网络通信,所述P7指示对应节点是否存在应用界面信息。
在本实施例中所述节点向量为一个包括7个元素的向量,pi为节点向量的第i个元素;其中,所述i的取值为1,2,3,4,5,6,7。
p1是所述节点标识,可为节点名称,在本实施例中所述节点标识可为节点序号。在一些实施例中,所述节点序号是依次分配的。当碰到一个节点包括多个分支时,则含有多个分支节点的主节点优先编号,直至到CFG的所有节点都编号完成。
p2用于指示对应节点所处的循环层次,比如在单层for循环中,p2=1;若在两个嵌套的for循环中,p2=2,以此类推。
p3用于指示该节点中函数的数量。
p4用于指示节点内是否存在进程间通信,如果存在,则p4=1,如果不存在,p4=0。
p5用于指示判断节点内是否存在文件相关操作,如果存在,p5=1,如果不存在,p5=0。这里的文件相关操作可包括:文件的打开操作、文件的修改操作、文件的删除操作、文件的存储位置的更替操作等。
p6用于判断节点内是否存在网络通信,如果存在,则p6=1,如果不存在,p6=0。所述网络通信可为与其他电子设备进行数据交互的指令,例如,通过网络向其他设备发送信息,和/或,通过网络从其他设备接收信息等。
p7用于判断节点内是否存在应用界面信息,如果存在,p7=1,如果不存在,p7=0。这里的应用界面信息,可为呈现到用户界面,可用于控制电子设备的显示界面,可供用户查看的信息。
在上述实施例中所述预设向量模型为包括7个元素的空白向量,在一些实施例中所述预设向量模型中的7个元素可调换元素的排序,从而形成不同的节点向量。
在一些实施例中所述节点向量,不局限于上述举例。
可选地,所述步骤S122可包括:
采用如下函数关系,确定所述第一特征向量的元素;
其中,所述nps为所述第一特征向量的第s个元素;所述mx为第x个节点的指令数量;所述psx为第x个节点的节点向量中的第s个元素;所述my为第y个节点的指令数量;所述psy为第y个节点的节点向量中的第s个元素;所述e(x,y)为CFG中从第x个节点到第y个节点的有向路径。
在本实施例中提供了一种基于节点向量,计算第一特征向量的方式。在本实施例中通过关联任意两个节点的节点向量的对应元素得到最后第一特征向量。当所述节点向量为前述的<p1,p2,p3,p4,p5,p6,p7>时,则所述s的取值为1到7的正整数。若所述P1为标号,所述x和y的取值为不大于所述CFG中总节点数的正整数。这样的话,所述第一特征向量可为<np1,np2,np3,np4,np5,np6,np7>。
在一些实施例中,所述步骤S122可还包括:确定所述流程控制图对应的总指令数m,其中,所述m为所述第一特征向量的最后一个元素。
在本实施例中还引入了CFG的总指令数,则所述第一特征向量可为<np1,np2,np3,np4,np5,np6,np7,m>是一个包括8个元素的向量。
若所述第一特征向量为一个包括B个元素的向量,则添加上所述m,则包括B+1个元素。
可选地,所述步骤S130可包括:
采用如下函数关系计算第一特征向量和所述第二特征向量的相似度
为所述第一特征向量;所述np1至npS为所述对应的第1个元素至第S个元素;所述m为所述第一软件对应的控制流程图的总指令数;
为所述第二特征向量;所述n'p1至n'pS为所述对应的第1个元素至第S个元素;所述m'为所述第二软件对应的控制流程图的总指令数;
所述步骤S140可包括:
根据所述判断所述第一软件是否有克隆所述第二软件。
所述相似度反映了第一软件和第二软件的源代码之间的相似性。在本实施例中的取值越小,则表示第一软件和第二软件的相似度越高,若的取值越大,则表示第一软件和第二软件的相似度越小,差异度越高。
在一些实施例中确定所述相似度,还可包括:计算所述第一特征向量和所述第二特征向量的点积,若采用这种方式,则点积越大,则表示相似度越高,若点积越小则表示相似度越低。
实践表明,采用本实施例提供的软件克隆检测方法,检测复杂度的时间复杂度可为O(c*m),这里的m是一个软件中包括的CFG的个数,即该软件包括的执行流程的个数;所述c为常数,通常为远小于所述m的数据,相对于现有技术中O(m*m)的时间复杂度,显然时间复杂度大大降低了。
通常一个软件包括多个执行流程,通常一个执行令流程对应于一个CFG,在本实施例中为了精确判断第一软件是否有克隆第二软件,所述步骤S140具体可包括:
根据所述相似度,统计所述第一软件中与所述第二软件的相似度大于相似度阈值的特征向量数或比例;
当所述特征向量数大于临界值时,或所述比例大于临界比例时,则可认为所述第一软件为所述第二软件的克隆软件。
在一些实施例中,所述软件特征库中包括多个第二软件的特征向量;
所述步骤S140可包括:
记录所述软件特征库中的每一个与所述第一特征向量的相似度高于相似度阈值的第二向量的软件标识,这里的软件标识可为对应软件的编号或软件的消息摘要算法第五版(MD5)标识;
统计每一个所述第二软件的软件标识被记录的次数;
当所述次数高于次数阈值时,则表明所述相似度高于相似度阈值的第二特征向量的个数大于所述临界值,则表明该软件标识对应的第二软件为所述第一软件的克隆对象,所述第一软件为该第二软件的克隆软件。
当然具体如何判断基于所述相似度,判断所述第一软件是否为所述第二软件的方式有很多种,具体不局限于上述任意一种。
如图4所示,本发明实施例提供一种软件克隆检测装置,包括:
解析单元110,用于解析第一软件,确定所述第一软件的控制流程图;
提取单元120,用于提取所述控制流程图的第一特征向量;
确定单元130,用于确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;
判断单元140,用于根据所述相似度,判断所述第一软件是否有克隆所述第二软件。
本实施例中所述软克隆装置,可为各种类型的电子设备,例如,检测服务器或检测终端等。
所述解析单元110、提取单元120、确定单元130及判断单元140可对应于检测服务器或检测终端中的处理器或处理电路。所述处理器可包括:中央处理器(CPU)、微处理器(MCU)、数字信号处理器(DSP)、应用处理器(AP)或可编程阵列(PLC)等。所述处理电路可包括:专用集成电路,
所述处理器或处理电路,可通过执行可执行代码实现上述单元。
本实施例提供的检测设备,首先会通过梳理待检测的第一软件的源代码或指令跳转地址等,得到所述控制流程图,然后按照预设特征提取方式,从流程控制图中提取出反映第一软件的软件特征的第一特征向量,再结合第一特征向量与软件特征库中各个软件的第二特征向量,可以得到相似度,再基于该相似度,确定第一软件是否有复制或模仿第二软件的代码,从而确定出第一软件是否有克隆第二软件,从而可以确定第一软件是否为克隆软件;具有检测精度高,且适用于各种软件克隆类型等,尤其适用于前述的类型2和类型3的代码克隆的检测。
可选地,所述提取单元120,具体用于分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量;关联所述控制流程图中的所述节点向量,获得所述第一特征向量。
在本实施例中所述第一特征向量的提取,首先基于预先确定要提取的节点属性,提取出每一个节点的节点属性,并按照节点向量中各节点属性的排序进行排序,从而形成所述节点向量。再关联同一个CFG中各个节点的节点向量得到所述第一特征向量,用来反映所述第一软件的软件特征。
这种软件的特征向量,部件具有实现简单,且具有能够提取精确反映出软件的特征的特征向量。
可选地,所述提取单元120,具体用于以如下预设向量模型<p1,p2,p3,p4,p5,p6,p7>构建所述节点向量,其中,所述p1指示对应节点的节点标识;所述p2指示对应节点所在的循环层次;所述p3指示对应节点内包括的函数数量;所述P4指示对应节点是否涉及进程间通信;所述P5指示对应节点是否涉及文件相关操作;所述P6指示对应节点是否存在网络通信,所述P7指示对应节点是否存在应用界面信息。
本实施例会基于预设向量模块,提取出节点向量。当然具体实现时,所述预设向量模型不局限于上述任意一个向量。
可选地,所述提取单元120,具体用于采用如下函数关系,确定所述第一特征向量的元素;
其中,所述nps为所述第一特征向量的第s个元素;所述mx为第x个节点的指令数量;所述psx为第x个节点的节点向量中的第s个元素;所述my为第y个节点的指令数量;所述psy为第y个节点的节点向量中的第s个元素;所述e(x,y)为CFG中从第x个节点到第y个节点的有向路径。
在完成各个节点特征确定之后,然后通过预设函数关系等向量计算,可以基于节点向量得到软件的特征向量。
此外,所述提取单元120,具体用于确定所述流程控制图对应的总指令数m,其中,所述m为所述第一特征向量的最后一个元素。
基于上述方案,所述确定单元,具体用于采用如下函数关系计算第一特征向量和所述第二特征向量的相似度;
为所述相似度;
为所述第一特征向量;所述np1至npS为所述对应的第1个元素至第S个元素;所述m为所述第一软件对应的控制流程图的总指令数;
为所述第二特征向量;所述n'p1至n'pS为所述对应的第1个元素至第S个元素;所述m'为所述第二软件对应的控制流程图的总指令数.
对应地,所述判断单元140,具体用于根据所述判断所述第一软件是否有克隆所述第二软件。
本实施例还提供了一种基于特征向量的向量计算,进行相似度确定,及基于相似度确定出第一软件是否有克隆第二软件的判断,具有实现简单的特点。
在本发明实施例提供的技术方案中,简便通过提取待检测的第一软件的控制流程图,并提取控制流程图的特征向量,与软件特征库中采用同样方式提取的其他软件的特征向量进行相似度的计算之后,确定待检测软件是否有克隆其他软件,具有检测精度高及实现简便的特点,且可以检测各种类型的软件克隆。
在一些实施例中,所述判断单元140可具体用于根据所述相似度,统计下所述第一软件中与所述第二软件的相似度大于相似度阈值的特征向量数或比例;当所述特征向量数大于临界值时,或所述比例大于临界比例时,则可认为所述第一软件为所述第二软件的克隆软件
具体如,所述判断单元140可用于记录所述软件特征库中的每一个与所述第一特征向量的相似度高于相似度阈值的第二向量的软件标识,这里的软件标识可为对应软件的编码或软件的消息摘要算法第五版(MD5);统计每一个所述第二软件的软件标识被记录的次数;当所述次数高于次数阈值时,则表明所述相似度高于相似度阈值的第二特征向量的个数大于所述临界值,则表明该软件标识对应的第二软件为所述第一软件的克隆对象,所述第一软件为所述第二软件的克隆软件。
如图5所示,本发明实施例还提供一种检测设备,包括:
存储器210,用于存储计算机程序;
处理器220,与所述存储器连接,用于通过执行所述计算机程序,实现前述任意一个或多个技术方案提供的软件克隆检测方法。
在本实施例存储器210,可包括各种类型的存储器,优选可包括非瞬间存储介质的存储器,可用于存储所述计算机程序。
所述处理器220可包括:中央处理器、微处理器、应用处理器、数字信号处理器或可编程阵列等。
所述处理器220与存储器210可通过总线230连接,这里的总线230可包括集成电路(IIC)总线,或外设互连标准(PCI)总线等检测设备的内部通信接口进行连接。
该处理器220可用于通过执行存储器210中的计算机程序,可以实现图1和/或图3所示的软件克隆方法。
本发明实施例还提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行之后,能够实现前述任意一个或多个技术方案提供的软件克隆检测方法。例如,可执行图1和图3所示的方法中的一个或多个。
本发明实施例提供的计算机存储介质可为随机存储介质、只读存储介质、闪存或移动存储设备或光盘等。所述计算机存储介质可为非瞬间存储介质。
以下结合上述任意一个技术方案,提供三个具体示例:
示例一:
本示例提供了一种基于控制流程图对安卓(Android)应用软件进行克隆检测的方法。该方法包括:
首先,搜集各安卓软件市场现有的Android应用软件安装包;
对于每一个应用软件,得到每个方法的控制流程图;
并对控制流程图进行特征提取计算,基于此进行克隆检测。
将每一个应用软件对应形成的若干向量收集并组建数据库,构建一个应用软件方法特征库。对于待检测的应用软件,提取该应用软件安装包的方法,计算特征向量,将向量一一与应用软件特征库中的作比对,利用本示例提到的方法计算特征向量之间的差异度(这里的差异度成相似度反相关,例如,呈反比,差异度越大则相似度越小),能快速找到差异度低于特定阈值的向量,最后将找到的向量按照软件特有的签名分类,当软件特征库中某一应用软件与待检测软件中的特征向量的相似度大于相似度阈值的特征向量数量大于一定值的时候,可判定待检测应用软件与其存在克隆行为。本示例提供的方法能快速准确的检测出应用软件是否存在代码克隆行为并找出相应的软件。
示例二:
本示例主要提出一种以控制流程图CFG(Control flow graph,CFG)为基础,对应用方法特征进行提取后抽象为向量的方法,以此为基础构建出应用软件方法特征库进行软件的克隆检测。
程序的具体实施流程图如下:
一、下载不同安卓市场上的所有应用软件,反编译成.smali文件后一一提取其中的方法;
生成各方法对应的控制流程图;
对于每一个控制流程图,采用本发明实施例提出的方法提取特征向量,用所有计算得到的特征向量构建一个应用软件特征库。
对于不同Android软件市场上软件应用方法的提取以及控制流程图CFG的生成,均可使用已存在的技术完成。
在CFG中,每一个节点都对应着该程序中的一处基本程序块,节点之间的有向路径表示了程序内在的控制依赖关系。本示例定义了一个矢量<p1,p2,p3,p4,p5,p6,p7>来表示控制流程图(以下简称CFG)中的每个结点。其中p1用来表示CFG中每个节点的序号,p2表示节点内语句所处的循环层次,p3用于表示节点内函数的数量,p4表示是否存在进程间通信,p5表示节点内是否存在文件相关操作,p6标识节点内是否存在网络通信,p7标识节点内是否存在应用界面信息。m是节点内指令的数量。其中标识pi(i=1,2,3,4,5,6,7)的计算准则如下:
1)p1:先给控制流程图的第一个结点标识序号1。接下来依次标识序号,如果碰见一个节点有多个分支,则含有更多语句的子分支节点优先编号,直到CFG的最后一个节点。最后在CFG的末尾添加一个终止节点。
2)p2:计算该节点所处的循环层次,比如在单层for循环中,p2=1;若在两个嵌套的for循环中,p2=2,以此类推。
3)p3:计算该节点中函数的数量。
4)p4:判断节点内是否存在进程间通信,如果存在,则p4=1,如果不存在,p4=0。
5)p5:判断节点内是否存在文件相关操作,如果存在,p5=1,如果不存在,p5=0。
6)p6:判断节点内是否存在网络通信,如果存在,则p6=1,如果不存在,p6=0。
7)p7:判断节点内是否存在应用界面信息,如果存在,p7=1,如果不存在,p7=0。
本发明进一步提取控制流程图CFG的特征,用一个七维特征向量来表示。
其中np1的计算方式如下:
np2的计算方式如下:
np3,np4,np5,np6,np7的计算方法类似。
其中,x和y为CFG中任意两个节点,mx、my则分别对应这两个节点中指令的数量,v1x和v1y分别应x节点、y节点的v1值,e(x,y)为CFG中从x节点到y节点的有向路径。
二、将所有应用的方法对应的特征向量提取出来,存入应用软件特征库中,所述软件特征库中每一条记录均可包括:流程,包含应用市场名、应用软件文件名、类名、流程名、应用的MD5以及七维特征向量。将库中的向量进行排序,搜索时可将时间复杂度由O(n2)减少到O(c*n)。其中n是方法的总数量,c是每个方法需要比较的平均方法数量。通常来说,c<<n。
对于待检测的应用软件,使用同样的流程计算出每一个方法的特征向量,将每个特征向量与应用软件方法特征库中的特征向量一一进行相似性比对,计算特征之间的差异度。如果在库中比对发现相似性均未达到预定阈值则停止,提示该目标软件没有克隆行为。否则记录下库中相似性高于阈值的向量,最后将记录的向量按照MD5划分,若某一MD5的向量数目高于设定的阈值,则说明待检测应用与该MD5所属的应用软件存在克隆行为。
两个特征向量的相似度比较方法如下:
设两个方法对应的CFG图抽象出来的特征向量为其方法差异度(MDD)为两个特征向量之间的距离(也即两种方法之间的差异),计算方法为:
其中,m为CFG中所有节点的指令总数量,
MDD值越大,表示两个流程差异越大。MDD值为0则表示两个流程完全相同。
设定一个MDD阈值,在对待检测软件进行比较时,记录下库中相似性高于阈值的向量,最后将记录的向量按照MD5划分,设定一个临界值,若某一相同MD5的向量数目高于临界值,则说明待检测应用与该MD5所属的应用软件存在克隆行为。
示例三:
如图6所示,本示例提供一种软件克隆方法,包括:
步骤S11:下载收集不同安卓市场上的所有软件;
步骤S12:提取特征向量;
步骤S13:基于提取的特征向量,形成软件特征库;
步骤S21:获取待检测软件的代码;
步骤S22:生成待检测软件的CFG;
步骤S23:提取并计算CFG的特征向量;
步骤S4:比对特征向量的相似性,将比较结果大于预设阈值的向量按MD5分类;
步骤S5:输出数量大于一定阈值的结果,具体可包括:输出MD5被统计的数量大于一定阈值的软件的软件标识。
本示例提供的方法具有非常好的精准度,由于从控制流程图中提取的特征向量能保存程序的结构信息,因而对类型2和类型3的检测具有非常高的精度,又因为此方法是可扩展的,能进行大规模代码数据的克隆检测,同时本方法将应用软件方法特征库中的特征向量进行排序,能将复杂度降到O(c*m)。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理模块中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (14)
1.一种软件克隆检测方法,其特征在于,包括:
解析第一软件,确定所述第一软件的控制流程图;
提取所述控制流程图的第一特征向量;
确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;
根据所述相似度,判断所述第一软件是否有克隆所述第二软件。
2.根据权利要求1所述的方法,其特征在于,
所述提取所述控制流程图的第一特征向量,包括:
分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量;
关联所述控制流程图中的所述节点向量,获得所述第一特征向量。
3.根据权利要求2所述的方法,其特征在于,
所述分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量,包括:
以如下预设向量模型<p1,p2,p3,p4,p5,p6,p7>构建所述节点向量,其中,所述p1指示对应节点的节点标识;所述p2指示对应节点所在的循环层次;所述p3指示对应节点内包括的函数数量;所述P4指示对应节点是否涉及进程间通信;所述P5指示对应节点是否涉及文件相关操作;所述P6指示对应节点是否存在网络通信,所述P7指示对应节点是否存在应用界面信息。
4.根据权利要求2所述的方法,其特征在于,
所述关联所述控制流程图中的所述节点向量,获得所述第一特征向量,包括:
采用如下函数关系,确定所述第一特征向量的元素;
其中,所述nps为所述第一特征向量的第s个元素;所述mx为第x个节点的指令数量;所述psx为第x个节点的节点向量中的第s个元素;所述my为第y个节点的指令数量;所述psy为第y个节点的节点向量中的第s个元素;所述e(x,y)为控制流程图CFG中从第x个节点到第y个节点的有向路径。
5.根据权利要求4所述的方法,其特征在于,
所述关联所述控制流程图中的所述节点向量,获得所述第一特征向量,还包括:
确定所述流程控制图对应的总指令数m,其中,所述m为所述第一特征向量的最后一个元素。
6.根据权利要求2所述的方法,其特征在于,
所述确定所述第一特征向量与软件特征库中的第二特征向量的相似度,包括:
采用如下函数关系计算第一特征向量和所述第二特征向量的相似度;
为所述相似度;
为所述第一特征向量;所述np1至npS为所述对应的第1个元素至第S个元素;所述m为所述第一软件对应的控制流程图的总指令数;
为所述第二特征向量;所述n'p1至n'pS为所述对应的第1个元素至第S个元素;所述m'为所述第二软件对应的控制流程图的总指令数;
所述根据所述相似度,判断所述第一软件是否有克隆所述第二软件,包括:
根据所述判断所述第一软件是否有克隆所述第二软件。
7.一种软件克隆检测装置,其特征在于,包括:
解析单元,用于解析第一软件,确定所述第一软件的控制流程图;
提取单元,用于提取所述控制流程图的第一特征向量;
确定单元,用于确定所述第一特征向量与软件特征库中的第二特征向量的相似度;其中,所述第二特征向量为从第二软件的控制流程图中提取的;
判断单元,用于根据所述相似度,判断所述第一软件是否有克隆所述第二软件。
8.根据权利要求7所述的装置,其特征在于,
所述提取单元,具体用于分析所述控制流程图中每一个节点对应的基本程序块,获得每一个所述节点对应的节点向量;关联所述控制流程图中的所述节点向量,获得所述第一特征向量。
9.根据权利要求8所述的装置,其特征在于,
所述提取单元,具体用于以如下预设向量模型<p1,p2,p3,p4,p5,p6,p7>构建所述节点向量,其中,所述p1指示对应节点的节点标识;所述p2指示对应节点所在的循环层次;所述p3指示对应节点内包括的函数数量;所述P4指示对应节点是否涉及进程间通信;所述P5指示对应节点是否涉及文件相关操作;所述P6指示对应节点是否存在网络通信,所述P7指示对应节点是否存在应用界面信息。
10.根据权利要求8所述的装置,其特征在于,
所述提取单元,具体用于采用如下函数关系,确定所述第一特征向量的元素;
其中,所述nps为所述第一特征向量的第s个元素;所述mx为第x个节点的指令数量;所述psx为第x个节点的节点向量中的第s个元素;所述my为第y个节点的指令数量;所述psy为第y个节点的节点向量中的第s个元素;所述e(x,y)为控制流程图CFG中从第x个节点到第y个节点的有向路径。
11.根据权利要求10所述的装置,其特征在于,
所述提取单元,具体用于确定所述流程控制图对应的总指令数m,其中,所述m为所述第一特征向量的最后一个元素。
12.根据权利要求8所述的装置,其特征在于,
所述确定单元,具体用于采用如下函数关系计算第一特征向量和所述第二特征向量的相似度;
为所述相似度;
为所述第一特征向量;所述np1至npS为所述对应的第1个元素至第S个元素;所述m为所述第一软件对应的控制流程图的总指令数;
为所述第二特征向量;所述n'p1至n'pS为所述对应的第1个元素至第S个元素;所述m'为所述第二软件对应的控制流程图的总指令数;
所述判断单元,具体用于根据所述判断所述第一软件是否有克隆所述第二软件。
13.一种检测设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,与所述存储器连接,用于通过执行所述计算机程序,实现权利要求1至6任一项所述的软件克隆检测方法。
14.一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行之后,能够实现权利要求1至6任一项所述的软件克隆检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710319060.3A CN108875317B (zh) | 2017-05-08 | 2017-05-08 | 软件克隆检测方法及装置、检测设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710319060.3A CN108875317B (zh) | 2017-05-08 | 2017-05-08 | 软件克隆检测方法及装置、检测设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108875317A true CN108875317A (zh) | 2018-11-23 |
CN108875317B CN108875317B (zh) | 2022-06-07 |
Family
ID=64287417
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710319060.3A Active CN108875317B (zh) | 2017-05-08 | 2017-05-08 | 软件克隆检测方法及装置、检测设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108875317B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110598408A (zh) * | 2019-08-23 | 2019-12-20 | 华中科技大学 | 一种基于函数层编码的App克隆检测方法及系统 |
CN110688150A (zh) * | 2019-09-03 | 2020-01-14 | 华中科技大学 | 一种基于张量运算的二进制文件代码搜索检测方法及系统 |
CN110851176A (zh) * | 2019-10-22 | 2020-02-28 | 天津大学 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
CN112257068A (zh) * | 2020-11-17 | 2021-01-22 | 南方电网科学研究院有限责任公司 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
WO2022012327A1 (zh) * | 2020-07-17 | 2022-01-20 | 华为技术有限公司 | 代码分析的方法、系统及计算设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
CN104123493A (zh) * | 2014-07-31 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
CN104407872A (zh) * | 2014-12-04 | 2015-03-11 | 北京邮电大学 | 代码克隆的检测方法 |
CN104933360A (zh) * | 2015-05-21 | 2015-09-23 | 中国科学院信息工程研究所 | 基于程序依赖图的Android平台仿冒应用检测方法 |
-
2017
- 2017-05-08 CN CN201710319060.3A patent/CN108875317B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
CN104123493A (zh) * | 2014-07-31 | 2014-10-29 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
CN104407872A (zh) * | 2014-12-04 | 2015-03-11 | 北京邮电大学 | 代码克隆的检测方法 |
CN104933360A (zh) * | 2015-05-21 | 2015-09-23 | 中国科学院信息工程研究所 | 基于程序依赖图的Android平台仿冒应用检测方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110598408A (zh) * | 2019-08-23 | 2019-12-20 | 华中科技大学 | 一种基于函数层编码的App克隆检测方法及系统 |
CN110598408B (zh) * | 2019-08-23 | 2021-03-26 | 华中科技大学 | 一种基于函数层编码的App克隆检测方法及系统 |
CN110688150A (zh) * | 2019-09-03 | 2020-01-14 | 华中科技大学 | 一种基于张量运算的二进制文件代码搜索检测方法及系统 |
CN110851176A (zh) * | 2019-10-22 | 2020-02-28 | 天津大学 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
CN110851176B (zh) * | 2019-10-22 | 2023-07-04 | 天津大学 | 一种自动构造并利用伪克隆语料的克隆代码检测方法 |
WO2022012327A1 (zh) * | 2020-07-17 | 2022-01-20 | 华为技术有限公司 | 代码分析的方法、系统及计算设备 |
CN112257068A (zh) * | 2020-11-17 | 2021-01-22 | 南方电网科学研究院有限责任公司 | 一种程序相似性检测方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108875317B (zh) | 2022-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108875317A (zh) | 软件克隆检测方法及装置、检测设备及存储介质 | |
US10410111B2 (en) | Automated evaluation of neural networks using trained classifier | |
US8819642B2 (en) | Method and system for generating and processing black box test cases | |
US8479165B1 (en) | System for testing operation of software | |
CN110554958B (zh) | 图数据库测试方法、系统、设备和存储介质 | |
US8370808B2 (en) | Apparatus and a method for generating a test case | |
US8121827B2 (en) | Efficient presentation of functional coverage results | |
CN110096434A (zh) | 一种接口测试方法及装置 | |
CN101782867A (zh) | 在数据处理系统中业务流的统计表示的使用 | |
CN105760292B (zh) | 一种用于单元测试的断言验证方法和装置 | |
CN103827853A (zh) | 最小化规则管理系统中的规则集 | |
CN110287696A (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN108491228A (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN108255702A (zh) | 一种测试用例创建方法、装置、设备及存储介质 | |
CN107080945B (zh) | 测试游戏中人工智能行为的方法、装置及电子设备 | |
CN114139209A (zh) | 一种应用于业务用户大数据的信息防窃取方法及系统 | |
Kessentini et al. | Automated metamodel/model co-evolution using a multi-objective optimization approach | |
Oluwagbemi et al. | Automatic generation of test cases from activity diagrams for UML based testing (UBT) | |
US20120290282A1 (en) | Reachability analysis by logical circuit simulation for providing output sets containing symbolic values | |
CN116340940A (zh) | 代码识别方法、终端设备及存储介质 | |
CN109582560A (zh) | 测试文件编辑方法、装置、设备及计算机可读存储介质 | |
Wever et al. | Active coevolutionary learning of requirements specifications from examples | |
CN113672389A (zh) | 一种服务器兼容方法、系统、设备及计算机可读存储介质 | |
JP2008269585A (ja) | プロパティ記述のカバレッジ測定装置及びプログラム | |
CN115658551B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |