CN117251208A - 一种代码克隆检测方法、装置及电子设备 - Google Patents
一种代码克隆检测方法、装置及电子设备 Download PDFInfo
- Publication number
- CN117251208A CN117251208A CN202311245437.7A CN202311245437A CN117251208A CN 117251208 A CN117251208 A CN 117251208A CN 202311245437 A CN202311245437 A CN 202311245437A CN 117251208 A CN117251208 A CN 117251208A
- Authority
- CN
- China
- Prior art keywords
- detected
- sample
- code
- determining
- cpg
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 103
- 238000000034 method Methods 0.000 claims abstract description 409
- 239000013598 vector Substances 0.000 claims abstract description 139
- 238000004590 computer program Methods 0.000 claims description 13
- 238000007639 printing Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 abstract description 13
- 238000010367 cloning Methods 0.000 abstract description 9
- 238000013461 design Methods 0.000 description 25
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000000605 extraction Methods 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000001364 causal effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种代码克隆检测方法、装置及电子设备,涉及网络安全技术领域,该方法包括:首先,基于待检测代码,生成所述待检测代码的待检测代码属性图CPG,然后,在样本代码的样本CPG与该待检测CPG之间满足第一相似度要求时,基于该待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,最后,基于该待检测向量集合、该待检测节点集合、样本代码的样本向量集合和样本代码的样本节点集合,确定样本代码中的被克隆数据和待检测代码中的克隆数据。通过上述方法,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性。
Description
技术领域
本申请涉及网络安全技术领域,特别是涉及一种代码克隆检测方法、装置及电子设备。
背景技术
代码克隆检测技术在软件演化,软件复用等许多软件维护工作中起到了重要的作用,其目的是去检测两个代码片段之间的相似性。
目前的代码克隆检测方法大都是基于抽象语法树(Abstract Syntax Tree,AST)和程度依赖图(Program Dependence Graph,PDG)来进行的,如图1所示。图1为一种目前代码克隆检测的流程示意图,包括:首先,基于待检测代码生成第一AST和第一PDG,分别对第一AST和第一PDG进行特征提取,得到第一AST特征向量和第一PDG特征向量,并对第一AST特征向量和第一PDG特征向量进行特征融合,得到第一特征向量。同时,基于样本代码生成第二AST和第二PDG,分别对第二AST和第二PDG进行特征提取,得到第二AST特征向量和第二PDG特征向量,并对第二AST特征向量和第二PDG特征向量进行特征融合,第二特征向量。进一步,将第一特征向量和第二特征向量进行匹配计算,得到克隆的代码块。
上述方法由于仅基于第一AST、第一PDG、第二AST和第二PDG进行代码克隆检测,在面对多个方法合并成一个方法或一个方法分解成多个方法的克隆场景时,比如,待检测代码为A+C,样本代码A、B、C,检测代码的第一AST、第一PDG与样本代码的第二AST、第二PDG相比,差异性较大,导致无法精准的检测出克隆代码。
发明内容
本申请提供了一种代码克隆检测方法、装置及电子设备,可以解决目前代码克隆检测方法精准性低的问题。
第一方面,本申请提供了一种代码克隆检测方法,所述方法包括:
基于待检测代码,生成所述待检测代码的待检测代码属性图CPG;
在样本代码的样本CPG与所述待检测CPG之间满足第一相似度要求时,基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;
基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据。
通过上述方法,将有执行顺序关系的代码节点作为向量集合,无执行顺序关系的代码节点作为节点集合,从而在代码克隆检测时,通过同时匹配这两个集合,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性。
在一种可能的设计中,所述满足第一相似度要求,包括:
在所述样本CPG与所述待检测CPG之间不存在图像重合部分时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求;或
在存在所述图像重合部分,且所述样本CPG在所述图像重合部分对应的第一方法与所述待检测CPG在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求。
在一种可能的设计中,所述方法还包括:
在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据。
在一种可能的设计中,所述基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,包括:
基于所述待检测CPG,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段、未使用变量和日志打印代码节点;
基于所述无用数据和所述待检测CPG中的方法节点生成所述待检测向量集合和所述待检测节点集合。
通过上述方法,将无用数据从向量集合和节点集合中删除,得到待检测向量集合和待检测节点集合,从而在基于待检测向量集合和待检测节点集合进行代码克隆检测时,可以降低无关数据对检测带来的干扰,提高克隆检测的精准性。
在一种可能的设计中,所述基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
分别将所述待检测向量集合与所述样本向量集合、所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;
确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据。
通过上述方法,基于比对待检测向量集合与所述样本向量集合、所述待检测节点集合与所述样本节点集合之间的交集部分来确定被克隆数据和克隆数据,可以提高克隆检测的精准性。
在一种可能的设计中,所述基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中存在N个样本方法与所述待检测代码中的第一待检测方法之间满足第二相似度要求时,基于所述N个样本方法的关联性,确定所述被克隆数据和所述克隆数据,其中,所述N为大于1的整数,所述第一待检测方法为所述待检测代码中的任一待检测方法。
在一种可能的设计中,所述方法还包括:
在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中不存在所述N个样本方法时,确定所述样本代码中是否存在第一样本方法与所述待检测代码中M个待检测方法之间满足第三相似度要求,其中,所述M为大于1的整数;
若是,则基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据;
若否,则在所述待检测代码中确定出与所述第一样本方法满足第四相似度要求的第一目标待检测方法,并在所述第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第一目标待检测方法。
在一种可能的设计中,所述基于所述N个样本方法的关联性,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
基于所述样本CPG,确定所述N个样本方法之间是否存在关联;
若是,则确定所述被克隆数据为所述N个样本方法,以及所述克隆数据为所述第一待检测方法。
若否,则在所述N个样本方法中确定出与所述第一待检测方法满足第五相似度要求的目标样本方法,并确定所述被克隆数据为所述目标样本方法,以及所述克隆数据为所述第一待检测方法。
通过上述方法,基于判断N个样本方法之间的关联关系,确定出当出现一个待检测方法对应多个样本方法的情况时,是否存在将样本方法合并的代码克隆场景,减少了克隆检测的漏报,提高了克隆检测的精准性。
在一种可能的设计中,所述基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据,包括:
基于所述待检测CPG,确定所述M个待检测方法之间是否存在关联;
若是,则确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述M个待检测方法。
若否,则在所述M个待检测方法中确定出与所述第一样本方法满足第六相似度要求的第二目标待检测方法,并在所述第二目标待检测方法与所述第一样本方法之间的相似代码行数大于所述预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第二目标待检测方法。
通过上述方法,基于判断M个待检测方法之间的关联关系,确定当出现多个待检测方法对应一个样本方法的情况时,是否存在将样本方法拆分的代码克隆场景,减少了克隆检测的漏报,提高了克隆检测的精准性。同时,基于判断相似代码行数是否大于预设阈值,可以防止错误的检测出克隆代码,提高克隆检测的精准性。
第二方面,本申请提供了一种代码克隆检测装置,所述装置包括:
第一生成模块,用于基于待检测代码,生成所述待检测代码的待检测代码属性图CPG;
第二生成模块,用于在样本代码的样本CPG与所述待检测CPG之间满足第一相似度要求时,基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;
第一克隆检测模块,用于基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据。
在一种可能的设计中,所述满足第一相似度要求,包括:
在所述样本CPG与所述待检测CPG之间不存在图像重合部分时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求;或
在存在所述图像重合部分,且所述样本CPG在所述图像重合部分对应的第一方法与所述待检测CPG在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求。
在一种可能的设计中,所述装置还包括:
第二克隆检测模块,用于在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据。
在一种可能的设计中,所述第二生成模块具体用于:
基于所述待检测CPG,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段、未使用变量和日志打印代码节点;
基于所述无用数据和所述待检测CPG中的方法节点生成所述待检测向量集合和所述待检测节点集合。
在一种可能的设计中,所述第一克隆检测模块具体用于:
分别将所述待检测向量集合与所述样本向量集合、所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;
确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据。
在一种可能的设计中,所述第一克隆检测模块包括:
第一克隆检测单元,用于在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中存在N个样本方法与所述待检测代码中的第一待检测方法之间满足第二相似度要求时,基于所述N个样本方法的关联性,确定所述被克隆数据和所述克隆数据,其中,所述N为大于1的整数,所述第一待检测方法为所述待检测代码中的任一待检测方法。
在一种可能的设计中,所述第一克隆检测模块还包括:
确定单元,用于在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中不存在所述N个样本方法时,确定所述样本代码中是否存在第一样本方法与所述待检测代码中M个待检测方法之间满足第三相似度要求,其中,所述M为大于1的整数;
第二克隆检测单元,用于若存在所述第一样本方法与所述M个待检测方法之间满足所述第三相似度要求,则基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据;
第三克隆检测单元,用于若不存在所述第一样本方法与所述M个待检测方法之间满足所述第三相似度要求,则在所述待检测代码中确定出与所述第一样本方法满足第四相似度要求的第一目标待检测方法,并在所述第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第一目标待检测方法。
在一种可能的设计中,所述第一克隆检测单元具体用于:
基于所述样本CPG,确定所述N个样本方法之间是否存在关联;
若是,则确定所述被克隆数据为所述N个样本方法,以及所述克隆数据为所述第一待检测方法。
若否,则在所述N个样本方法中确定出与所述第一待检测方法满足第五相似度要求的目标样本方法,并确定所述被克隆数据为所述目标样本方法,以及所述克隆数据为所述第一待检测方法。
在一种可能的设计中,所述第二克隆检测单元具体用于:
基于所述待检测CPG,确定所述M个待检测方法之间是否存在关联;
若是,则确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述M个待检测方法。
若否,则在所述M个待检测方法中确定出与所述第一样本方法满足第六相似度要求的第二目标待检测方法,并在所述第二目标待检测方法与所述第一样本方法之间的相似代码行数大于所述预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第二目标待检测方法。
第三方面,本申请提供了一种电子设备,包括:
存储器,用于存放计算机程序;
处理器,用于执行所述存储器上所存放的计算机程序时,实现上述第一方面的代码克隆检测方法步骤。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面的代码克隆检测方法步骤。
通过上述代码克隆检测方法,将有执行顺序关系的代码节点作为向量集合,无执行顺序关系的代码节点作为节点集合,从而在代码克隆检测时,通过同时匹配这两个集合,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性。
上述第二方面至第四方面中的各个方面以及各个方面可能达到的技术效果参照上述针对第一方面或者第一方面中的各种可能方案可以达到的技术效果说明,这里不再重复赘述。
附图说明
图1为一种目前代码克隆检测的流程示意图;
图2为本申请实施例提供的一种代码克隆检测方法的流程图;
图3为本申请实施例提供的一种待检测CPG的局部示意图;
图4为本申请实施例提供的一种代码克隆检测的流程示意图;
图5为本申请实施例提供的一种代码克隆检测装置的结构示意图;
图6为本申请实施例提供的另一种代码克隆检测装置的结构示意图;
图7为本申请实施例提供的一种电子设备结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。方法实施例中的具体操作方法也可以应用于装置实施例或系统实施例中。需要说明的是,在本申请的描述中“多个”理解为“至少两个”。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,并存在A和B,单独存在B这三种情况。A与B连接,可以表示:A与B直接连接和A与B通过C连接这两种情况。另外,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
为了便于本领域技术人员理解,首先对本申请实施例中所涉及的技术术语进行解释说明。
(1)抽象语法树(Abstract Syntax Tree,AST):一种基于代码语法的树结构的代码表示,其非终端节点(内部节点)表示操作符(算术或赋值),终端节点(叶节点)表示操作数(常量或标识符)。
(2)控制流图(Control Flow Graph,CFG):一种基于代码语义的图结构的代码表示,其节点通常表示一个完整的代码语句,控制流边指示每个语句的执行顺序。
(3)程序依赖图(Program Dependency Graph,PDG):一种基于代码语义的图结构的代码表示,其节点通常表示一个完整的代码语句,有三种类型的边,分别指代数据依赖关系、控件依赖关系和执行依赖关系。
下面结合附图,对本申请实施例进行详细描述。
目前的代码克隆检测方法大都是基于AST和PDG来进行的,这种方法由于仅基于检测代码的第一AST、第一PDG和样本代码的第二AST、第二PDG进行代码克隆检测,在面对多个方法合并成一个方法或一个方法分解成多个方法的克隆场景时,比如,待检测代码为A+C,样本代码A、B、C,检测代码的第一AST、第一PDG与样本代码的第二AST、第二PDG相比,差异性较大,导致无法精准的检测出克隆代码。
为了解决上述问题,本申请实施例提供的一种代码克隆检测方法,将有执行顺序关系的代码节点作为向量集合,无执行顺序关系的代码节点作为节点集合,从而在代码克隆检测时,通过同时匹配这两个集合,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性。其中,本申请实施例所述方法和装置基于同一技术构思,由于方法及装置所解决问题的原理相似,因此装置与方法的实施例可以相互参见,重复之处不再赘述。
为进一步说明本申请实施例提供的技术方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本申请实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本申请实施例提供的执行顺序。所述方法在实际的处理过程中或者装置执行时,可按照实施例或者附图所示的方法顺序执行或者并执行。
图2为本申请实施例提供的一种代码克隆检测方法的流程图,该流程可由代码克隆检测装置所执行,该装置可通过软件的方式实现,也可通过硬件的方式实现,还可通过软件和硬件结合的方式实现,用以保证系统正常运行。如图2所示,该流程包括如下步骤:
S201,基于待检测代码,生成所述待检测代码的待检测代码属性图CPG;
可选的,待检测代码属性图(Code Property Graph,CPG)的生成方法为:通过对待检测代码进行分析,依次生成待检测代码的AST、CFG和PDG,并根据该AST、CFG和PDG,生成待检测CPG,如图3所示。图3为本申请实施例提供的一种待检测CPG的局部示意图,在图3中,待检测CPG中各个节点的属性和含义如表1所示:
节点属性 | 节点属性含义 |
METHOD | 节点方法(函数)的声明 |
BLOCK | 代码块的声明 |
LOCAL | 局部变量的声明 |
METHOD_RETURN | 方法返回值类型的声明 |
LITERAL | 叶子节点的声明 |
MODIFIER | 修改的声明 |
RETURN | 返回节点的声明 |
CALL | 调用函数的声明 |
IDENTIFIER | 表示符的声明 |
FILE | 文件 |
NAMESPACE_BLOCK | 命名空间 |
TYPE_DECL | 类型的声明 |
METHOD_PARAMETER_IN | 获取方法参数 |
表1
在图3中,CPG的边的类型和含义如表2所示:
表2
S202,在样本代码的样本CPG与该待检测CPG之间满足第一相似度要求时,基于该待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合;
在通过上述方法生成待检测代码的待检测CPG后,进一步,获取样本代码的样本CPG,并将该样本CPG与待检测CPG进行比对,其中,样本代码的样本CPG的生成方法与待检测CPG的生成方法一致,此处不作重复描述。同时,保存样本代码及其样本CPG,以便下次使用时直接获取。
在比对出上述样本CPG与待检测CPG之间满足第一相似度要求时,基于待检测CPG中的方法节点METHOD,生成待检测向量集合和待检测节点集合,其中,待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点。
可选的,满足第一相似度要求包括:在样本CPG与待检测CPG之间不存在图像重合部分时,确定样本CPG与所述待检测CPG之间满足第一相似度要求;或,在样本CPG与待检测CPG之间存在图像重合部分,且样本CPG在该图像重合部分对应的第一方法与待检测CPG在该图像重合部分对应的第二方法之间的相似度小于预设相似度,比如,70%时,确定样本CPG与待检测CPG之间满足第一相似度要求。
另外的,在样本CPG与待检测CPG之间存在上述图像重合部分,且上述第一方法与上述第二方法之间的相似度大于或等于上述预设相似度时,检测出该第一方法为样本代码中的被克隆数据,以及该第二方法为待检测代码中的克隆数据。
可选的,待检测向量集合和待检测节点集合的生成方法为:首先,基于所述待检测CPG,确定出所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段、未使用变量和日志打印代码节点。具体来讲,根据待检测CPG的边可以确定出那些字段和变量是未被使用的。同时,根据待检测CPG中AST类型的边可以确定出日志打印代码节点或日志打印相关代码节点。
然后,基于所述无用数据和待检测CPG中的方法节点生成待检测向量集合和待检测节点集合,具体来讲,可以将上述无用数据对应的代码节点记录到集合A,从而在基于待检测CPG中的方法节点生成待检测向量集合和待检测节点集合,可以通过扫描集合A,确定该方法节点中是否存在无用数据,当存在无用数据时,可以不对无用数据进行处理,提高待检测向量集合和待检测节点集合中数据的有效性。
举例来讲,集合A包括:方法节点void_foo中的nede_5为日志打印代码节点,方法节点void_foo中的代码节点包括:{node_1:int x=source();node_2:int y=3;node_3:sink(x);node_4:sink(y);nede_5:print(“这是一条日志信息”)}。
具体的,上述方法节点void_foo的方法名为foo,则建立一个向量子集为vector_foo,一个节点子集为node_foo,进一步,通过扫描集合A,确定void_foo中nede_5为无用数据,则在基于void_foo的边,确定其各个代码节点之间的执行顺序关系时,可以忽略node_5。
通过上述方法,确定出void_foo中node_1和node_3存在执行顺序关系、node_2和node_4存在执行顺序关系,则将node_1和node_3记作向量vector_1、将node_2和node_4记作向量vector_2,并将vector_1和vector_1放入vector_foo中,得到vector_foo:{vector_1,vector_1}。而node_1和node_2、node_1和node_4、node_2和node_3、node_3和node_4之间都不存在执行顺序关系,则将其作为普通数组放入node_foo,得到node_foo:{[node_1,node_2][node_1,node_4][node_2,node_3][node_3,node_4]}。
需要说明的是,上述节点子集中,只记录各个代码节点的位置信息和参数类型,而不记录具体的代码信息,以缓解待检测节点集合的存储压力。
S203,基于该待检测向量集合、该待检测节点集合、样本代码的样本向量集合和样本代码的样本节点集合,确定样本代码中的被克隆数据和待检测代码中的克隆数据。
在通过上述方法生成待检测向量集合和待检测节点集合后,进一步,获取样本代码的样本向量集合和样本节点集合,并基于待检测向量集合、待检测节点集合、该样本向量集合和样本节点集合,确定样本代码中的被克隆数据和待检测代码中的克隆数据。其中,样本代码的样本向量集合和样本节点集合的生成方法与待检测向量集合和待检测节点集合的生成方法一致,此处不作重复描述。同时,保存样本向量集合和样本节点集合,以便下次使用时直接获取。被克隆数据和克隆数据具体的确定方法可以是:
分别将待检测向量集合与样本向量集合、待检测节点集合与样本节点集合进行比对,得到待检测向量集合与样本向量集合之间的第一交集部分,以及待检测节点集合与样本节点集合之间的第二交集部分。从而确定样本代码在第一交集部分和第二交集部分对应的第三方法为样本代码中的被克隆数据,以及待检测代码在第一交集部分和第二交集部分对应的第四方法为待检测代码中的克隆数据。
除了通过上述方法对普通代码克隆场景进行检测以外,还可进一步对样本代码顺序修改的克隆场景进行检测,如图4所示。图4为本申请实施例提供的一种代码克隆检测的流程示意图,具体包括如下步骤:
401:基于待检测向量集合、待检测节点集合、样本向量集合和样本节点集合,确定样本代码中是否存在N个样本方法与待检测代码中的第一待检测方法之间满足第二相似度要求,比如,N个样本方法分别与第一待检测方法之间的相似度都大于75%,其中,N为大于1的整数,第一待检测方法为待检测代码中的任一待检测方法。若是,则转至402;若否,则转至405。
402:基于样本代码的样本CPG,确定该N个样本方法之间是否存在关联。若是,则转至403;若否则转至404。
403:确定样本代码中的被克隆数据为该N个样本方法,以及待检测代码中的克隆数据为该第一待检测方法。
404:在该N个样本方法中确定出与该第一待检测方法满足第五相似度要求的目标样本方法,并确定样本代码中的被克隆数据为该目标样本方法,以及待检测代码中的克隆数据为该第一待检测方法。
可选的,上述目标样本方法的确定过程可以是:分别计算N个样本方法与该第一待检测方法之间的相似样本代码行数,然后,基于N个样本方法各自的相似样本代码行数,计算N个样本方法各自的相似度,(相似度=相似样本代码节点个数/第一待检测方法的代码节点个数*100%)。最后,将N个样本方法中相似度最高的方法确定为该目标样本方法。
举例来讲,第一待检测方法中的代码行数共10行数,N个样本方法包括样本方法A和样本方法B。分别计算样本方法A中各个代码行与第一待检测方法中各个代码行的相似度,并将相似度高于75%的样本方法A中的代码行作为相似样本代码行,得到样本方法A中相似样本代码行数为7,则样本方法A的相似度为70%。同理,计算出样本方法B的相似度为80%。
进一步,将样本方法A的相似度与样本方法B的相似度进行比较可知,样本方法B的相似度>样本方法A的相似度,则将样本方法B确定该目标样本方法。
405:基于待检测向量集合、待检测节点集合、样本向量集合和样本节点集合,确定样本代码中是否存在第一样本方法与待检测代码中M个待检测方法之间满足第三相似度要求,比如,第一样本方法分别与M个待检测方法之间的相似度都大于75%,其中,该第一样本方法为样本代码中任一样本方法,M为大于1的整数。若是,则转至406,若否,则转至409。
406:基于待检测样本的待检测CPG,确定该M个待检测方法之间是否存在关联,若是,则转至407;若否,则转至408。
407:确定样本代码中的被克隆数据为该第一样本方法,以及待检测代码中的克隆数据为该M个待检测方法。
408:在M个待检测方法中确定出与该第一样本方法满足第六相似度要求的第二目标待检测方法,比如,第一样本方法与第二目标待检测方法之间的相似度大于75%,并在该第二目标待检测方法与该第一样本方法之间的相似代码行数大于或等于预设阈值时,确定样本代码中的被克隆数据为该第一样本方法,以及待检测代码中的克隆数据为该第二目标待检测方法。
可选的,相似代码行的确定方法可以是:分别计算第二目标待检测方法的各个代码行与第一样本方法中各个代码行之间的相似度,将相似度大于70%的第二目标待检测方法中的代码行作为相似代码行。
409:在待检测代码中确定出与该第一样本方法满足第四相似度要求的第一目标待检测方法,比如,第一样本方法与第一目标待检测方法之间的相似度大于75%,并在该第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定样本代码中的被克隆数据为该第一样本方法,以及待检测代码中的克隆数据为该第一目标待检测方法。
可选的,相似代码行的确定方法可以是:分别计算第一目标待检测方法的各个代码行与第一样本方法中各个代码行之间的相似度,将相似度大于70%的第一目标待检测方法中的代码行作为相似代码行。
需要说明的是,上述预设阈值可以是3,也可以是5,具体的数值视情况而定,此处不作具体的限定。
通过上述代码克隆检测方法,将有执行顺序关系的代码节点作为向量集合,无执行顺序关系的代码节点作为节点集合,从而在代码克隆检测时,通过同时匹配这两个集合,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性。
基于同一发明构思,本申请实施例中还提供了一种代码克隆检测装置,如图5所示,为本申请实施例提供的一种代码克隆检测装置的结构示意图,该装置包括:
第一生成模块501,用于基于待检测代码,生成所述待检测代码的待检测代码属性图CPG;
第二生成模块502,用于在样本代码的样本CPG与所述待检测CPG之间满足第一相似度要求时,基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;
第一克隆检测模块503,用于基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据。
在一种可能的设计中,所述满足第一相似度要求,包括:
在所述样本CPG与所述待检测CPG之间不存在图像重合部分时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求;或
在存在所述图像重合部分,且所述样本CPG在所述图像重合部分对应的第一方法与所述待检测CPG在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求。
在另一些实施例中,除了上述图5所示的模块外,还可进一步包括第二克隆检测模块,如图6所示,示例性示出了本申请实施例提供的另一种代码克隆检测装置的结构示意图。该装置包括:第一生成模块501、第二生成模块502、第一克隆检测模块503和第二克隆检测模块601。
所述第二克隆检测模块601,用于在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据。
在一种可能的设计中,所述第二生成模块502具体用于:
基于所述待检测CPG,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段、未使用变量和日志打印代码节点;
基于所述无用数据和所述待检测CPG中的方法节点生成所述待检测向量集合和所述待检测节点集合。
在一种可能的设计中,所述第一克隆检测模块503具体用于:
分别将所述待检测向量集合与所述样本向量集合、所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;
确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据。
在一种可能的设计中,所述第一克隆检测模块503包括:
第一克隆检测单元,用于在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中存在N个样本方法与所述待检测代码中的第一待检测方法之间满足第二相似度要求时,基于所述N个样本方法的关联性,确定所述被克隆数据和所述克隆数据,其中,所述N为大于1的整数,所述第一待检测方法为所述待检测代码中的任一待检测方法。
在一种可能的设计中,所述第一克隆检测模块503还包括:
确定单元,用于在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中不存在所述N个样本方法时,确定所述样本代码中是否存在第一样本方法与所述待检测代码中M个待检测方法之间满足第三相似度要求,其中,所述M为大于1的整数;
第二克隆检测单元,用于若存在所述第一样本方法与所述M个待检测方法之间满足所述第三相似度要求,则基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据;
第三克隆检测单元,用于若不存在所述第一样本方法与所述M个待检测方法之间满足所述第三相似度要求,则在所述待检测代码中确定出与所述第一样本方法满足第四相似度要求的第一目标待检测方法,并在所述第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第一目标待检测方法。
在一种可能的设计中,所述第一克隆检测单元具体用于:
基于所述样本CPG,确定所述N个样本方法之间是否存在关联;
若是,则确定所述被克隆数据为所述N个样本方法,以及所述克隆数据为所述第一待检测方法;
若否,则在所述N个样本方法中确定出与所述第一待检测方法满足第五相似度要求的目标样本方法,并确定所述被克隆数据为所述目标样本方法,以及所述克隆数据为所述第一待检测方法。
在一种可能的设计中,所述第二克隆检测单元具体用于:
基于所述待检测CPG,确定所述M个待检测方法之间是否存在关联;
若是,则确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述M个待检测方法;
若否,则在所述M个待检测方法中确定出与所述第一样本方法满足第六相似度要求的第二目标待检测方法,并在所述第二目标待检测方法与所述第一样本方法之间的相似代码行数大于所述预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第二目标待检测方法。
通过上述代码克隆检测装置,将有执行顺序关系的代码节点作为向量集合,无执行顺序关系的代码节点作为节点集合,从而在代码克隆检测时,通过同时匹配这两个集合,可以检测出将样本代码顺序修改的克隆情况,减少克隆检测的漏报,提高克隆检测的精准性。
基于同一发明构思,本申请实施例中还提供了一种电子设备,所述电子设备可以实现前述代码克隆检测装置的功能,参考图7,所述电子设备包括:
至少一个处理器701,以及与至少一个处理器701连接的存储器702,本申请实施例中不限定处理器701与存储器702之间的具体连接介质,图7中是以处理器701和存储器702之间通过总线700连接为例。总线700在图7中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线700可以分为地址总线、数据总线、控制总线等,为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。或者,处理器701也可以称为控制器,对于名称不做限制。
在本申请实施例中,存储器702存储有可被至少一个处理器701执行的指令,至少一个处理器701通过执行存储器702存储的指令,可以执行前文论述代码克隆检测方法。处理器701可以实现图5或6所示的装置中各个模块的功能。
其中,处理器701是该装置的控制中心,可以利用各种接口和线路连接整个该控制设备的各个部分,通过运行或执行存储在存储器702内的指令以及调用存储在存储器702内的数据,该装置的各种功能和处理数据,从而对该装置进行整体监控。
在一种可能的设计中,处理器701可包括一个或多个处理单元,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。在一些实施例中,处理器701和存储器702可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器701可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的代码克隆检测方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器702作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器702可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等。存储器702是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器702还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
通过对处理器701进行设计编程,可以将前述实施例中介绍的代码克隆检测方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行图2所示的实施例的代码克隆检测方法的步骤。如何对处理器701进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
基于同一发明构思,本申请实施例还提供一种存储介质,该存储介质存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行前文论述代码克隆检测方法。
在一些可能的实施方式中,本申请提供的代码克隆检测方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在装置上运行时,程序代码用于使该控制设备执行本说明书上述描述的根据本申请各种示例性实施方式的代码克隆检测方法中的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (20)
1.一种代码克隆检测方法,其特征在于,所述方法包括:
基于待检测代码,生成所述待检测代码的待检测代码属性图CPG;
在样本代码的样本CPG与所述待检测CPG之间满足第一相似度要求时,基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;
基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据。
2.如权利要求1所述的方法,其特征在于,所述满足第一相似度要求,包括:
在所述样本CPG与所述待检测CPG之间不存在图像重合部分时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求;或
在存在所述图像重合部分,且所述样本CPG在所述图像重合部分对应的第一方法与所述待检测CPG在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:
在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据。
4.如权利要求1所述的方法,其特征在于,所述基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,包括:
基于所述待检测CPG,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段、未使用变量和日志打印代码节点;
基于所述无用数据和所述待检测CPG中的方法节点生成所述待检测向量集合和所述待检测节点集合。
5.如权利要求1所述的方法,其特征在于,所述基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
分别将所述待检测向量集合与所述样本向量集合、所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;
确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据。
6.如权利要求1所述的方法,其特征在于,所述基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中存在N个样本方法与所述待检测代码中的第一待检测方法之间满足第二相似度要求时,基于所述N个样本方法的关联性,确定所述被克隆数据和所述克隆数据,其中,所述N为大于1的整数,所述第一待检测方法为所述待检测代码中的任一待检测方法。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中不存在所述N个样本方法时,确定所述样本代码中是否存在第一样本方法与所述待检测代码中M个待检测方法之间满足第三相似度要求,其中,所述M为大于1的整数;
若是,则基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据;
若否,则在所述待检测代码中确定出与所述第一样本方法满足第四相似度要求的第一目标待检测方法,并在所述第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第一目标待检测方法。
8.如权利要求6所述的方法,其特征在于,所述基于所述N个样本方法的关联性,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据,包括:
基于所述样本CPG,确定所述N个样本方法之间是否存在关联;
若是,则确定所述被克隆数据为所述N个样本方法,以及所述克隆数据为所述第一待检测方法;
若否,则在所述N个样本方法中确定出与所述第一待检测方法满足第五相似度要求的目标样本方法,并确定所述被克隆数据为所述目标样本方法,以及所述克隆数据为所述第一待检测方法。
9.如权利要求7所述的方法,其特征在于,所述基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据,包括:
基于所述待检测CPG,确定所述M个待检测方法之间是否存在关联;
若是,则确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述M个待检测方法;
若否,则在所述M个待检测方法中确定出与所述第一样本方法满足第六相似度要求的第二目标待检测方法,并在所述第二目标待检测方法与所述第一样本方法之间的相似代码行数大于所述预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第二目标待检测方法。
10.一种代码克隆检测装置,其特征在于,所述装置包括:
第一生成模块,用于基于待检测代码,生成所述待检测代码的待检测代码属性图CPG;
第二生成模块,用于在样本代码的样本CPG与所述待检测CPG之间满足第一相似度要求时,基于所述待检测CPG中的方法节点,生成待检测向量集合和待检测节点集合,其中,所述待检测向量集合中包括多个向量子集,一个向量子集表征一个方法节点中各个代码节点的执行顺序关系,所述待检测节点集合中包括多个节点子集,一个节点子集表征一个方法节点中各个无执行顺序关系的代码节点;
第一克隆检测模块,用于基于所述待检测向量集合、所述待检测节点集合、所述样本代码的样本向量集合和所述样本代码的样本节点集合,确定所述样本代码中的被克隆数据和所述待检测代码中的克隆数据。
11.如权利要求10所述的装置,其特征在于,所述满足第一相似度要求,包括:
在所述样本CPG与所述待检测CPG之间不存在图像重合部分时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求;或
在存在所述图像重合部分,且所述样本CPG在所述图像重合部分对应的第一方法与所述待检测CPG在所述图像重合部分对应的第二方法之间的相似度小于预设相似度时,确定所述样本CPG与所述待检测CPG之间满足第一相似度要求。
12.如权利要求11所述的装置,其特征在于,所述装置还包括:
第二克隆检测模块,用于在存在所述图像重合部分,且所述第一方法与所述第二方法之间的相似度大于或等于预设相似度时,确定所述第一方法为所述被克隆数据,以及所述第二方法为所述克隆数据。
13.如权利要求10所述的装置,其特征在于,所述第二生成模块具体用于:
基于所述待检测CPG,确定所述待检测代码中的无用数据,其中,所述无用数据至少包括未使用字段、未使用变量和日志打印代码节点;
基于所述无用数据和所述待检测CPG中的方法节点生成所述待检测向量集合和所述待检测节点集合。
14.如权利要求10所述的装置,其特征在于,所述第一克隆检测模块具体用于:
分别将所述待检测向量集合与所述样本向量集合、所述待检测节点集合与所述样本节点集合进行比对,得到所述待检测向量集合与所述样本向量集合之间的第一交集部分,以及所述待检测节点集合与所述样本节点集合之间的第二交集部分;
确定所述样本代码在所述第一交集部分和所述第二交集部分对应的第三方法为所述被克隆数据,以及所述待检测代码在所述第一交集部分和所述第二交集部分对应的第四方法为所述克隆数据。
15.如权利要求10所述的装置,其特征在于,所述第一克隆检测模块包括:
第一克隆检测单元,用于在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中存在N个样本方法与所述待检测代码中的第一待检测方法之间满足第二相似度要求时,基于所述N个样本方法的关联性,确定所述被克隆数据和所述克隆数据,其中,所述N为大于1的整数,所述第一待检测方法为所述待检测代码中的任一待检测方法。
16.如权利要求15所述的装置,其特征在于,所述第一克隆检测模块还包括:
确定单元,用于在基于所述待检测向量集合、所述待检测节点集合、所述样本向量集合和所述样本节点集合,确定出所述样本代码中不存在所述N个样本方法时,确定所述样本代码中是否存在第一样本方法与所述待检测代码中M个待检测方法之间满足第三相似度要求,其中,所述M为大于1的整数;
第二克隆检测单元,用于若存在所述第一样本方法与所述M个待检测方法之间满足所述第三相似度要求,则基于所述M个待检测方法的关联性,确定所述被克隆数据和所述克隆数据;
第三克隆检测单元,用于若不存在所述第一样本方法与所述M个待检测方法之间满足所述第三相似度要求,则在所述待检测代码中确定出与所述第一样本方法满足第四相似度要求的第一目标待检测方法,并在所述第一目标待检测方法与所述第一样本方法之间的相似代码行数大于预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第一目标待检测方法。
17.如权利要求15所述的装置,其特征在于,所述第一克隆检测单元具体用于:
基于所述样本CPG,确定所述N个样本方法之间是否存在关联;
若是,则确定所述被克隆数据为所述N个样本方法,以及所述克隆数据为所述第一待检测方法;若否,则在所述N个样本方法中确定出与所述第一待检测方法满足第五相似度要求的目标样本方法,并确定所述被克隆数据为所述目标样本方法,以及所述克隆数据为所述第一待检测方法。
18.如权利要求16所述的装置,其特征在于,所述第二克隆检测单元具体用于:
基于所述待检测CPG,确定所述M个待检测方法之间是否存在关联;
若是,则确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述M个待检测方法;
若否,则在所述M个待检测方法中确定出与所述第一样本方法满足第六相似度要求的第二目标待检测方法,并在所述第二目标待检测方法与所述第一样本方法之间的相似代码行数大于所述预设阈值时,确定所述被克隆数据为所述第一样本方法,以及所述克隆数据为所述第二目标待检测方法。
19.一种电子设备,其特征在于,包括:
存储器,用于存放计算机程序;
处理器,用于执行所述存储器上所存放的计算机程序时,实现权利要求1-9中任一项所述的方法步骤。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-9中任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311245437.7A CN117251208A (zh) | 2023-09-25 | 2023-09-25 | 一种代码克隆检测方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311245437.7A CN117251208A (zh) | 2023-09-25 | 2023-09-25 | 一种代码克隆检测方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117251208A true CN117251208A (zh) | 2023-12-19 |
Family
ID=89128926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311245437.7A Pending CN117251208A (zh) | 2023-09-25 | 2023-09-25 | 一种代码克隆检测方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117251208A (zh) |
-
2023
- 2023-09-25 CN CN202311245437.7A patent/CN117251208A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111338622B (zh) | 供应链代码识别方法、装置、服务器及可读存储介质 | |
CN112181430A (zh) | 代码变更统计方法、装置、电子设备及存储介质 | |
CN113890821A (zh) | 一种日志关联的方法、装置及电子设备 | |
CN111258905A (zh) | 缺陷定位方法、装置和电子设备及计算机可读存储介质 | |
CN114661423A (zh) | 集群配置检测方法、装置、计算机设备及存储介质 | |
CN111045670A (zh) | 一种二进制代码与源代码间复用关系的识别方法与装置 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
CN117251208A (zh) | 一种代码克隆检测方法、装置及电子设备 | |
CN109241511B (zh) | 一种电子报告的生成方法及设备 | |
CN108763053B (zh) | 埋点名称的生成方法及终端设备 | |
CN111552638B (zh) | 一种代码检测方法及装置 | |
CN113342647A (zh) | 一种测试数据的生成方法及装置 | |
CN113821251A (zh) | 基于人工智能的代码优化方法、装置、设备和存储介质 | |
CN112612471B (zh) | 代码处理方法、装置、设备及存储介质 | |
CN111581207B (zh) | Azkaban项目的文件生成方法、装置及终端设备 | |
CN111144086B (zh) | 一种日志格式化方法及装置、电子设备、存储介质 | |
CN117764703B (zh) | 一种申请业务行为的评估方法及装置 | |
CN113792247B (zh) | 基于代码特征生成功能流程图的方法、装置、设备和介质 | |
CN117891499A (zh) | 数据处理方法、装置、计算机可读存储介质及电子设备 | |
CN116974946A (zh) | 一种源代码分析方法、装置、电子设备及存储介质 | |
CN114386035A (zh) | 一种检测威胁数据的方法、装置及电子设备 | |
CN110990648A (zh) | 一种病毒查询方法、服务器及计算机可读存储介质 | |
CN113935029A (zh) | 一种基于导入类判定的同源性检测方法、装置及设备 | |
CN117435480A (zh) | 一种二进制文件检测方法、装置、电子设备及存储介质 | |
CN116432219A (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 |