CN117873905B - 一种代码同源检测的方法、装置、设备及介质 - Google Patents
一种代码同源检测的方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN117873905B CN117873905B CN202410269023.6A CN202410269023A CN117873905B CN 117873905 B CN117873905 B CN 117873905B CN 202410269023 A CN202410269023 A CN 202410269023A CN 117873905 B CN117873905 B CN 117873905B
- Authority
- CN
- China
- Prior art keywords
- code file
- target
- detected
- code
- preset
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 91
- 238000000034 method Methods 0.000 title claims abstract description 54
- 239000012634 fragment Substances 0.000 claims abstract description 109
- 238000004140 cleaning Methods 0.000 claims description 15
- 239000000470 constituent Substances 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 238000003860 storage Methods 0.000 claims description 4
- 238000004422 calculation algorithm Methods 0.000 description 18
- 238000004458 analytical method Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000000605 extraction Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000010367 cloning Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/35—Clustering; Classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Collating Specific Patterns (AREA)
Abstract
本申请实施例提供一种代码同源检测的方法、装置、设备及介质,该方法包括:获取待检测代码文件,并且按照待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件,其中,一个组成元素的类型对应一个规范值;在确定待检测代码文件不存在同源代码文件的情况下,将目标待检测代码文件拆分为多个代码片段,计算多个代码片段中的各代码片段相应的指纹;基于各代码片段相应的指纹,确定目标待检测代码文件中与预设代码文件同源的目标片段,以及目标片段在代码文件中的所处位置。通过本申请的一些实施例结合代码文件的文件级和片段级检测,能够提高代码同源检测的准确性,提高检测精度。
Description
技术领域
本申请实施例涉及代码检测领域,具体涉及一种代码同源检测的方法、装置、设备及介质。
背景技术
同源检测即同源性分析,指对应用程序或软件中的组成成分进行同源性分析,代码同源检测技术主要用于检测应用源代码中某个片段代码与预存的其他片段代码或开源代码存在的相同代码成分,因此也被称为代码克隆检测。相关技术中,建立源代码的特征提取后的知识库,然后基于该知识库对预设代码进行代码克隆检测,得到代码克隆检测结果。但是,相关技术中的检测方法仅能够对整体的代码进行同源性分析,不能够保证代码检测的准确性和检测精度。
因此,如何提高代码同源检测的准确性和精度成为需要解决的问题。
发明内容
本申请实施例提供一种代码同源检测的方法、装置、设备及介质,通过本申请的一些实施例至少能够结合代码文件的文件级和片段级检测,从而能够提高代码同源检测的准确性,提高检测精度。
第一方面,本申请提供了一种代码同源检测的方法,所述方法包括:获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件,其中,一个组成元素的类型对应一个规范值;在确定所述目标待检测代码文件不存在同源代码文件的情况下,将所述目标待检测代码文件拆分为多个代码片段,计算所述多个代码片段中的各代码片段相应的指纹,其中,所述各代码片段中包括M行代码,M为大于或等于1的整数;基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置。
因此,与相关技术中直接使用整体文件进行代码同源检测的方法不同的是,本申请实施例通过按照组成元素的类型替换为规范值,能够保证将不同语言的代码变换为相同的格式,并且,本申请通过将待检测代码文件拆分为多个代码片段,能够保证代码同源检测的精度。
结合第一方面,在本申请的一种实施方式中,所述基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置,包括:在代码片段指纹库中查找与所述各代码片段指纹相同的目标片段,并且提取所述目标片段所属的预设代码文件;根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置。
因此,本申请实施例通过查找与各代码片段指纹相同的目标片段,并且获取包含该目标片段的预设代码文件,能够保证先定位到与目标待检测代码文件同源的文件,之后确定同源代码的位置,能够提高同源检测的效率。
结合第一方面,在本申请的一种实施方式中,所述根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置,包括:提取所述预设代码文件和所述目标待检测代码文件中最长的公共字符串,获得第一字符串和第二字符串,其中,所述公共字符串为与所述目标片段相应的字符串;定位所述预设代码文件中与所述第一字符串相应代码的所处位置;并且,定位所述目标待检测代码文件中与所述第二字符串相应代码的所处位置。
因此,本申请实施例通过获取两个文件最长的公共字符串,并且确定位置,能够保证准确的对同源代码片段的位置进行定位,从而能够保证代码同源检测的精确性。
结合第一方面,在本申请的一种实施方式中,所述根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置,包括:获取所述预设代码文件中所有所述目标片段的开始行和结束行;并且,获取所述目标待检测代码文件中所有所述目标片段的开始行和结束行;将所述预设代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述预设代码文件中的位置;并且,将所述目标待检测代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述目标待检测代码文件中的位置。
因此,本申请实施例通过目标片段的开始行和结束行,确定目标片段在代码文件中的位置,能够实现片段级的代码检测,从而能够保证代码同源检测的精确性。
结合第一方面,在本申请的一种实施方式中,在所述获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件之后,所述方法还包括:在确定所述待检测代码文件不存在同源代码文件的情况下,获取所述目标待检测代码文件的行数,并且将所述行数的数值按照预设规则进行变更获得更新行数;在原始预设代码文件库中查找与所述更新行数相符的至少一个候选预设代码文件;计算各候选预设代码文件与所述目标待检测代码文件之间的相似度值,并且输出所述相似度值。
因此,本申请实施例通过变更目标待检测代码文件行数的方式,来查找相似的代码文件,能够提高代码检测的准确性,防止由于行数的出入而导致的匹配错误的情况发生。
结合第一方面,在本申请的一种实施方式中,在所述获取待检测代码文件,并且按照所述待检测代码文件中组成元素类型将各组成元素替换为规范值,获得目标待检测代码文件之后,所述方法还包括:将所述待检测代码文件的指纹与原始预设代码文件库中的各指纹进行比对;若指纹相同,则确定所述待检测代码文件存在同源代码文件,或者,若指纹均不相同,则确定所述待检测代码文件不存在同源代码文件。
因此,本申请实施例通过在进行片段级代码同源检测之前,对整体的同源代码文件进行判断,能够提高检测速度。
结合第一方面,在本申请的一种实施方式中,在所述获取待检测代码文件,并且按照所述待检测代码文件中组成元素类型将各组成元素替换为规范值,获得目标待检测代码文件之前,所述方法还包括:获取原始待检测代码文件,并且将所述原始待检测代码文件进行代码清洗获得所述待检测代码文件。
因此,本申请实施例通过对代码进行清洗,能够保证代码文件格式统一,从而能够提高匹配速度和准确度。
第二方面,本申请提供了一种代码同源检测的装置,所述装置包括:元素替换模块,被配置为获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件,其中,一个组成元素的类型对应一个规范值;片段拆分模块,被配置为在确定所述目标待检测代码文件不存在同源代码文件的情况下,将所述目标待检测代码文件拆分为多个代码片段,计算所述多个代码片段中的各代码片段相应的指纹,其中,所述各代码片段中包括M行代码,M为大于或等于1的整数;同源检测模块,被配置为基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置。
结合第二方面,在本申请的一种实施方式中,所述同源检测模块还被配置为:在代码片段指纹库中查找与所述各代码片段指纹相同的目标片段,并且提取所述目标片段所属的预设代码文件;根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置。
结合第二方面,在本申请的一种实施方式中,所述同源检测模块还被配置为:提取所述预设代码文件和所述目标待检测代码文件中最长的公共字符串,获得第一字符串和第二字符串,其中,所述公共字符串为与所述目标片段相应的字符串;定位所述预设代码文件中与所述第一字符串相应代码的所处位置;并且,定位所述目标待检测代码文件中与所述第二字符串相应代码的所处位置。
结合第二方面,在本申请的一种实施方式中,所述同源检测模块还被配置为:获取所述预设代码文件中所有所述目标片段的开始行和结束行;并且,获取所述目标待检测代码文件中所有所述目标片段的开始行和结束行;将所述预设代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述预设代码文件中的位置;并且,将所述目标待检测代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述目标待检测代码文件中的位置。
结合第二方面,在本申请的一种实施方式中,所述同源检测模块还被配置为:在确定所述目标待检测代码文件不存在同源代码文件的情况下,获取所述目标待检测代码文件的行数,并且将所述行数的数值按照预设规则进行变更获得更新行数;在原始预设代码文件库中查找与所述更新行数相符的至少一个候选预设代码文件;计算各候选预设代码文件与所述目标待检测代码文件之间的相似度值,并且输出所述相似度值。
结合第二方面,在本申请的一种实施方式中,所述同源检测模块还被配置为:将所述待检测代码文件的指纹与原始预设代码文件库中的各指纹进行比对;若指纹相同,则确定所述待检测代码文件存在同源代码文件,或者,若指纹均不相同,则确定所述待检测代码文件不存在同源代码文件。
结合第二方面,在本申请的一种实施方式中,所述元素替换模块还被配置为获取原始待检测代码文件,并且将所述原始待检测代码文件进行代码清洗获得所述待检测代码文件。
第三方面,本申请提供了一种电子设备,包括:处理器、存储器和总线;所述处理器通过所述总线与所述存储器相连,所述存储器存储有计算机程序,所述计算机程序由所述处理器执行时可实现如第一方面任意实施例所述的方法。
第四方面,本申请提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被执行时可实现如第一方面任意实施例所述的方法。
附图说明
图1为相关技术中示出的一种代码同源检测的方法流程图;
图2为本申请实施例示出的一种代码同源检测的场景组成示意图;
图3为本申请实施例示出的一种代码同源检测的方法流程图;
图4为本申请实施例示出的一种代码同源检测的装置组成示意图;
图5为本申请实施例示出的一种电子设备组成示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对附图中提供的本申请的实施例的详情描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护范围。
相关技术中,代码的克隆检测可以按照精度来划分,精度由低到高可将同源检测分为文件级、函数级和片段级。代码克隆(Code Clone),是指本地代码库或开源代码库中存在多个以上相同或者相似的源代码片段。使用克隆代码在代码开发过程中也是提高开发效率的一种方式,一定程度上帮助了软件系统的开发,但这种方式也可能意外引入代码片段本身存在的安全风险或授权许可风险等负面影响。随着软件在敏捷开发的模式下不断迭代,代码克隆造成代码库的不断膨胀,在未有良好的克隆管理的情况下,从而增加维护成本。软件缺陷也会因为代码克隆而在系统中被传播,降低了软件系统的可靠性。因此,运用代码克隆检测技术能够检测分析应用程序中引入的开源组件、分析开源组件是否有已知的安全漏洞、分析应用程序或开源组件声明的开源许可证、对源代码进行溯源分析等核心功能。
相关技术中的代码同源检测通常将开源项目的指纹与待检测代码的指纹进行比较,从而发现与待检测代码同源的开源代码。具体的,如图1所示,生成与开源项目相对应的指纹,之后将该指纹录入数据库,在获取到待检测代码之后,生成与该待检测代码相对应的指纹,使用该待检测代码相对应的指纹在查询数据库,若数据库中存在相同的指纹,则确定待检测代码存在同源代码文件,若数据库中不存在相同的指纹,则确定待检测代码不存在同源代码文件。
可以理解的是,上述相关技术由于检测粒度不够,导致降低了同源检测的准确性,存在无法对同源代码进行代码行数级别的精确定位的技术问题。只通过哈希值匹配确定是否同源只能确定改动不大,或者在预设改动规则内的相同代码,对于进行复用时进行较大修改的代码情况,无法判断。且通过哈希进行匹配的过程,不对真实代码进行分析,无法得到更准确的结果,例如,无法精确定位真实代码片段的具体行数。
本申请实施例可以应用于对待检测代码文件进行同源检测,确定同源代码片段在代码文件中的具体位置的场景,为了改善背景技术中的问题,在本申请的一些实施例中,按照组成元素的类型对待检测代码文件中的各组成元素进行统一替换,之后再按照拆分的多个代码片段确定目标片段在代码文件中的所处位置,能够通过对代码文件的清洗提高检测准确性,同时将文件级和代码片段级的检测逻辑进行结合,提供更精确的代码同源分析结果。
下面结合附图详细描述本申请实施例中的方法步骤。
图2提供了本申请一些实施例中的一种代码同源检测的场景组成示意图,该场景包括用户210和服务器220。具体的,用户210将待检测代码文件输入到服务器220中,服务器220在接收到待检测代码文件之后,对待检测代码文件进行同源检测,之后输出待检测代码文件的相似值和同源的代码片段在代码文件中的具体位置。
下面以服务器为例阐述本申请一些实施例提供的一种代码同源检测的方法具体实施过程。可以理解的是,本申请的执行主体可以是任何能够执行代码同源检测的设备,上述服务器仅为示例,本申请不限于此。
至少为了解决背景技术中的问题,如图3所示,本申请一些实施例提供了一种代码同源检测的方法,该方法包括:
S310,获取待检测代码文件,并且按照待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件。
在本申请的一种实施方式中,在S310之前,将原始待检测代码文件进行代码清洗获得待检测代码文件。具体的,代码清洗包括去除原始待检测代码文件的注释信息、去除输出类型的代码、对原始待检测代码文件中的字符串进行替换、替换原始待检测代码文件中的数字、大小写转换、去除空格和换行符以及去除特定语言本身的特殊内容。
其中,去除原始待检测代码文件的注释信息。由于注释信息与代码语义无关,所以需要根据不同语言分类,去除不同的注释信息,例如,不同语言对应的单行注释,多行注释,文档注释,多余的空白行等。
去除输出类型的代码。输出类型的代码可以是不影响代码语义,辅助调试生成日志目的的代码。例如,python类型代码中的“print”语句 ,java类型代码的“System.out.println”语句。
对原始待检测代码文件中的字符串进行替换。将字符串中包含的不影响语义的特殊代码或特殊符号,统一替换为确定的字符(例如,将所有字符串都替换为“str”)。例如,Java的SpringBoot项目中,可能出现使用字符串输出一个banner的情况,该banner中有很多特殊符号,若不进行替换,在指纹提取时,可能会被识别为运算符,导致指纹匹配过程中的准确性降低。
替换原始待检测代码文件中的数字。数字包括整数、浮点数以及二进制数字,为了在同源代码检测的过程中,保留真实语义,可以按照数据的类型替换为统一的值,例如,将所有的整数替换为1,浮点数替换为1.1。
大小写转换。为了避免由于对代码文件的大小写转换而产生的匹配不准确的问题,将代码文件统一转换为小写或大写,保证语义相同。
去除空格和换行符。由于代码本身和/或上述清洗步骤(例如,去除输出类型的代码的步骤)会存在空行,所以需要将空格和换行符进行删除。
去除特定语言本身的特殊内容。例如,python类型代码中的“__main__”代码块用于测试,对整体语义没有影响。
在经过清洗后的代码能够满足一些检测场景,但是为了支持对变量名、类型等修改的检测,进一步的提高检测过程的效率和准确率,还需要按照待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件。也就是说,用户在复制预设代码文件之后,可能将变量名或类名进行了修改,但是整体语义没有发生变化,该场景无法通过代码清洗识别,因此需要进一步的特征提取的处理,即进一步的将变量名、类名等组成元素替换为规范值,其中,一个类型的组成元素对应一个规范值。
具体的,对清洗后获得的待检测代码文件进行词法分析,将变量名、类名、方法名、运算符等替换成各自相应的规范值,不同语言对应的规范值不同,例如,java语言的类名统一替换为c,方法名统一替换为f,自定义变量名统一替换为z,引用的变量名统一替换为y。另外,为了防止检测过程中误报的情况发生,对不同语言定义的关键字进行保留,例如,以python为例,def用来定义方法予以保留,class用来定义类予以保留。
因此,通过上述对代码文件的清洗和规范值替换,能够实现不同语言代码的格式化和规范化,从而提高代码同源检测的效率和准确率。
之后,可以将上述处理之后的目标待检测代码文件,在不改变代码语义的情况下进行指纹提取,在对代码文件进行了指纹提取以后,整体代码最终变换为一个字符串,例如,“deffclasscy=v”,该字符串不仅能够用于进行更高级别的代码克隆检测(例如,代码片段级别的克隆检测),同时也实现了对原始待检测代码文件大小的压缩,解决了数百亿代码数据占用磁盘空间过大的问题。
可以理解的是,不仅针对用户的原始待检测代码文件进行上述的代码清洗和规范值替换的操作,还需要在进行代码同源检测之前,建立原始预设代码文件库时,将开源代码进行上述的代码清洗和规范值替换的操作,并且提取各开源代码的指纹,获得各开源代码相应的字符串,组成原始预设代码文件库,其中,原始预设代码文件库包括与文件相应的指纹。
需要说明的是,本申请中代码文件以及代码片段的指纹,均使用哈希值进行表征,也可以使用其他的方式来表征指纹,本申请对此不进行限制。
在本申请的一种实施方式中,在S320之前,需要先确定待检测代码文件是否存在同源代码文件。也就是说,首先,将待检测代码文件的指纹与原始预设代码文件库中的各指纹进行比对,然后,若指纹相同,则确定待检测代码文件存在同源代码文件,或者,若指纹均不相同,则确定待检测代码文件不存在同源代码文件。
具体的,在原始预设代码文件库中,存放了每个预设代码文件进行清洗和指纹提取之后的字符串哈希值,在检测时,对原始待检测代码文件做相同的代码清洗和指纹提取操作,再使用相同的哈希算法生成一个与目标待检测代码文件相应的哈希值。然后,使用目标待检测代码文件相应的哈希值去预设代码文件库中搜索和匹配是否存在相同的预设代码文件哈希值,如果存在,则说明存在与当前的目标待检测代码文件同源的预设代码文件,如果不存在,则确定当前的目标待检测代码文件不存在同源代码文件,进而执行后续的S320步骤或者相似度计算的步骤。
在本申请的一种实施方式中,在确定目标待检测代码文件不存在同源代码文件的情况下,分别执行两种类型的代码检测步骤,一种是对目标待检测代码文件的相似度进行计算,另一种是对目标待检测代码文件的同源代码片段(即目标片段)进行定位,获得该目标片段在代码文件中的具体位置,(同源代码片段进行定位的步骤包括S320以及S330)。最终获得的结果包括:目标待检测代码文件是否同源,同源相似度值以及同源的代码片段所处的位置。
对目标待检测代码文件的同源代码片段进行定位的步骤具体实施过程,如下所示:
首先执行S320,在确定目标待检测代码文件不存在同源代码文件的情况下,将目标待检测代码文件拆分为多个代码片段,计算多个代码片段中的各代码片段相应的指纹。
需要说明的是,各代码片段中包括M行代码,M为大于或等于1的整数。
也就是说,目标待检测代码文件不存在同源代码文件,可能存在目标待检测代码文件使用了预设代码文件的某个函数的情况,因此需要通过进行代码片段级的检测来对同源代码片段进行精确定位。
具体的,将目标待检测代码文件按照行数拆分为多个代码片段,可以使用滑窗对目标待检测代码文件进行拆分,例如,一个代码文件包括100行代码,一个滑窗中包括10行代码,步长为1行,即1-10行为一个代码片段,2-11行为一个代码片段,还可以直接按照行数维度对目标待检测代码文件进行拆分,例如,1-10行为一个代码片段,11-20行为一个代码片段。可以理解的是,一个代码片段中包括的行数越少,检测精度越高。之后,分别计算各代码片段的哈希值,作为与各代码片段相应的指纹,将一个目标待检测代码文件包括的多个代码片段中各代码片段相应的哈希值组成一个哈希值数组进行存储,同时,在预设代码文件库中的每一个预设代码文件也都对应一个哈希值数组,组成代码片段指纹库。
可以理解的是,预设代码文件库中可以包括开源的代码文件,还可以包括已经使用过的代码文件。也就是说,预设代码文件库中的代码文件可以根据实际的生产情况进行添加和设置,本申请不限于此。
然后执行S330,基于各代码片段相应的指纹,确定目标待检测代码文件中与预设代码文件同源的目标片段,以及目标片段在代码文件中的所处位置。
S3301,在代码片段指纹库中查找与各代码片段指纹相同的目标片段,并且提取目标片段所属的预设代码文件。
也就是说,在获得各代码片段的哈希值之后,将目标待检测代码文件的哈希值数组中的各哈希值与代码片段指纹库中的哈希值数组进行比较,如果存在任意一个代码片段的哈希值相同,则确定存在同源的目标片段,将目标片段所属的预设代码文件和目标待检测代码文件提取出来,之后进一步的确定目标片段在代码文件中具体位置。可以理解的是,本申请中的代码文件可以是预设代码文件和目标待检测代码文件的统称。
需要说明的是,本步骤提取的预设代码文件和目标待检测代码文件是通过代码压缩之后获得的字符串。
S3302,根据预设代码文件和目标待检测代码文件,确定目标片段在代码文件中的所处位置。
在S3302的一种实施方式中,首先,提取预设代码文件和目标待检测代码文件中最长的公共字符串,获得第一字符串和第二字符串。
可以理解的是,公共字符串为与目标片段相应的字符串。第一字符串与第二字符串相同。
也就是说,可以使用LCS公共子串算法分别提取预设代码文件和目标待检测代码文件中最长的公共字符串,获得与目标待检测代码文件相应的第一字符串和与预设代码文件相应的第二字符串。例如,由于代码文件均是按照行进行分割的,所以,预设代码文件“a行 b行 c行”和目标待检测代码文件“b 行c行 d行”的最长的公共字符串为“b行 c行”,获得的第一字符串和第二字符串即为“b行 c行”。
然后,定位预设代码文件中与第一字符串相应代码的所处位置;并且,定位目标待检测代码文件中与第二字符串相应代码的所处位置。
具体的,由于提取的第一字符串和第二字符串是从压缩后的代码文件相应的字符串中提取的,所以需要通过第一字符串和第二字符串定位到代码文件中真实的行数。例如,预设代码文件“a行 b行 c行”代表真实的行数为“1 2 3”,目标待检测代码文件“b 行c行 d行”代表真实的行数为“2 3 4”,那么,由于最长的公共字符串为“b行 c行”,所以,确定预设代码文件的2行、3行与目标待检测代码文件的2行、3行是同源的,最终展示同源代码片段“23 2 3”,其中,前两个数字表示在预设代码文件中的行数,后两个数字表示在目标待检测代码文件中的行数。
在S3302的另一种实施方式中,首先,获取预设代码文件中所有目标片段的开始行和结束行;并且,获取目标待检测代码文件中所有目标片段的开始行和结束行。
然后,将预设代码文件中所有目标片段的开始行和结束行进行合并,获得目标片段在所述预设代码文件中的位置;并且,将目标待检测代码文件中所有目标片段的开始行和结束行进行合并,获得目标片段在目标待检测代码文件中的位置。
在执行S3302之前,还需要建立两个字典,一个是第一字典,另一个是第二字典,其中,第一字典用于记录预设代码文件中的哈希值数组中每个哈希值相应代码的开始行和结束行,第二字典用于记录目标待检测代码文件中的哈希值数组中每个哈希值相应代码的开始行和结束行。例如,在通过滑窗的方式分割代码的情况下,字典中的开始行和结束行对应的就是各滑窗代码的开始行和结束行。
之后,在进行代码同源检测的过程中,在获得相同哈希值的所有目标片段之后,在字典中获得各代码片段的开始行和结束行,并且判断各开始行和结束行是否重叠,将重叠的行数进行合并。例如,目标待检测代码文件中所有目标片段的开始行和结束行包括:1-10行和2-12行,其中,2-10行是重叠的部分,所以需要将这部分进行合并,获得1-12行。
也就是说,分别在字典中获取到所有目标片段的开始行和结束行之后,分别将各自的行数进行合并,获得目标片段在目标待检测代码文件中的位置。
作为本申请一具体实施例,预设代码文件有{a:{1,2},b:{2,3}},其中,a为1行和2行组成的代码片段相应的哈希值,b为2行和3行组成的代码片段相应的哈希值。目标待检测代码文件有{a:{3,4},b:{4,5}},其中,a为3行和4行组成的代码片段相应的哈希值,b为4行和5行组成的代码片段相应的哈希值。那么进行哈希值匹配的过程中,a为相同的哈希值,b也为相同的哈希值,可以进一步提取得到预设代码文件的所有目标片段的开始行和结束行包括:“1,2”和“2,3”,将其合并获得“1 2 3”行,同时提取得到目标待检测代码文件的所有目标片段的开始行和结束行包括:“3,4”和“4,5”,将其合并获得“3 4 5”行,即预设代码文件的“1 2 3”行和目标待检测代码文件的“3 4 5”行哈希值是一样的,也就是相同的代码片段。
需要说明的是,上述实施例的匹配速度较快,在真实的检测中,该算法相较于第一种实施例的算法速度加快一个量级,例如,第一种算法可能需要检测几个小时,该算法只需要检测几分钟,即可获得结果,即该算法仅需要遍历两个哈希值的时间花销。
在S3302的再一种实施方式中,通过特定语言的代码片段提取方法确定相同的代码片段。例如,python语言的diff库提取出两个文本的相同部分,利用该工具提取相同的代码片段作为结果。
上文描述了对目标待检测代码文件的同源代码片段的所处位置进行定位的实施步骤,下文将描述对目标待检测代码文件的相似度进行计算的具体实施步骤。
首先,获取目标待检测代码文件的行数,并且将行数的数值按照预设规则进行变更获得更新行数。
具体的,目标待检测代码文件清洗后会记录代码行数,预设代码文件库中也会存储每一个预设代码文件的行数。由于目标待检测代码文件在用户引用时删除或者增加预设的行数,可能依然存在相似的代码文件,所以,为了提高代码同源检测的准确性,提高检测结果的丰富性,本申请将目标待检测代码文件的行数的数值按照预设规则进行变更获得更新行数,例如,预设规则为10行,目标待检测代码文件原本的行数为100行,那么就将匹配的行数更新为90-110行,即代码行数在90-110行之间的代码,仍然可能是相似的。
然后,在原始预设代码文件库中查找与更新行数相符的至少一个候选预设代码文件。
具体的,在确定了更新行数之后,通过搜索算法将满足更新行数范围的至少一个候选预设代码文件提取出来。
最后,计算各候选预设代码文件与目标待检测代码文件之间的相似度值,并且输出相似度值。
具体的,将至少一个候选预设代码文件中的各候选预设代码文件进行相似度分析,通过相似度算法计算目标待检测代码文件与各候选预设代码文件之间的相似度值,其中,可以将相似度值小于0.8的候选预设代码文件确定为不同源代码文件,将大于或等于0.8的候选预设代码文件确定为同源代码文件。
需要说明的是,相似度算法可以是winnowing算法。winnowing算法是一种用于文本去重的算法。它采用了哈希函数的思想,将文本分成若干个固定大小的窗口,通过哈希函数将每个窗口映射为一个唯一的哈希值,然后根据哈希值找到一组最小的哈希值,称为指纹,然后比较指纹的相似度来确定重复的文本。算法的优点在于它的效率高和精度高。它通过将文本划分为固定大小的窗口,避免了对整个文本进行哈希处理的开销,提高了算法的效率;另一方面,它通过选取最小的哈希值来作为文本的指纹,这意味着它只保留了文本中最具代表性的信息,从而提高了算法的精度。
将待比较的文本分为若干个固定大小的长度的窗口,对每个窗口进行哈希处理,得到一个哈希值。根据哈希值找到每个窗口的最小哈希值,作为窗口的指纹。对每个指纹进行比较,若相似度大于阈值,则判断为重复文本。重复文本可以选择保留一份或者全部删去。算法可用于检测文本抄袭、查找相似文本以及实现搜索引擎去重等应用。它具有较高的效率和精度,但是也存在一些限制,如当文本长度较大时,需要对文本进行分段处理,再进行哈希操作,否则会导致哈希值的冲突。另外,当文本存在较多的噪声或者小变化时,算法的精度也会降低。因此,在实际应用中需要根据具体情况选择合适的算法,并对其进行适当调整。
因此,本申请通过对代码进行多重清洗提升检测准确性,同时结合文件级和代码片段级的检测逻辑,以及对检测结果进行真实代码的位置定位过程,能提供更精确的代码同源分析结果,实现对同源代码进行代码行数级别的精确定位。最终输出的结果为:目标待检测代码文件是否同源,同源相似度值以及同源的代码片段所处的位置。
因此,本申请的有益效果包括:能够提升代码同源检测的细粒度,实现对同源代码进行代码行数级别的精确定位,同时可以实现对较大修改的代码情况进行判断,提升同源检测的准确性。另外通过结合文件级别、代码片段级别以及对真实代码的整体分析,能够得到更准确的结果,便于后续结果的分析。
上文描述了一种代码同源检测的方法的具体实施方式,下文将描述一种代码同源检测的装置。
如图4所示,本申请的一些实施例提供一种代码同源检测的装置400,该装置包括:元素替换模块410、片段拆分模块420以及同源检测模块430。
元素替换模块410,被配置为获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件,其中,一个组成元素的类型对应一个规范值;片段拆分模块420,被配置为在确定所述目标待检测代码文件不存在同源代码文件的情况下,将所述目标待检测代码文件拆分为多个代码片段,计算所述多个代码片段中的各代码片段相应的指纹,其中,所述各代码片段中包括M行代码,M为大于或等于1的整数;同源检测模块430,被配置为基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置。
在本申请的一种实施方式中,所述同源检测模块430还被配置为:在代码片段指纹库中查找与所述各代码片段指纹相同的目标片段,并且提取所述目标片段所属的预设代码文件;根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置。
在本申请的一种实施方式中,所述同源检测模块430还被配置为:提取所述预设代码文件和所述目标待检测代码文件中最长的公共字符串,获得第一字符串和第二字符串,其中,所述公共字符串为与所述目标片段相应的字符串;定位所述预设代码文件中与所述第一字符串相应代码的所处位置;并且,定位所述目标待检测代码文件中与所述第二字符串相应代码的所处位置。
在本申请的一种实施方式中,所述同源检测模块430还被配置为:获取所述预设代码文件中所有所述目标片段的开始行和结束行;并且,获取所述目标待检测代码文件中所有所述目标片段的开始行和结束行;将所述预设代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述预设代码文件中的位置;并且,将所述目标待检测代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述目标待检测代码文件中的位置。
在本申请的一种实施方式中,所述同源检测模块430还被配置为:在确定所述目标待检测代码文件不存在同源代码文件的情况下,获取所述目标待检测代码文件的行数,并且将所述行数的数值按照预设规则进行变更获得更新行数;在原始预设代码文件库中查找与所述更新行数相符的至少一个候选预设代码文件;计算各候选预设代码文件与所述目标待检测代码文件之间的相似度值,并且输出所述相似度值。
在本申请的一种实施方式中,所述同源检测模块430还被配置为:将所述待检测代码文件的指纹与原始预设代码文件库中的各指纹进行比对;若指纹相同,则确定所述待检测代码文件存在同源代码文件,或者,若指纹均不相同,则确定所述待检测代码文件不存在同源代码文件。
在本申请的一种实施方式中,所述元素替换模块410还被配置为获取原始待检测代码文件,并且将所述原始待检测代码文件进行代码清洗获得所述待检测代码文件。
在本申请实施例中,图4所示模块能够实现图1、图2和图3方法实施例中的各个过程。图4中的各个模块的操作和/或功能,分别为了实现图1、图2和图3中的方法实施例中的相应流程。具体可参见上述方法实施例中的描述,为避免重复,此处适当省略详细描述。
如图5所示,本申请实施例提供一种电子设备500,包括:处理器510、存储器520和总线530,所述处理器通过所述总线与所述存储器相连,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,用于实现如上述所有实施例中任一项所述的方法,具体可参见上述方法实施例中的描述,为避免重复,此处适当省略详细描述。
其中,总线用于实现这些组件直接的连接通信。其中,本申请实施例中处理器可以是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。存储器中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,可以执行上述实施例中所述的方法。
可以理解,图5所示的结构仅为示意,还可包括比图5中所示更多或者更少的组件,或者具有与图5所示不同的配置。图5中所示的各组件可以采用硬件、软件或其组合实现。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被服务器执行时实现上述所有实施方式中任一所述的方法,具体可参见上述方法实施例中的描述,为避免重复,此处适当省略详细描述。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (6)
1.一种代码同源检测的方法,其特征在于,所述方法包括:
获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件,其中,一个组成元素的类型对应一个规范值;
在确定所述目标待检测代码文件不存在同源代码文件的情况下,将所述目标待检测代码文件拆分为多个代码片段,计算所述多个代码片段中的各代码片段相应的指纹,其中,所述各代码片段中包括M行代码,M为大于或等于1的整数,其中,所述目标待检测代码文件不存在同源代码文件的情况,是通过使用所述目标待检测代码文件相应的哈希值去预设代码文件库中搜索和匹配是否存在相同的预设代码文件哈希值确定的;
基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置,其中,所述指纹用于表征压缩后的所述各代码片段以及代码文件;
所述基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置,包括:
在代码片段指纹库中查找与所述各代码片段指纹相同的目标片段,并且提取所述目标片段所属的预设代码文件;
根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置;
其中,所述根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置,包括:
提取所述预设代码文件和所述目标待检测代码文件中最长的公共字符串,获得第一字符串和第二字符串,其中,所述公共字符串为与所述目标片段相应的字符串;
定位所述预设代码文件中与所述第一字符串相应代码的所处行数;并且,定位所述目标待检测代码文件中与所述第二字符串相应代码的所处行数;
或者,所述根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置,包括:
获取所述预设代码文件中所有所述目标片段的开始行和结束行;并且,获取所述目标待检测代码文件中所有所述目标片段的开始行和结束行;
将所述预设代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述预设代码文件中的所在行数;并且,将所述目标待检测代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述目标待检测代码文件中的所在行数;
在所述获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件之后,所述方法还包括:
在确定所述目标待检测代码文件不存在同源代码文件的情况下,获取所述目标待检测代码文件的行数,并且将所述行数的数值按照预设规则进行变更获得更新行数;
在原始预设代码文件库中查找与所述更新行数相符的至少一个候选预设代码文件;
计算各候选预设代码文件与所述目标待检测代码文件之间的相似度值,并且输出所述相似度值。
2.根据权利要求1所述的方法,其特征在于,在所述获取待检测代码文件,并且按照所述待检测代码文件中组成元素类型将各组成元素替换为规范值,获得目标待检测代码文件之后,所述方法还包括:
将所述待检测代码文件的指纹与原始预设代码文件库中的各指纹进行比对;
若指纹相同,则确定所述待检测代码文件存在同源代码文件,或者,若指纹均不相同,则确定所述待检测代码文件不存在同源代码文件。
3.根据权利要求1所述的方法,其特征在于,在所述获取待检测代码文件,并且按照所述待检测代码文件中组成元素类型将各组成元素替换为规范值,获得目标待检测代码文件之前,所述方法还包括:
获取原始待检测代码文件,并且将所述原始待检测代码文件进行代码清洗获得所述待检测代码文件。
4.一种代码同源检测的装置,其特征在于,所述装置包括:
元素替换模块,被配置为获取待检测代码文件,并且按照所述待检测代码文件中组成元素的类型将各组成元素替换为规范值,获得目标待检测代码文件,其中,一个组成元素的类型对应一个规范值;
片段拆分模块,被配置为在确定所述目标待检测代码文件不存在同源代码文件的情况下,将所述目标待检测代码文件拆分为多个代码片段,计算所述多个代码片段中的各代码片段相应的指纹,其中,所述各代码片段中包括M行代码,M为大于或等于1的整数,其中,所述目标待检测代码文件不存在同源代码文件的情况,是通过使用所述目标待检测代码文件相应的哈希值去预设代码文件库中搜索和匹配是否存在相同的预设代码文件哈希值确定的;
同源检测模块,被配置为基于所述各代码片段相应的指纹,确定所述目标待检测代码文件中与预设代码文件同源的目标片段,以及所述目标片段在代码文件中的所处位置,其中,所述指纹用于表征压缩后的所述各代码片段以及代码文件;
所述同源检测模块还被配置为:
在代码片段指纹库中查找与所述各代码片段指纹相同的目标片段,并且提取所述目标片段所属的预设代码文件;
根据所述预设代码文件和所述目标待检测代码文件,确定所述目标片段在代码文件中的所处位置;
其中,所述同源检测模块还被配置为:
提取所述预设代码文件和所述目标待检测代码文件中最长的公共字符串,获得第一字符串和第二字符串,其中,所述公共字符串为与所述目标片段相应的字符串;
定位所述预设代码文件中与所述第一字符串相应代码的所处行数;并且,定位所述目标待检测代码文件中与所述第二字符串相应代码的所处行数;
或者,所述同源检测模块还被配置为:
获取所述预设代码文件中所有所述目标片段的开始行和结束行;并且,获取所述目标待检测代码文件中所有所述目标片段的开始行和结束行;
将所述预设代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述预设代码文件中的所在行数;并且,将所述目标待检测代码文件中所有所述目标片段的开始行和结束行进行合并,获得所述目标片段在所述目标待检测代码文件中的所在行数;
所述同源检测模块还被配置为:
在确定所述目标待检测代码文件不存在同源代码文件的情况下,获取所述目标待检测代码文件的行数,并且将所述行数的数值按照预设规则进行变更获得更新行数;
在原始预设代码文件库中查找与所述更新行数相符的至少一个候选预设代码文件;
计算各候选预设代码文件与所述目标待检测代码文件之间的相似度值,并且输出所述相似度值。
5.一种电子设备,其特征在于,包括:处理器、存储器和总线;
所述处理器通过所述总线与所述存储器相连,所述存储器存储有计算机程序,所述计算机程序由所述处理器执行时可实现如权利要求1-3任一项所述方法。
6.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被执行时可实现如权利要求1-3任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410269023.6A CN117873905B (zh) | 2024-03-11 | 2024-03-11 | 一种代码同源检测的方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410269023.6A CN117873905B (zh) | 2024-03-11 | 2024-03-11 | 一种代码同源检测的方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117873905A CN117873905A (zh) | 2024-04-12 |
CN117873905B true CN117873905B (zh) | 2024-05-31 |
Family
ID=90588681
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410269023.6A Active CN117873905B (zh) | 2024-03-11 | 2024-03-11 | 一种代码同源检测的方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117873905B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118170688B (zh) * | 2024-05-13 | 2024-08-06 | 中国电信股份有限公司 | 配置文件的检测方法及装置、存储介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN107688748A (zh) * | 2017-09-05 | 2018-02-13 | 中国人民解放军信息工程大学 | 基于漏洞指纹的脆弱性代码克隆检测方法及其装置 |
CN111930610A (zh) * | 2020-07-07 | 2020-11-13 | 北京白泽洞冥科技有限公司 | 软件同源性检测方法、装置、设备及存储介质 |
CN112651028A (zh) * | 2021-01-05 | 2021-04-13 | 西安工业大学 | 基于上下文语义和补丁验证的漏洞代码克隆检测方法 |
CN113901474A (zh) * | 2021-09-13 | 2022-01-07 | 四川大学 | 一种基于函数级代码相似性的漏洞检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8307351B2 (en) * | 2009-03-18 | 2012-11-06 | Oracle International Corporation | System and method for performing code provenance review in a software due diligence system |
-
2024
- 2024-03-11 CN CN202410269023.6A patent/CN117873905B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN107688748A (zh) * | 2017-09-05 | 2018-02-13 | 中国人民解放军信息工程大学 | 基于漏洞指纹的脆弱性代码克隆检测方法及其装置 |
CN111930610A (zh) * | 2020-07-07 | 2020-11-13 | 北京白泽洞冥科技有限公司 | 软件同源性检测方法、装置、设备及存储介质 |
CN112651028A (zh) * | 2021-01-05 | 2021-04-13 | 西安工业大学 | 基于上下文语义和补丁验证的漏洞代码克隆检测方法 |
CN113901474A (zh) * | 2021-09-13 | 2022-01-07 | 四川大学 | 一种基于函数级代码相似性的漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117873905A (zh) | 2024-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110888849B (zh) | 一种在线日志解析方法、系统及其电子终端设备 | |
CN117873905B (zh) | 一种代码同源检测的方法、装置、设备及介质 | |
RU2474870C1 (ru) | Способ автоматизированного анализа текстовых документов | |
CN109445844B (zh) | 基于哈希值的代码克隆检测方法、电子设备、存储介质 | |
CN111133396B (zh) | 生产设备监视装置、生产设备监视方法以及记录介质 | |
CN113901474A (zh) | 一种基于函数级代码相似性的漏洞检测方法 | |
CN116841779A (zh) | 异常日志检测方法、装置、电子设备和可读存储介质 | |
CN116107834A (zh) | 日志异常检测方法、装置、设备及存储介质 | |
CN118094432A (zh) | 工业互联网异常行为检测方法及系统 | |
CN117827952A (zh) | 一种数据关联分析方法、装置、设备及介质 | |
CN115221013B (zh) | 一种日志模式的确定方法、装置及设备 | |
CN112925874B (zh) | 基于案例标记的相似代码搜索方法及系统 | |
CN113535458B (zh) | 异常误报的处理方法及装置、存储介质、终端 | |
CN115373982A (zh) | 基于人工智能的测试报告分析方法、装置、设备及介质 | |
CN114816518A (zh) | 基于simhash的源代码中开源成分筛选识别方法及系统 | |
CN113343051B (zh) | 一种异常sql检测模型构建方法及检测方法 | |
CN112115362B (zh) | 一种基于相似代码识别的编程信息推荐方法及装置 | |
CN111859896B (zh) | 配方文档检测方法、装置、计算机可读介质及电子设备 | |
CN114117047A (zh) | 一种基于c4.5算法对非法语音进行分类的方法及系统 | |
CN112395865A (zh) | 报关单校验方法及装置 | |
CN114564472B (zh) | 元数据扩充方法以及存储介质、电子设备 | |
CN112559195B (zh) | 数据库死锁的检测方法、装置、测试终端及介质 | |
CN112686055B (zh) | 语义识别方法、装置、电子设备和存储介质 | |
CN116401334A (zh) | 数据指标管理方法、装置、电子设备和可读存储介质 | |
CN117931275A (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 |