CN113722238A - 一种实现对源码文件快速开源成分检测的方法和系统 - Google Patents

一种实现对源码文件快速开源成分检测的方法和系统 Download PDF

Info

Publication number
CN113722238A
CN113722238A CN202111279629.0A CN202111279629A CN113722238A CN 113722238 A CN113722238 A CN 113722238A CN 202111279629 A CN202111279629 A CN 202111279629A CN 113722238 A CN113722238 A CN 113722238A
Authority
CN
China
Prior art keywords
source code
code file
simhash
target
auxiliary
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
Application number
CN202111279629.0A
Other languages
English (en)
Other versions
CN113722238B (zh
Inventor
张涛
陈钟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN202111279629.0A priority Critical patent/CN113722238B/zh
Publication of CN113722238A publication Critical patent/CN113722238A/zh
Application granted granted Critical
Publication of CN113722238B publication Critical patent/CN113722238B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Collating Specific Patterns (AREA)
  • Storage Device Security (AREA)

Abstract

本申请公开的实施例提供了一种实现对源码文件快速开源成分检测的方法和系统。其中,该方法包括:根据目标源码文件生成第一Simhash值,将其与指纹库中的第二Simhash值匹配分析,得到其中的第三Simhash值;获取全部或部分的第三Simhash值对应的源码库源码文件(即辅助源码文件),以及根据辅助源码文件对目标源码文件进行代码比较或NLP文本相似度分析。通过基于Simhash算法的快速匹配分析,上述方案无疑将大幅度提高开源成分检测效率,而作为对弥补Simhash算法快速匹配可能造成的误报,上述方案中也通过相应的措施在较低开销下进行了纠正,确保了相关同源成分检测的精确度。

Description

一种实现对源码文件快速开源成分检测的方法和系统
技术领域
本申请公开的实施例主要涉及软件成分分析(SCA)安全测试技术领域,且更具体地,涉及一种实现对源码文件快速开源成分检测的方法和系统。
背景技术
对于软件开发实体而言,代码复用无疑是能够对软件开发效能产生重大影响的要素。一般来说,狭义的代码复用,往往是指通过将重复的代码提炼成可复用的代码,例如,具体形式可以是一个方法、一套模板或一个框架等,以尽可能避免重复编码代码,进而提高编码效率。然而,随着第三方库和组件等的开源,广义的代码复用,还包括:引入第三方开源库、开源组件到开发的软件项目中;其中,上述引入形式具体则可以是:复制粘贴已有的代码片段、源码文件等;复制粘贴已有的代码片段、源码文件等并进行修改;使用开发框架;复用设计模式等。
然而,开源成分的引入虽大大提高了软件开发效率、简化了开发过程;但由于引入开源成分,就不免可能引入开源成分可能潜藏的漏洞,造成安全问题,以及由于一些开源成分中所附的计算机软件许可证中规定的法律义务(和现实中因人为疏失履行不到位等原因)、许可证间的冲突等,造成知识产权合规问题。
针对上述问题,虽然行业内已经出现了一些SCA工具支持开源成分的分析,以在一定程度解决上述重复代码(也称代码克隆)问题造成的安全隐患和知识产权合规问题。但是,大多数SCA工具,主要是基于软件项目的特征文件分析进行开源成分识别的,检测粒度粗糙,存在不小误差;而随着开发软件的规模越来越大,在代码层面进行人工比较检测显然更是不现实的。如何实现对源码文件等的快速开源成分检测,显然已经成为了亟待解决的问题。
发明内容
根据本申请公开的实施例,提供了一种实现对源码文件快速开源成分检测的方法和系统,以实现对目标源码文件的快速开源成分分析,以及在此基础上自动识别和纠正前面快速开源成分分析可能导致的误差,进而确保相关快速开源成分检测的精确度。
在本公开的第一方面中,提供了一种实现对源码文件快速开源成分检测的方法。该方法包括:对目标源码文件Simhash处理,并基于指纹库进行快速匹配,以实现初步的同源成分分析和获取目标源码文件对应的第三Simhash值;以及对快速匹配得到第三Simhash值的,执行进一步的细部检验,以实现快速且准确的开源成分检测。其中,所述的Simhash处理及快速匹配,具体包括:定义一个Simhash函数h 1 ,基于Simhash函数h 1 ,根据目标源码文件的代码哈希计算得到第一Simhash值;其中,所述的Simhash函数h 1 ,是指任意一种的Simhash函数;以及,将对目标源码文件的代码哈希计算得到的第一Simhash值与指纹库中的第二Simhash值逐一比对、匹配分析,获取与第一Simhash值的相似度在第一阈值内的第二Simhash值,也即目标源码文件对应的第三Simhash值;其中,指纹库中的第二Simhash值,是指基于Simhash函数h 1 分别对源码库中源码文件的代码哈希计算得到的、并存储于指纹库的Simhash值;所述的源码库,是指收集源码文件,并分类存储所收集的源码文件而生成的源代码仓库。另外,对于目标源码文件,若未快速匹配到第三Simhash值,则判定源码库中无与目标源码文件同源的源码文件。而当快速匹配得到第三Simhash值时的进一步的细部检验,则具体包括:获取全部或部分的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件;将所述辅助源码文件与目标源码文件一起进行代码比较或NLP文本相似度分析,根据预设相似度要求得到细部同源分析结果。
在本公开的第二方面中,提供了一种用于实现对源码文件快速开源成分检测的系统,该系统包括:匹配器,以及检验器;其中,匹配器,用于对目标源码文件执行快速匹配以实现初步的同源成分分析,以及特别是将快速匹配到第三Simhash值的目标源码文件转交给检验器以作进一步的细部检验;而检验器,用于对匹配器转交的相关目标源码文件在匹配器初步分析结果的基础上(例如,目标源码文件对应的第三Simhash值等)执行进一步的细部检验;具体来说,上述的匹配器被配置得包括:能够通过一个确定的Simhash函数h 1 对目标源码文件的代码哈希处理得到第一Simhash值、以及将所述第一Simhash值与指纹库中的第二Simhash值逐一比对、匹配分析,以获取所述第三Simhash值和转交给检验器作进一步的细部检验;而对于若未快速匹配到所述第三Simhash值的,则判定源码库中无与目标源码文件同源的源码文件;其中,所述的Simhash函数h 1 ,是指任意一种的Simhash函数;所述的第二Simhash值,是指基于Simhash函数h 1 分别对源码库中源码文件的代码哈希计算得到的、并存储于指纹库的Simhash值;所述的源码库,是指收集源码文件,并分类存储所收集的源码文件而生成的源代码仓库;所述的第三Simhash值,是指与目标源码文件的第一Simhash值的相似度在第一阈值内的第二Simhash值;上述的检验器则主要是:能够根据匹配器快速匹配到的第三Simhash值获取用于目标源码文件细部检验的辅助源码文件,以及据此对目标源码文件执行细部检验;其被配置得具体包括:能够根据匹配器快速匹配到和转交的第三Simhash值的全部或部分获取其在源码库中对应的源码文件作为目标源码文件的辅助源码文件,以及将所述辅助源码文件与目标源码文件一起进行代码比较或NLP文本相似度分析和根据预设相似度要求得到细部同源分析结果。
在本公开的第三方面中,提供了一种用于实现对源码文件快速开源成分检测的系统。该系统包括:至少一个处理器,和至少一个处理器耦合的存储器,以及存储在存储器中的计算机程序;其中的处理器执行所述计算机程序,能够实现第一方面述及的对源码文件快速开源成分检测的方法。
在本公开的第四方面中,提供了一种计算机可读存储介质。该介质上存储有软件成分分析(SCA)相关的计算机指令(具体来说,是指源码文件开源成分检测相关的计算机指令);该计算机指令在被计算机处理器执行时能够实现第一方面述及的对源码文件快速开源成分检测的方法。
在本公开的第五方面中,提供了一种计算机程序产品。该程序产品包括计算机程序,该计算机程序在被计算机处理器执行时能够实现第一方面述及的对源码文件快速开源成分检测的方法。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素,其中:
图1示出了根据本公开的实施例的对源码文件快速开源成分检测的过程的示意图;
图2示出了根据本公开内容示例性实现的一种用于实现对源码文件快速开源成分检测的系统的框图;
图3示出了能够实施本公开的多个实施例的计算设备的框图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
在本公开的实施例的描述中技术术语“目标源码文件”,是指任一的作为待检测对象的源码文件。在本公开的实施例的具体实现过程中,待检测的“目标源码文件”,一般是以置入软件包中以整个软件包提交检测的,在检测时被解析出来作为独立的检测对象被检测的。其中,“目标源码文件”即便是属于未完工的软件项目/产品,其也可通过开发/测试阶段的相关插件打包成软件包提交检测的。
随着基于开源代码复用的软件模式的广泛应用,虽然软件开发者实体的开发效能获得了相当大的提升,但是该模式最直接出现的重复代码(也称代码克隆)问题,因开源代码不在引入其的软件开发者实体的控制中(例如,引入开源代码的软件开发者实体往往不关注其中的代码内容、相关的代码维护也是有开源代码的作者提供而软件开发者实体只跟进了解相关更新摘要甚至忽视更新等),进而导致漏洞安全隐患和知识产权合规问题。
根据本公开的实施例,提出了一种能够实现对源码文件快速开源成分检测的方案。在该方案中,获取目标源码文件,根据目标源码文件的代码得到其对应的第一Simhash值,将其与指纹库中的第二Simhash值逐一比对、匹配分析,获取与第一Simhash值的相似度在第一阈值内的第二Simhash值,即目标源码文件的第三Simhash值,进而获取全部或部分的第三Simhash值对应的源码库源码文件,作为辅助源码文件,以及根据所述辅助源码文件对目标源码文件进行代码比较或NLP文本相似度分析。通过基于Simhash算法的快速匹配分析,上述方案无疑将能够大幅度提高开源成分检测效率,而作为对弥补Simhash算法快速匹配可能造成的误报,上述方案中也通过相应的细部检验措施(即基于辅助源码文件的代码比较或NLP文本相似度分析)在较低开销下进行了纠正,确保了相关同源成分检测的精确度。
以下将参照附图来具体描述本公开的实施例。图1示出了根据本公开的实施例的对源码文件快速开源成分检测的过程100的示意图。如图1所示,上述的用于实现对源码文件快速开源成分检测的过程100,主要包括:在框101的获取目标源码文件及计算第一Simhash值,在框102的快速匹配,以及在框103的细部检验。在框101,获取目标源码文件,对目标源码文件的代码进行Simhash处理,得到第一Simhash值;其实现过程,具体地,可以是:选择一个确定的Simhash函数(所述Simhash函数,可以是任一的Simhash函数),基于该Simhash函数对目标源码文件的全部代码进行处理,计算其哈希值,得到目标源码文件的第一Simhash值。在框102,基于指纹库,将第一Simhash值与之进行快速匹配,已实现初步的同源成分分析,以及获取目标源码文件可能对应的第三Simhash值;其实现过程,具体地,则可以是:将对目标源码文件的第一Simhash值与指纹库中的每个第二Simhash值逐一比对、匹配分析,获取与第一Simhash值的相似度在第一阈值内的第二Simhash值,也即目标源码文件对应的第三Simhash值。结合以上,显然,对于未快速匹配到第三Simhash值的目标源码文件,则显然可以认为源码库中无与之同源的源码文件;而对快速匹配得到第三Simhash值的,则利用快速匹配到的所述第三Simhash值,执行后续的、进一步的细部检验;截止到此,即可以视作实现初步的同源成分分析。而在框103,则是对快速匹配得到第三Simhash值的目标源码文件的进一步的细部检验;而其实现过程,具体地,可以是:获取全部或部分的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件(对于目标源码文件,通常会获取到多个辅助源码文件);进而,将所述辅助源码文件与目标源码文件一起,逐一地将各个辅助源码文件与目标源码文件分别进行代码比较,或者是基于NLP文本相似度分析,确定所述辅助源码文件与目标源码文件相似度,并在具体的预设相似度要求,优先获得相应的细部同源分析结果。
在一些实施例中,为控制细部检测的开销在可接受的范围,在框102,相应地预设一个确定的较小的正整数M以保证所述细部检测在低开销的水平;而当快速匹配得到N个第三Simhash值时(其中,N为任一的正整数),则:若N≥M,获取所述N个第三Simhash值中匹配度最高的M个在源码库中对应的源码文件,作为辅助源码文件,以参与后续的相关细部检验,并减小所述细部检验的开销;若N≤M,获取全部所述的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件,以参与后续的相关细部检验。
在一些实施例中,在框102,若快速匹配到的第三Simhash值中有匹配度为100%的第三Simhash值,则直接可认为所述匹配度为100%的第三Simhash值在源码库中对应的源码文件与目标源码文件的代码内容是完全一致的,即二者同源,故而无需进一步的细部检验。
在一些实施例中,在框102,基于指纹库对第一Simhash值执行的所述快速匹配,其实现过程,更具体地,可以是:分别计算所述第一Simhash值与指纹库中的各个第二Simhash值之间的海明距离;根据所述海明距离和预设的海明距离阈值,判断二者的相似程度,获取目标源码文件对应的第三Simhash值;其中,所述相似度的第一阈值,具体是指所述的预设的海明距离阈值。
在一些实施例中,为了最大化提高细部检验的精确度,在框103,所述的细部检验采用NLP文本相似度分析。所述的细部检验过程中的NLP文本相似度分析,其实现过程,具体地,可以是:基于Minhash算法,对目标源码文件与辅助源码文件间相似度进行分析;而上述的基于Minhash算法的相似度分析,其实现过程,更具体地,可以是:根据目标源码文件和辅助源码文件的代码分别生成目标源码文件、辅助源码文件各自对应的签名集合;并根据上述的各个集合构建一个签名集合的特征矩阵;以及通过一个确定的Minhash函数(所述Minhash函数,可以是任一的Minhash函数)和所述特征矩阵估算目标源码文件、辅助源码文件的签名集合间的Jaccard相似度,进而据此得到所需的目标源码文件与辅助源码文件间相似度结果(以及以据此得到满足预设相似度要求的细部同源分析结果)。其中,所述的特征矩阵,将目标源码文件、各个辅助源码文件的签名集合为行或列,构建所述特征矩阵。举例来说,一般的根据惯常设定构建的特征矩阵中,具体地以目标源码文件、各个辅助源码文件签名集合为列。而上述估算目标源码文件、辅助源码文件的签名集合间的Jaccard相似度的实现过程,往往是基于所述的Minhash函数对处理后的特征矩阵进行相应的计算进而获得所述的Jaccard相似度。例如,对于前面示例中具体描述的以签名集合为列的特征矩阵,执行相应的处理(即行打乱处理),并在(每次)行打乱处理后利用所述Minhash函数计算各列的最小哈希值,进而基于此估算所述第一源码文件与第三源码文件的签名集合间的Jaccard相似度,确定所述第一源码文件与各个第三源码文件的相似性以据此细部检验、确定是否同源。此外,在一些实施例中,对其中的各源码文件的代码进行各种哈希计算时,还可以是:在哈希计算前,对源码文件的代码文本进行分词处理,生成例如上述签名集合的形式,以提高识别效率和精确度。
在一些实施例中,基于签名集合特征矩阵和所述Minhash函数估算相似度以实现细部检验的过程,具体地,可以是:对所述特征矩阵进行相应的打乱处理(例如,对于以签名集合为列的特征矩阵,进行行打乱处理),经过多次(随机)打乱处理和基于所述Minhash函数计算各次处理的最小哈希值,得到目标源码文件与辅助源码文件的最小哈希签名矩阵;基于所述最小哈希签名矩阵,分别估算目标源码文件与特征矩阵中其他辅助源码文件的签名集合间的Jaccard相似度,以实现细部检验及进而分别确定目标源码文件是否与各个辅助源码文件同源。以上的基于签名集合特征矩阵和所述Minhash函数估算相似度以实现细部检验的过程,具体地,还可以是:对所述特征矩阵进行相应的打乱处理(同上,例如,对于以签名集合为列的特征矩阵,进行行打乱处理),过多次(随机)打乱处理和相应地基于所述Minhash函数计算目标源码文件、辅助源码文件的签名集合的最小哈希值,生成最小哈希签名矩阵;基于所述最小哈希签名矩阵,采用LSH算法确保仅对高相似度的签名集合间的每对值进行处理:即直接忽略不是候选对的签名集合,而仅筛选出相似度可能很高的一些候选对,进而通过候选对比较等方式快速找出其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件;其中,若确有其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,则应视为所述辅助源码文件与目标源码文件的代码相似,应判定所述辅助源码文件与目标源码文件同源;若无其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,则应判定源码库中无与目标源码文件同源的辅助源码文件。
在一些实施例中,在框103,在基于Minhash算法的相似度分析的过程中,在生成目标源码文件、辅助源码文件的签名集合时,还可以是:根据编程经验设定关键词词典,基于关键词词典对目标源码文件、辅助源码文件的代码进行处理,以获得高效且精确分词的目标源码文件、辅助源码文件的签名集合。
基于如上面所述的方式,通过快速匹配以及进一步的细部检验,无疑将能够实现对目标源码文件的快速开源成分分析,以及在此基础上自动识别和纠正前面快速开源成分分析可能导致的误差,进而确保相关快速开源成分检测的精确度。
图2示出了根据本公开实施例的用于实现对源码文件快速开源成分检测的系统200的框图。如图2所示,系统200,包括:匹配器210和检验器220;其中,匹配器210,用于对目标源码文件执行快速匹配;检验器220,用于对相关目标源码文件执行细部检验。在一些实施例中,匹配器210,可以是:被配置得能够通过一个确定的Simhash函数(其可以是指任一的Simhash函数)对目标源码文件的代码哈希处理得到第一Simhash值、以及将所述第一Simhash值与指纹库中的第二Simhash值进行快速匹配以获取第三Simhash值用于相关开源成分分析;而若未匹配到第三Simhash值,则判定源码库中无与目标源码文件同源的源码文件;其中,指纹库中的第二Simhash值,是指基于所述Simhash函数分别对源码库中的每个源码文件的代码哈希计算得到的、并存储于指纹库的相应的Simhash值;所述的源码库,是指收集源码文件,并分类存储所收集的源码文件而生成的源代码仓库;所述的第三Simhash值,是指与目标源码文件的第一Simhash值的相似度在第一阈值内的第二Simhash值;所述的快速匹配,具体包括:将所述第一Simhash值与指纹库中的第二Simhash值逐一比对、匹配分析,以获取所述第三Simhash值,并交检验器220作进一步的细部检验。检验器220,可以是:被配置得能够根据匹配器210快速匹配到的第三Simhash值获取辅助源码文件、以及据此对所述第三Simhash值对应的目标源码文件进行细部检验;其中,所述的细部检验,具体包括:根据快速匹配到的第三Simhash值的全部或部分获取其在源码库中对应的源码文件,作为所述辅助源码文件;将所述辅助源码文件与目标源码文件一起进行代码比较或NLP文本相似度分析,根据预设相似度要求得到细部同源分析结果。
在一些实施例中,匹配器210为控制细部检测的开销在可接受的范围,其被配置得根据预设的控制数在快速匹配得到的第三Simhash值中(视快速匹配得到的第三Simhash值的数量)获取相应数量的辅助源码文件,用以参与后续的相关细部检验;其中,其具体地被配置得包括:根据控制数M(即一个预设的确定的、控制细部检验在低开销的正整数)和快速匹配得到第三Simhash值的数量N(N为任一的正整数,不同的快速匹配过程,其N的值可能不同),获取所述的辅助源码文件;其中,若N≥M,获取所述N个第三Simhash值中匹配度最高的M个在源码库中对应的源码文件,作为辅助源码文件;若N≤M,获取全部所述的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件。
在一些实施例中,若匹配器210快速匹配到的第三Simhash值中有匹配度为100%的,则匹配器被配置得直接据此判定目标源码文件与所述匹配度为100%的第三Simhash值在源码库中对应的源码文件同源,而不会执行交检验器220作进一步的细部检验的操作。
在一些实施例中,匹配器210被配置得在执行快速匹配时,具体地,可以是:分别计算所述第一Simhash值与指纹库中的各个第二Simhash值之间的海明距离;根据所述海明距离和预设的海明距离阈值,判断二者的相似程度,获取目标源码文件对应的第三Simhash值;其中,所述相似度的第一阈值,具体是指所述的预设的海明距离阈值。
在一些实施例中,为了最大化提高细部检验的精确度,检验器220被配置得采用NLP文本相似度分析实现细部检验。其中,所述的细部检验过程中的NLP文本相似度分析,可以是基于Minhash算法的目标源码文件与辅助源码文件间相似度分析。而所述的基于Minhash算法的目标源码文件与辅助源码文件间相似度分析,在检验器220中其过程被配置得可以是:根据目标源码文件和辅助源码文件的代码分别生成目标源码文件、辅助源码文件各自对应的签名集合并据此构建一个签名集合的特征矩阵,和通过一个确定的Minhash函数(所述Minhash函数,可以是任一的Minhash函数)和所述特征矩阵估算目标源码文件、辅助源码文件的签名集合间的Jaccard相似度,以据此得到所需的目标源码文件与辅助源码文件间相似度结果(以及以据此得到满足预设相似度要求的细部同源分析结果)。其中,所述的特征矩阵,将目标源码文件、各个辅助源码文件的签名集合为行或列,构建所述特征矩阵(同上,一般的示例中,根据惯例,通常以目标源码文件、各个辅助源码文件签名集合为所述特征矩阵的列)。基于所述的Minhash函数对处理后的特征矩阵进行相应的计算则可以得到目标源码文件、辅助源码文件的签名集合间的Jaccard相似度,进而实现细部检验。例如,对于前面示例中具体描述的以签名集合为列的特征矩阵,执行相应的处理(即行打乱处理),并在(每次)行打乱处理后利用所述Minhash函数计算各列的最小哈希值,进而基于此估算所述第一源码文件与第三源码文件的签名集合间的Jaccard相似度,确定所述第一源码文件与各个第三源码文件的相似性以据此细部检验、确定是否同源。此外,在一些实施例中,在匹配器210、检验器220对其中的各源码文件的代码进行各种哈希计算时,还可以是:在哈希计算前,对源码文件的代码文本进行分词处理,生成例如上述签名集合的形式,以提高识别效率和精确度。
在一些实施例中,在检验器220中,基于签名集合特征矩阵和所述Minhash函数估算相似度以实现细部检验的过程,具体地,可以是,被配置得包括:对所述特征矩阵进行相应的打乱处理(例如,对于以签名集合为列的特征矩阵,进行行打乱处理),经过多次(随机)打乱处理和基于所述Minhash函数计算各次处理的最小哈希值,得到目标源码文件与辅助源码文件的最小哈希签名矩阵;基于所述最小哈希签名矩阵,分别估算目标源码文件与特征矩阵中其他辅助源码文件的签名集合间的Jaccard相似度,以实现细部检验及进而分别确定目标源码文件是否与各个辅助源码文件同源。另外,检验器220还可以是被配置得使基于签名集合特征矩阵和所述Minhash函数估算相似度以实现细部检验的过程,具体包括:对所述特征矩阵进行相应的打乱处理(同上,例如,对于以签名集合为列的特征矩阵,进行行打乱处理),过多次(随机)打乱处理和相应地基于所述Minhash函数计算目标源码文件、辅助源码文件的签名集合的最小哈希值,生成最小哈希签名矩阵;基于所述最小哈希签名矩阵,采用LSH算法确保仅对高相似度的签名集合间的每对值进行处理:即直接忽略不是候选对的签名集合,而仅筛选出相似度可能很高的一些候选对,进而通过候选对比较等方式快速找出其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件;其中,若确有其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,则应视为所述辅助源码文件与目标源码文件的代码相似,应判定所述辅助源码文件与目标源码文件同源;若无其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,则应判定源码库中无与目标源码文件同源的辅助源码文件。
在一些实施例中,所述系统还包括设置关键词词典(一般地,根据编程检验设置);并使检验器220在根据目标源码文件、辅助源码文件的代码生成所述签名集合的过程中,被配置得能够基于关键词词典对目标源码文件、辅助源码文件的代码进行分词处理,以获得有利于提高细部检验相似度分析效率和精度的目标源码文件、辅助源码文件的签名集合。
根据本公开的一些实施例,还提出了一种用于实现对源码文件快速开源成分检测的系统。所述系统,具体地,可以是通过计算设备实施。图3示出了上述实施例的可以用来实施本公开的一些实施例的计算设备300的框图。如图3所示,计算设备300,包括中央处理器(CPU)301,其能够根据存储在只读存储器(ROM)302的计算机程序指令或从存储单元308加载到随机访问存储器(RAM)303中的计算机程序指令,来执行各种适当的操作和处理,在(RAM)303中,还可以存储计算设备300操作所需的各种程序代码、数据。CPU301、ROM302、RAM303通过总线304彼此相连,且输入/输出(I/O)接口305也与总线304相连。计算设备300的一些部件通过I/O接口305接入,包括:输入单元306,如键鼠等;输出单元307,如显示器等;存储单元308,如磁盘、光盘、固态硬盘(SSD)等,以及通信单元309,如网卡、调制解调器等。通信单元309能够使计算设备300通过计算机网络与其他设备交换信息/数据。CPU301能够执行上述实施例中描述的各种方法和处理过程,例如过程100。在一些实施例中,过程100,可以被实现为计算机软件程序,其被例如存储单元308等的计算机可读介质。在一些实施例中,计算机程序的部分或全部被载入或安装到计算设备300。当计算机程序被加载到RAM303被CPU301执行时,能够执行过程100的部分或者全部操作。
本文中以上描述的功能都可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)等等。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以独立地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (10)

1.一种实现对源码文件快速开源成分检测的方法,其特征在于,该方法包括:
对于目标源码文件,定义一个Simhash函数h 1 ,基于Simhash函数h 1 ,根据目标源码文件的代码哈希计算得到第一Simhash值;其中,所述的Simhash函数h 1 ,是指任意一种的Simhash函数;
基于指纹库对所述第一Simhash值进行快速匹配:将所述第一Simhash值与指纹库中的第二Simhash值逐一比对、匹配分析,获取与第一Simhash值的相似度在第一阈值内的第二Simhash值,即目标源码文件对应的第三Simhash值;其中,所述的第二Simhash值,是指基于Simhash函数h 1 分别对源码库中源码文件的代码哈希计算得到的、并存储于指纹库的Simhash值;所述的源码库,是指收集源码文件,并分类存储所收集的源码文件而生成的源代码仓库;
若未快速匹配到第三Simhash值,则判定源码库中无与目标源码文件同源的源码文件;
若快速匹配得到第三Simhash值,则细部检验:获取全部或部分的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件;将所述辅助源码文件与目标源码文件一起进行代码比较或NLP文本相似度分析,根据预设相似度要求得到细部同源分析结果。
2.根据权利要求1所述的方法,其特征在于,
预设一个确定的、控制细部检验在低开销的正整数M;当快速匹配得到N个第三Simhash值,N为任一的正整数,则:若N≥M,获取所述N个第三Simhash值中匹配度最高的M个在源码库中对应的源码文件,作为辅助源码文件,以参与后续的相关细部检验;若N≤M,获取全部所述的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件,以参与后续的相关细部检验;
和/或,
若快速匹配到的第三Simhash值中有匹配度为100%的,则直接判定目标源码文件与所述匹配度为100%的第三Simhash值在源码库中对应的源码文件同源,而无需进一步的细部检验;
和/或,
基于指纹库对第一Simhash值执行的所述快速匹配,包括:分别计算所述第一Simhash值与指纹库中的各个第二Simhash值之间的海明距离;根据所述海明距离和预设的海明距离阈值,获取目标源码文件对应的第三Simhash值;其中,所述相似度的第一阈值,具体是指所述的预设的海明距离阈值。
3.根据权利要求1或2任一所述的方法,其特征在于,
所述的细部检验过程中的NLP文本相似度分析,包括:基于Minhash算法,对目标源码文件与辅助源码文件间相似度进行分析;
所述的基于Minhash算法的相似度分析,具体包括:
根据目标源码文件、辅助源码文件的代码生成目标源码文件、辅助源码文件对应的签名集合;并根据所述签名集合构建特征矩阵;
定义一个Minhash函数h 2 ,基于Minhash函数h 2 和所述特征矩阵估算目标源码文件、辅助源码文件的签名集合间的Jaccard相似度,进而据此得到满足预设相似度要求的细部同源分析结果;其中,所述的Minhash函数h 2 ,是指任意一种的Minhash函数。
4.根据权利要求3所述的方法,其特征在于,
所述的基于Minhash函数h 2 和特征矩阵估算目标源码文件和辅助源码文件的签名集合间的Jaccard相似度以据此实现细部检验的过程,具体包括:
对所述特征矩阵进行相应的打乱处理,基于Minhash函数h 2 获得目标源码文件和辅助源码文件的最小哈希签名矩阵;基于所述最小哈希签名矩阵,分别估算目标源码文件与各个辅助源码文件的签名集合间的Jaccard相似度,来分别确定目标源码文件是否与各个辅助源码文件同源;
或,对所述特征矩阵进行相应的打乱处理,基于Minhash函数h 2 获得目标源码文件和辅助源码文件的最小哈希签名矩阵,根据所述最小哈希签名矩阵,采用LSH算法快速找出其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,判定目标源码文件与所述辅助源码文件同源;若无其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,则判定无与目标源码文件同源的辅助源码文件;
和/或,
在生成所述签名集合的过程中,包括:基于关键词词典对目标源码文件、辅助源码文件的代码进行分词处理,以获得有利于提高细部检验相似度分析效率和精度的目标源码文件、辅助源码文件的签名集合。
5.一种实现对源码文件快速开源成分检测的系统,其特征在于,该系统包括:
匹配器,以及检验器;其中,
匹配器,用于对目标源码文件执行快速匹配;匹配器被配置得能够通过一个确定的Simhash函数h 1 对目标源码文件的代码哈希处理得到第一Simhash值、以及将所述第一Simhash值与指纹库中的第二Simhash值进行快速匹配以获取第三Simhash值用于相关开源成分分析;而若未匹配到第三Simhash值,则判定源码库中无与目标源码文件同源的源码文件;其中,所述的Simhash函数h 1 ,是指任意一种的Simhash函数;所述的第二Simhash值,是指基于Simhash函数h 1 分别对源码库中源码文件的代码哈希计算得到的、并存储于指纹库的Simhash值;所述的源码库,是指收集源码文件,并分类存储所收集的源码文件而生成的源代码仓库;所述的第三Simhash值,是指与目标源码文件的第一Simhash值的相似度在第一阈值内的第二Simhash值;所述的快速匹配,具体包括:将所述第一Simhash值与指纹库中的第二Simhash值逐一比对、匹配分析,以获取所述第三Simhash值,并交检验器作进一步的细部检验;
检验器,用于对相关目标源码文件执行细部检验;检验器被配置得能够根据匹配器快速匹配到的第三Simhash值获取辅助源码文件、以及据此对所述第三Simhash值对应的目标源码文件进行细部检验;其中,所述的细部检验,具体包括:根据快速匹配到的第三Simhash值的全部或部分获取其在源码库中对应的源码文件,作为所述辅助源码文件;将所述辅助源码文件与目标源码文件一起进行代码比较或NLP文本相似度分析,根据预设相似度要求得到细部同源分析结果。
6.根据权利要求5所述的系统,其特征在于,
所述匹配器被配置得根据快速匹配得到的第三Simhash值的数量和预设的控制数获取相应数量的辅助源码文件,用以参与后续的相关细部检验;其中,其过程具体包括:预设一个确定的、控制细部检验在低开销的正整数M;以及当快速匹配得到N个第三Simhash值,N为任一的正整数,则:若N≥M,获取所述N个第三Simhash值中匹配度最高的M个在源码库中对应的源码文件,作为辅助源码文件;若N≤M,获取全部所述的第三Simhash值在源码库中对应的源码文件,作为辅助源码文件;
和/或,
若所述匹配器快速匹配到的第三Simhash值中有匹配度为100%的,则直接判定目标源码文件与所述匹配度为100%的第三Simhash值在源码库中对应的源码文件同源,而无需交检验器作进一步的细部检验;
和/或,
所述匹配器执行快速匹配时,包括:分别计算所述第一Simhash值与指纹库中的各个第二Simhash值之间的海明距离;根据所述海明距离和预设的海明距离阈值,获取目标源码文件对应的第三Simhash值;其中,所述相似度的第一阈值,具体是指所述的预设的海明距离阈值。
7.根据权利要求5或6任一所述的系统,其特征在于,
所述检验器执行的细部检验过程中的NLP文本相似度分析,包括:基于Minhash算法,对目标源码文件与辅助源码文件间相似度进行分析;
所述的基于Minhash算法的相似度分析,具体包括:
根据目标源码文件、辅助源码文件的代码生成目标源码文件、辅助源码文件对应的签名集合;并根据所述签名集合构建特征矩阵;
定义一个Minhash函数h 2 ,基于Minhash函数h 2 和所述特征矩阵估算目标源码文件、辅助源码文件的签名集合间的Jaccard相似度,进而据此得到满足预设相似度要求的细部同源分析结果;其中,所述的Minhash函数h 2 ,是指任意一种的Minhash函数。
8.根据权利要求7所述的系统,其特征在于,
所述的基于Minhash函数h 2 和特征矩阵估算目标源码文件和辅助源码文件的签名集合间的Jaccard相似度以据此实现所述检验器细部检验的过程,具体包括:
对所述特征矩阵进行相应的打乱处理,基于Minhash函数h 2 获得目标源码文件和辅助源码文件的最小哈希签名矩阵;基于所述最小哈希签名矩阵,分别估算目标源码文件与各个辅助源码文件的签名集合间的Jaccard相似度,来分别确定目标源码文件是否与各个辅助源码文件同源;
或,对所述特征矩阵进行相应的打乱处理,基于Minhash函数h 2 获得目标源码文件和辅助源码文件的最小哈希签名矩阵,根据所述最小哈希签名矩阵,采用LSH算法快速找出其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,判定目标源码文件与所述辅助源码文件同源;若无其签名集合与目标源码文件的签名集合的Jaccard相似度超过第二阈值的辅助源码文件,则判定无与目标源码文件同源的辅助源码文件;
和/或,
使所述系统中还包括:关键词词典;并使所述检验器在根据目标源码文件、辅助源码文件的代码生成所述签名集合的过程中,被配置得能够基于关键词词典对目标源码文件、辅助源码文件的代码进行分词处理,以获得有利于提高细部检验相似度分析效率和精度的目标源码文件、辅助源码文件的签名集合。
9.一种实现对源码文件快速开源成分检测的系统,其特征在于,该系统包括:
至少一个处理器,和至少一个处理器耦合的存储器,以及存储在存储器中的计算机程序;
其中的处理器执行所述计算机程序,能够实现权利要求1-4任一所述的对源码文件快速开源成分检测的方法。
10.一种计算机可读存储介质,其特征在于,
该介质上存储有源码文件开源成分检测相关的计算机指令;
在被计算机处理器执行时能够实现权利要求1-4任一所述的对源码文件快速开源成分检测的方法。
CN202111279629.0A 2021-11-01 2021-11-01 一种实现对源码文件快速开源成分检测的方法和系统 Active CN113722238B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111279629.0A CN113722238B (zh) 2021-11-01 2021-11-01 一种实现对源码文件快速开源成分检测的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111279629.0A CN113722238B (zh) 2021-11-01 2021-11-01 一种实现对源码文件快速开源成分检测的方法和系统

Publications (2)

Publication Number Publication Date
CN113722238A true CN113722238A (zh) 2021-11-30
CN113722238B CN113722238B (zh) 2022-04-26

Family

ID=78686192

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111279629.0A Active CN113722238B (zh) 2021-11-01 2021-11-01 一种实现对源码文件快速开源成分检测的方法和系统

Country Status (1)

Country Link
CN (1) CN113722238B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114201406A (zh) * 2021-12-16 2022-03-18 中国电信股份有限公司 基于开源组件的代码检测方法、系统、设备及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090089754A1 (en) * 2003-11-25 2009-04-02 Software Analysis And Forensic Engineering Corporation Detecting Plagiarism In Computer Source Code
US20090313271A1 (en) * 2008-06-16 2009-12-17 Robert Zeidman Detecting copied computer source code by examining computer object code
CN106126235A (zh) * 2016-06-24 2016-11-16 中国科学院信息工程研究所 一种复用代码库构建方法、复用代码快速溯源方法及系统
CN108763928A (zh) * 2018-05-03 2018-11-06 北京邮电大学 一种开源软件漏洞分析方法、装置和存储介质
CN110162750A (zh) * 2019-01-24 2019-08-23 腾讯科技(深圳)有限公司 文本相似度检测方法、电子设备及计算机可读存储介质
CN110569629A (zh) * 2019-09-10 2019-12-13 北京计算机技术及应用研究所 二进制代码文件溯源方法
CN111382233A (zh) * 2020-03-18 2020-07-07 深圳市随金科技有限公司 一种相似文本检测方法、装置、电子设备及存储介质
CN111400724A (zh) * 2020-05-08 2020-07-10 中国人民解放军国防科技大学 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
CN113407495A (zh) * 2021-06-29 2021-09-17 北京鼎普科技股份有限公司 一种基于simhash的文件相似度判定方法及系统

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090089754A1 (en) * 2003-11-25 2009-04-02 Software Analysis And Forensic Engineering Corporation Detecting Plagiarism In Computer Source Code
US20090313271A1 (en) * 2008-06-16 2009-12-17 Robert Zeidman Detecting copied computer source code by examining computer object code
CN106126235A (zh) * 2016-06-24 2016-11-16 中国科学院信息工程研究所 一种复用代码库构建方法、复用代码快速溯源方法及系统
CN108763928A (zh) * 2018-05-03 2018-11-06 北京邮电大学 一种开源软件漏洞分析方法、装置和存储介质
CN110162750A (zh) * 2019-01-24 2019-08-23 腾讯科技(深圳)有限公司 文本相似度检测方法、电子设备及计算机可读存储介质
CN110569629A (zh) * 2019-09-10 2019-12-13 北京计算机技术及应用研究所 二进制代码文件溯源方法
CN111382233A (zh) * 2020-03-18 2020-07-07 深圳市随金科技有限公司 一种相似文本检测方法、装置、电子设备及存储介质
CN111400724A (zh) * 2020-05-08 2020-07-10 中国人民解放军国防科技大学 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
CN113407495A (zh) * 2021-06-29 2021-09-17 北京鼎普科技股份有限公司 一种基于simhash的文件相似度判定方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
SHUO QIU等: "Fast, Private and Verifiable: Server-aided Approximate Similarity Computation over Large-Scale Datasets", 《PROCEEDINGS OF THE 4TH ACM INTERNATIONAL WORKSHOP ON SECURITY IN CLOUD COMPUTING》 *
张宇: "基于海明距离的相似查找索引算法研究", 《中国优秀博硕士学位论文全文数据库(硕士)》 *
郝亮: "面向开源代码复用的程序比对分析技术研究", 《中国优秀博硕士学位论文全文数据库(硕士)》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114201406A (zh) * 2021-12-16 2022-03-18 中国电信股份有限公司 基于开源组件的代码检测方法、系统、设备及存储介质
CN114201406B (zh) * 2021-12-16 2024-02-02 中国电信股份有限公司 基于开源组件的代码检测方法、系统、设备及存储介质

Also Published As

Publication number Publication date
CN113722238B (zh) 2022-04-26

Similar Documents

Publication Publication Date Title
US10514909B2 (en) Similarity of binaries
US20170228309A1 (en) System and method for equivalence class analysis-based automated requirements-based test case generation
CN109670318B (zh) 一种基于核控制流图循环验证的漏洞检测方法
US10496459B2 (en) Automated software program repair candidate selection
CN111177655B (zh) 一种数据处理方法、装置及电子设备
US20220300280A1 (en) Predictive build quality assessment
CN113627168B (zh) 一种元器件封装冲突的检查方法、装置、介质及设备
KR102496539B1 (ko) 소프트웨어 검증 방법 및 이를 위한 장치
CN113722238B (zh) 一种实现对源码文件快速开源成分检测的方法和系统
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN114238980B (zh) 一种工控设备漏洞挖掘方法、系统、设备及存储介质
US20200279148A1 (en) Material structure analysis method and material structure analyzer
CN113157561A (zh) 一种数控系统软件模块的缺陷预测方法
CN117171741A (zh) 代码缺陷分析方法及装置
CN114937043B (zh) 基于人工智能的设备缺陷检测方法、装置、设备及介质
CN110968518A (zh) 自动化测试日志文件的分析方法及装置
Santos et al. An empirical study on the influence of context in computing thresholds for Chidamber and Kemerer metrics.
CN113127342B (zh) 基于电网信息系统特征选择的缺陷预测方法及装置
CN113721978B (zh) 一种混源软件中开源成分检测的方法和系统
CN115310087A (zh) 一种基于抽象语法树的网站后门检测方法和系统
CN110633204B (zh) 一种程序缺陷检测方法及装置
CN112948415A (zh) Sql语句检测方法、装置、终端设备及存储介质
Wu et al. Significance test in operational ROC analysis
US20180137270A1 (en) Method and apparatus for non-intrusive program tracing for embedded computing systems
CN114580982B (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