CN109977675B - 一种开源软件识别方法及装置 - Google Patents
一种开源软件识别方法及装置 Download PDFInfo
- Publication number
- CN109977675B CN109977675B CN201711463010.9A CN201711463010A CN109977675B CN 109977675 B CN109977675 B CN 109977675B CN 201711463010 A CN201711463010 A CN 201711463010A CN 109977675 B CN109977675 B CN 109977675B
- Authority
- CN
- China
- Prior art keywords
- target
- source software
- information
- open source
- feature information
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- 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/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种开源软件识别方法及装置,用于提升识别效率。所述方法包括:获取待识别的目标代码;将开源软件特征库中开源软件的特征信息与目标代码进行匹配,确定与所述目标代码匹配的目标特征信息,所述特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;所述端点特征信息包括所述开源软件的初始版本对应的文件信息和/或所述开源软件的非初始版本相对于之前的版本新增的文件信息;所述分叉点特征信息包括所述开源软件的非初始版本相对于之前的版本修改的文件信息;所述无效特征信息包括所述开源软件从初始版本到当前最新版本未修改过的文件信息;根据所述目标特征信息确定所述目标代码对应的开源软件信息。
Description
技术领域
本申请涉及计算机应用领域,尤其涉及一种开源软件识别方法及装置。
背景技术
开源软件在云计算中已发挥越来越重要的作用,并成为云计算网络安全的关键。精准识别开源软件及其版本是保证开源组件漏洞有效闭环的关键。业界目前已有成熟的网络安全漏洞库,这些开源软件漏洞闭环的前提是能够精准识别产品代码中使用了哪些开源软件及其版本,但由于开源软件的代码开源、可修改、可分发等特点,导致开源软件版本多、识别困难。
目前业界有主要采用文件比对技术来识别代码中使用的开源软件及其版本,文件比对的主要特点是尽可能搜集开源文件的哈希值、文件大小、文件目录等属性,进行全量比对,即将搜集的所有开源文件信息与代码进行比对,根据比对结果识别出相似度最高的开源软件及其版本。
由于开源软件文件数量庞大,通过全量文件比对识别开源软件会耗费大量时间,效率较低。
发明内容
本申请实施例提供了一种开源软件识别方法及装置,用于快速识别产品代码中所使用的开源软件及其版本,提升识别效率。
有鉴于此,本申请第一方面提供了一种开源软件识别方法,该方法包括:识别装置获取需要进行开源软件识别的目标代码,然后将开源软件特征库中的特征信息与目标代码进行匹配,识别出与目标代码匹配的目标特征信息,根据该目标特征信息即可确定目标代码对应的开源软件信息;
其中,特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息。
本实现方式中,识别装置根据特征信息就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
结合本申请第一方面,在本申请第一方面的第一种实现方式中,识别装置可以通过如下方式确定目标特征信息:识别装置确定目标代码对应的目标文件信息,并获取开源软件特征库中各个开源软件的端点特征信息,然后判断这些端点特征信息中是否存在于目标文件信息匹配的目标端点特征信息,若存在,则这些目标端点特征信息就是与目标代码匹配的目标特征信息;
对应地,识别装置可以通过如下方式确定目标代码对应的开源软件信息:将目标端点特征信息所属的开源软件(第一开源软件)的信息确定为目标代码对应的开源软件信息。
本实现方式中,识别装置提供了一种识别开源软件信息的方式,提高了方案的可实现性。
结合本申请第一方面的第一种实现方式,在本申请第一方面的第二种实现方式中,识别装置确定目标端点特征信息后,还可以执行如下流程:识别装置确定目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号,将这些版本号中的最高版本号确定为目标版本号,然后获取开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点特征信息对应的版本号就是目标代码对应的开源软件的版本号。
本实现方式中,识别装置可以通过分叉点特征信息精确识别出目标代码所对应开源软件的版本号,提高了识别精度。
结合本申请第一方面的第一或第二种实现方式,在本申请第一方面的第三种实现方式中,识别装置确定目标端点特征信息后,还可以执行如下流程:识别装置获取开源软件特征库中第一开源软件的无效特征信息,判断第一开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息,若是,则确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在目标代码中被修改了。
本实现方式中,识别装置识别出目标代码对应的开源软件信息后,可以进一步识别出目标代码是对开源软件的哪一部分进行了修改,提高了方案的灵活性。
结合本申请第一方面,在第一方面的第四种实现方式中,识别装置可以通过如下方式确定目标特征信息:识别装置确定目标代码对应的目标文件信息,并获取开源软件特征库中各个开源软件的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点信息就是与目标代码匹配的目标特征信息;
对应地,识别装置可以通过如下方式确定目标代码对应的开源软件信息:识别装置确定目标分叉点特征信息所属的第一开源软件以及目标分叉点特征信息对应的第一开源软件的版本号与目标代码对应,即目标代码对应的开源软件为第一开源软件,目标对应的开源软件版本号为目标分叉点信息对应的版本号。
本实现方式中,识别装置提供了另一种识别开源软件信息的方式,提高了方案的灵活性。
结合本申请第一方面的第一种实现方式,在第一方面的第五种实现方式中,当识别装置确定不存在目标特征信息时,识别装置可以获取开源软件特征库中各个开源软件的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点信息就是与目标代码匹配的目标特征信息;
对应地,识别装置可以通过如下方式确定目标代码对应的开源软件信息:识别装置确定目标分叉点特征信息所属的第一开源软件以及目标分叉点特征信息对应的第一开源软件的版本号与目标代码对应,即目标代码对应的开源软件为第一开源软件,目标对应的开源软件版本号为目标分叉点信息对应的版本号。
本实现方式中,识别装置提供了另一种识别开源软件信息的方式,提高了方案的灵活性。
本申请第二方面提供了一种识别装置,该识别装置包括:第一获取模块,第一确定模块以及第二确定模块;其中,第一获取模块,用于获取待识别的目标代码;第一确定模块,用于将开源软件特征库中开源软件的特征信息与目标代码进行匹配,确定与目标代码匹配的目标特征信息,第二确定模块,用于根据目标特征信息确定目标代码对应的开源软件信息。
其中,特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息。
结合本申请第二方面,在本申请第二方面的第一种实现方式中,第一确定模块包括:第一获取单元,第一确定单元,第一判断单元,第二确定单元;第二模块包括:第三确定单元;
其中,第一获取单元用于获取开源软件特征库中各个开源软件的端点特征信息;第一确定单元用于确定目标代码对应的目标文件信息;第一判断单元用于判断开源软件特征库中是否存在与目标文件信息对应的第一开源软件的目标端点特征信息;第二确定单元用于当第一判断单元确定存在目标端点特征信息时,确定目标端点特征信息与目标代码匹配;第三确定单元用于根据目标端点特征信息确定第一开源软件的信息为目标代码对应的开源软件信息。
结合本申请第二方面的第一种实现方式,在本申请第二方面的第一种实现方式中,装置还包括:第三确定模块,第四确定模块,第二获取模块,第一判断模块以及第五确定模块;
其中,第三确定模用于确定目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号;第四确定模块用于确定第一开源软件的版本号中的目标版本号,目标版本号为目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号中的最高版本号;确定目标版本号是否为开源软件特征库中第一开源软件对应的所有版本号中最高的版本号,若是,确定目标版本号为目标代码对应的开源软件的版本号;第二获取模块,用于若目标版本号不是开源软件特征库中第一开源软件对应的所有版本号中最高的版本号,则获取所述开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息;第一判断模块用于判断第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息中是否存在与目标文件信息匹配的目标分叉点特征信息;第五确定模块用于当第一判断模块确定存在目标分叉点特征信息时,确定目标分叉点特征信息对应的第一开源软件的版本号为目标代码对应的开源软件的版本号。
结合本申请第二方面的第一种实现方式或第二种实现方式,在本申请第二方面的第三种实现方式中,识别装置还包括:第三获取模块,第二判断模块,第六确定模块;
其中,第三获取模块用于获取开源软件特征库中第一开源软件的无效特征信息;第二判断模块用于判断第一开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息;第六确定模块用于当第二判断模块确定存在目标无效特征信息时,确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在目标代码中被修改。
结合本申请第二方面,在本申请第二方面的四种实现方式中,第一确定模块包括:第二获取单元,第四确定单元,第二判断单元以及第五确定单元;第二确定模块包括:第六确定单元;
其中,第二获取单元用于获取开源软件特征库中各个开源软件的分叉点特征信息;第四确定单元,用于确定目标代码对应的目标文件信息;第二判断单元用于判断各个开源软件的分叉点特征信息中是否存在与目标文件信息匹配的目标分叉点特征信息;第五确定单元用于当第二判断单元确定存在目标分叉点特征信息时,确定目标分叉点特征信息与目标代码匹配;第六确定单元用于确定目标分叉点特征信息对应的第一开源软件以及目标分叉点特征信息对应的第一开源软件的版本号与目标代码对应。
本申请第三方面提供了一种识别装置,该识别装置包括:处理器及存储器;
存储器用于存储程序;处理器用于执行程序,具体包括如下步骤:获取需要进行开源软件识别的目标代码,然后将开源软件特征库中的特征信息与目标代码进行匹配,识别出与目标代码匹配的目标特征信息,根据该目标特征信息即可确定目标代码对应的开源软件信息;
其中,特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息。
结合本申请第三方面,在本申请第三方面的第一种实现方式中,处理器识别出与目标代码匹配的目标特征信息的步骤具体可以包括:确定目标代码对应的目标文件信息,并获取开源软件特征库中各个开源软件的端点特征信息,然后判断这些端点特征信息中是否存在于目标文件信息匹配的目标端点特征信息,若存在,则这些目标端点特征信息就是与目标代码匹配的目标特征信息;
对应地,处理器确定目标代码对应的开源软件信息的步骤具体可以包括:将目标端点特征信息所属的开源软件(第一开源软件)的信息确定为目标代码对应的开源软件信息。
结合本申请第三方面的第一种实现方式,在本申请第三方面的第二种实现方式中,处理器确定目标端点特征后,具体还执行如下步骤:确定目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号,将这些版本号中的最高版本号确定为目标版本号,然后获取开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点特征信息对应的版本号就是目标代码对应的开源软件的版本号。
结合本申请第三方面的第一或第二种实现方式,在本申请第三方面的第三种实现方式中,处理器确定目标端点特征信息后,具体还执行如下步骤:获取开源软件特征库中第一开源软件的无效特征信息,判断第一开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息,若是,则确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在目标代码中被修改了。
结合本申请第三方面,在本申请第三发明的第四种实现方式中,处理器识别目标端点特征信息的步骤具体可以包括:确定目标代码对应的目标文件信息,并获取开源软件特征库中各个开源软件的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点信息就是与目标代码匹配的目标特征信息;
对应地,处理器确定目标代码对应的开源软件信息的步骤具体可以包括:确定目标分叉点特征信息所属的第一开源软件以及目标分叉点特征信息对应的第一开源软件的版本号与目标代码对应,即目标代码对应的开源软件为第一开源软件,目标对应的开源软件版本号为目标分叉点信息对应的版本号。
本申请的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面,第一方面的第一至第五种实现方式中任意一种实现方式所述的方法。
本申请的第五方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面,第一方面的第一至第五种实现方式中任意一种实现方式所述的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例是将开源软件特征库中开源软件的特征信息与目标代码进行匹配,然后根据与目标代码匹配的目标特征信息识别出目标代码对应的开源软件信息。其中,特征信息可以包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息指的是开源软件的初始版本对应的文件信息和开源软件的初始版本相对于之前的版本新增的文件信息,分叉点特征信息指的是非初始版本相对于之前的版本修改的文件信息,无效特征信息是开源软件从初始版本到当前最新版本未修改过的文件信息,根据这些特征信息识别装置就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例。
图1为本申请实施例中开源软件识别方法的一个实施例示意图;
图2为本申请实施例中开源软件识别方法的另一实施例示意图;
图3为本申请实施例中特征信息的一个示意图;
图4为本申请实施例中目标文件信息的一个示意图;
图5为本申请实施例中识别装置的一个实施例示意图;
图6为本申请实施例中识别装置的另一实施例示意图;
图7为本申请实施例中识别装置的另一实施例示意图;
图8为本申请实施例中识别装置的另一实施例示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供了一种开源软件识别方法及装置,用于快速识别产品代码中所使用的开源软件及其版本,提升识别效率。
为了便于理解,下面对本申请涉及的名词术语进行介绍:
开源软件:又名开放源码软件(open-source),它被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制。
下面对本申请实施例中的开源软件识别方法进行介绍,请参阅图1,本申请实施例中开源软件识别方法的一个实施例包括:
101、识别装置获取待识别的目标代码;
本实施例中,识别装置确定需要进行识别的目标代码,这些目标代码具体可以是用户在识别装置上输入的,可以是识别装置从其他设备中主动获取的,可以是其他设备发送到识别装置的,还可以是识别装置通过其他途径获取的,具体此处不作限定。
102、识别装置将开源软件特征库中开源软件的特征信息与目标代码进行匹配,确定与目标代码匹配的目标特征信息;
识别装置确定需要进行识别的目标代码后,将开源软件库中各个开源软件的特征信息与该目标代码进行匹配,若匹配成功,则将与该目标代码匹配的特征信息作为目标特征信息,并执行步骤103;若匹配不成功,则识别装置可以提示用户识别失败或执行其他操作,具体此处不作限定。
其中,开源软件的特征信息包括如下至少一项:开源软件的端点特征信息,开源软件的分叉点特征信息或开源软件的无效特征信息。
本实施例中,对于开源软件特征库中的任意一个开源软件,该开源软件的端点特征信息指的是该开源软件的初始版本对应的文件信息和/或该开源软件的非初始版本相对于之前的版本新增的文件信息;该开源软件的分叉点特征信息指的是该开源软件的非初始版本相对于之前的版本修改过的文件信息;该开源软件的无效特征信息指的是该开源软件从初始版本到当前最新版本未修改过的文件信息。
作为一种可选的方式,识别装置将开源软件特征库中开源软件的特征信息与目标代码进行匹配之前,可以先建立开源软件特征库,具体地,识别装置可以通过如下方式建立开源软件特征库:从网站服务器中获取各个开源软件的软件包,解析该软件包得到各个开源软件的不同版本所对应的文件信息,然后针对各个开源软件,比较该开源软件对应的各个版本的文件信息确定出该开源软件的特征信息,根据这些特征信息建立开源软件特征库;识别装置也可以通过其他方式建立开源软件特征库,具体此处不作限定。
作为一种可选的方式,识别装置将开源软件特征库中开源软件的特征信息与目标代码进行匹配之前,可以从其他设备中获取开源软件特征库,或者识别装置在需要进行匹配时,从其他设备中调取该开源软件特征库进行匹配。
103、识别装置根据目标特征信息确定目标代码对应的开源软件信息。
识别装置确定目标特征信息后,根据该目标特征信息确定与目标代码对应的开源软件信息。本实施例中,开源软件信息可以包括开源软件的版本号,名称,文件目录,文件大小,文件的哈希值等,具体本申请不作限定。
本申请实施例是将开源软件特征库中开源软件的特征信息与目标代码进行匹配,然后根据与目标代码匹配的目标特征信息识别出目标代码对应的开源软件信息。其中,特征信息可以包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息指的是开源软件的初始版本对应的文件信息和开源软件的初始版本相对于之前的版本新增的文件信息,分叉点特征信息指的是非初始版本相对于之前的版本修改的文件信息,无效特征信息是开源软件从初始版本到当前最新版本未修改过的文件信息,根据这些特征信息识别装置就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
基于上述图1对应的实施例可知,识别装置可以通过多种方式将特征信息与目标代码进行匹配,下面对其中几种进行详细介绍,请参阅图2,本申请实施例中开源软件识别方法的另一实施例包括:
201、识别装置获取待识别的目标代码;
本实施例中,识别装置确定需要进行识别的目标代码,这些目标代码具体可以是用户在识别装置上输入的,可以是识别装置从其他设备中主动获取的,可以是其他设备发送到识别装置的,还可以是识别装置通过其他途径获取的,具体此处不作限定。
202、识别装置获取开源软件特征库中各个开源软件的端点特征信息,并确定目标代码对应的目标文件信息;
识别装置确定需要进行识别的目标代码后,确定目标代码对应的各个文件信息,并从开源软件特征库中获取各个开源软件的端点特征信息,为了便于描述,本实施例中将目标代码对应的文件信息称为目标文件信息。
应理解,对于任意一个开源软件,如果开源软件特征库中仅存储有该开源软件的初始版本对应的文件信息,则在本实施例开源软件库中该开源软件的端点特征信息指的是该开源软件的初始版本对应的文件信息;如果开源软件库中存储有该开源软件的初始版本对应的文件信息以及非初始版本对应的文件信息,且存在至少一个非初始版本对应的文件信息相比于初始版本对应的文件信息有新增的内容,则在本实施例开源软件库中该开源软件的端点特征信息指的是该开源软件的初始版本对应的文件信息以及该开源软件的非初始版本相对于之前的版本新增的文件信息;如果开源软件库中未存储有该开源软件的初始版本对应的文件信息,但非初始版本对应的文件信息,则在本实施例开源软件库中该开源软件的端点特征信息指的是该开源软件的非初始版本相对于之前的版本新增的文件信息。
作为一种可选的方式,本实施例中,开源软件特征库中存储有所有开源软件对应的所有版本的文件信息,开源软件特征库中各个开源软件的端点特征信息指的是各个开源软件的初始版本对应的文件信息,以及各个开源软件的非初始版本相对于上一版本新增的文件信息,开源软件特征库中各个开源软件的分叉点特征信息指的是各个开源软件对应的非初始版本相对于上一版本修改过的文件信息,开源软件库中各个开源软件的无效特征信息指的是各个开源软件从初始版本到当前最新版本未修改过的文件信息。
203、识别装置判断开源软件特征库中是否存在与目标文件信息对应的第一开源软件的目标端点特征信息,若存在,则执行步骤204,若不存在,则执行步骤205;
识别装置获取各个开源软件的端点特征信息后,将各个端点特征信息与目标代码各个目标文件信息进行比对,若能识别出相互匹配的端点特征信息与目标文件信息,则将识别出的端点特征信息确定为目标端点特征信息,将这些端点特征信息对应的开源软件确定为第一开源软件;若不能识别出相互匹配的端点特征信息与目标文件信息,则执行步骤205。具体地,开源软件的端点特征信息包括:开源软件的初始版本对应的文件的哈希值和/或各个开源软件的非初始版本相对于初始版本新增的文件的哈希值;目标文件信息包括:目标代码对应文件的哈希值。识别装置判断开源软件特征库中是否存在与目标文件信息对应的第一开源软件的目标端点特征信息包括:将开源软件特征库中各个端点特征信息对应的哈希值与各个目标文件信息对应的哈希值进行比对,判断是否存在哈希值相等的端点特征信息和目标文件信息,若存在,则这些端点特征信息即为与目标代码匹配的目标端点特征信息,若不存在,则执行步骤205。
为了便于描述,本实施例中,将能够与目标文件信息匹配的端点特征信息称为目标端点特征信息,将目标端点特征信息所属的开源软件称为第一开源软件。
应理解,本实施例中,开源软件的端点特征信息还可以包括其他文件特征(如文件大小,文件所在目录等),识别装置还可以通过其他的文件特征确定目标端点特征信息,具体本申请不作限定。
204、识别装置根据目标端点特征信息确定第一开源软件的信息为目标代码对应的开源软件信息;
识别装置出与目标代码匹配的目标端点特征信息后,可以确定目标端点特征信息所对应的开源软件即为目标代码对应的开源软件,即第一开源软件为目标代码对应的开源软件,则第一开源软件的信息即为目标代码对应的开源软件信息。
作为一种可选的方式,本实施例中,开源软件特征库中与目标代码匹配的目标端点特征信息有多个,并且这多个目标端点特征信息均属于一个开源软件(第一开源软件),则识别装置识别出与目标代码匹配的目标端点特征信息之后,识别装置可以确定这些目标端点特征信息中每个目标端点特征信息对应的版本号,如果目标端点特征信息对应的版本号只有一个,则确定这个版本号为目标版本号,如果目标端点特征信息对应的版本号有多个,则确定这些版本号中的最高版本号为目标版本号。
如果确定的目标版本号已经是开源软件特征库中记录的第一开源软件对应的所有版本号中最高的版本号,则识别装置可以确定目标版本号为目标代码对应的版本号,即目标代码对应的开源软件为第一开源软件,目标代码对应的版本号为目标版本号。
如果确定的目标版本号不是开源软件特征库中记录的第一开源软件对应的所有版本号中最高的版本号,则识别装置可以获取开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息,然后判断第一开源软件的目标版本号以及目标版本号之后的版本所对应的分叉点特征信息中是否存在与目标文件信息匹配的分叉点特征信息,若不存在,则识别装置确定目标版本号在开源软件特征库中是否有对应的分叉点特征信息,如果目标版本号在开源软件特征库中没有对应的分叉点特征信息,则识别装置可以目标版本号为目标代码对应的版本号;若存在,则这些分叉点特征信息与目标代码匹配,为了便于描述,本实施例中,将与目标代码匹配的分叉点特征信息称为目标分叉点特征信息。
具体地,开源软件的分叉点特征信息可以包括:开源软件的非初始版本相对于上一版本修改过的文件的哈希值,则识别装置可以通过如下方式确定目标分叉点特征信息:将获取的各个分叉点特征信息对应的哈希值与各个目标文件信息对应的哈希值进行比对,判断是否存在哈希值相等的分叉点特征信息和目标文件信息,若存在,则这个分叉点特征信息即为与目标代码匹配的目标分叉点特征信息。
应理解,本实施例中,开源软件的分叉点特征信息还可以包括其他文件特征(如文件大小,文件所在目录等),识别装置还可以通过其他的文件特征确定目标分叉点特征信息,具体本申请不作限定。应理解,分叉点特征信息指的是开源软件的某一个版本相对于上一版本修改过的文件信息,一般来说,通过与目标代码匹配的目标分叉点特征信息就可以识别出唯一的开源软件版本号,即目标分叉点特征信息对应的版本号只有一个。
则识别装置识别出与目标代码匹配的目标分叉点特征信息之后,可以确定目标分叉点特征信息对应的版本号为目标代码对应的版本号,即目标代码对应的开源软件为第一开源软件,目标代码对应的版本号为目标分叉点特征信息对应的版本号。
还应理解,上述识别装置确定目标版本号,并获取开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息的过程,可以理解为,确定第一开源软件中可能包含所有识别出来的目标端点特征信息的所有版本,并获取这些版本对应的分叉点特征信息。
作为一种可选的方式,本实施例中,识别装置识别出与目标代码匹配的目标端点特征信息之后,可以获取开源软件特征库中第一开源软件的无效特征信息,判断开源软件特征库中记录的第一开源软件的无效特征信息中是否存在与目标文件信息匹配的无效特征信息,若是,则这些无效特征信息与目标代码匹配,为了便于描述,本实施例中,将与目标代码匹配的无效特征信息称为目标无效特征信息。
具体地,开源软件的无效特征信息可以包括:从初始版本到当前最新版本未修改过的文件的哈希值,则识别装置可以通过如下方式确定目标无效特征信息:将获取的各个无效特征信息对应的哈希值与各个目标文件信息对应的哈希值进行比对,判断是否存在哈希值相等的无效特征信息和目标文件信息,若存在,则这个无效特征信息即为与目标代码匹配的目标无效特征信息。
应理解,本实施例中,开源软件的无效特征信息还可以包括其他文件特征(如文件大小,文件所在目录等),识别装置还可以通过其他的文件特征确定无效特征信息,具体本申请不作限定。
则识别装置识别出与目标代码匹配的目标无效特征信息之后,可以确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在目标代码中被修改了。应理解,识别装置通过前述方式识别出与目标代码匹配的目标端点特征信息后,可以确定目标代码与第一开源软件的其中一个版本对应,即目标代码通过对该版本的第一开源软件进行编辑得到的。而第一开源软件的无效特征信息指的是第一开源软件从初始版本到当前最新版本未修改过的文件信息,即第一开源软件的各个版本中都存在该无效特征信息,如果不存在与目标代码匹配的目标无效特征信息,则说明生成目标代码的过程中对第一开源软件的无效特征信息部分都进行了修改,如果第一开源软件的各个无效特征信息均与目标代码匹配,则说明生成目标代码的过程中未出第一开源软件的无效特征信息部分进行修改,如果第一开源软件的无效特征信息中存在部分与目标代码匹配的目标无效特征信息,则可以确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在生成目标代码的过程中被修改了。
205、识别装置执行其他流程。
当识别装置确定开源软件特征库中不存在与目标文件信息对应的目标端点特征信息时,识别装置可以获取开源软件特征库中各个开源软件的分叉点特征信息,然后判断各个开源软件的分叉点特征信息中是否存在与目标文件信息匹配的分叉点特征信息,若存在,则确定这些分叉点特征信息与目标代码匹配,为了便于描述,本实施例中,将与目标代码匹配的分叉点特征信息称为目标分叉点特征信息。
应理解,分叉点特征信息指的是开源软件的某一个版本相对于上一版本修改过的文件信息,一般来说,通过与目标代码匹配的目标分叉点特征信息就可以识别出唯一的开源软件版本号,即目标分叉点特征信息对应的版本号只有一个。
则识别装置识别出与目标代码匹配的目标分叉点特征信息之后,可以确定目标分叉点特征信息对应的开源软件(第一开源软件)为目标代码对应的开源软件,目标分叉点特征信息对应的版本号即为目标代码对应的版本号。
当识别装置确定开源软件特征库中不存在与目标文件信息对应的目标端点特征信息时,识别装置也可以获取开源软件也可以获取开源软件特征库中各个开源软件的无效特征信息,然后判断各个开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息,若存在,则确定这些无效特征信息与目标代码匹配,为了便于描述,本实施例中,将与目标代码匹配的无效特征信息称为目标无效特征信息。
识别装置识别出与目标代码匹配的目标无效特征信息后,可以确定目标无效特征信息对应的开源软件为目标代码对应的开源软件,该开源软件的信息即目标代码对应的开源软件信息。
当识别装置确定开源软件特征库中不存在与目标文件信息对应的目标端点特征信息时,识别装置还可以执行其他流程,具体此处不作限定。
在一些实施例中,识别装置获取待识别的目标代码后,也可以直接获取开源软件特征库中各个开源软件的分叉点特征信息,并确定目标代码对应的目标文件信息,然后判断开源软件特征库中各个开源软件的分叉点特征信息中是否存在与目标文件信息匹配的目标分叉点特征信息,当确定存在目标分叉点特征信息时,可以根据该目标分叉点特征信息确定目标代码对应的开源软件信息,目标分叉点特征信息对应的开源软件即为目标代码对应的开源软件,目标分叉点特征信对应的开源软件的版本号,即目标代码对应的版本号,当确定不存在目标分叉点特征信息时,可以根据开源软件特征库中各个开源软件的无效特征信息确定目标代码对应的开源软件信息,具体过程与上述步骤204类似,此处不再赘述。
在一些实施例中,识别装置获取待识别的目标代码后,也可以直接获取开源软件特征库中各个开源软件的无效特征信息,并确定目标代码对应的目标文件信息,然后判断开源软件特征库中各个开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息,当确定存在目标无效特征信息时,可以根据目标无效特征信息确定目标代码对应的开源软件信息,目标无效特征信息对应的开源软件即为目标代码对应的开源软件,当确定不存在目标无效特征信息时,可以根据开源软件特征库中各个开源软件的端点特征信息和/或分叉点特征信息确定目标代码对应的开源软件信息,具体过程与上述步骤203和步骤204类似,此处不再赘述。
本申请实施例是将开源软件特征库中开源软件的特征信息与目标代码进行匹配,然后根据与目标代码匹配的目标特征信息识别出目标代码对应的开源软件信息。其中,特征信息可以包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息指的是开源软件的初始版本对应的文件信息和开源软件的初始版本相对于之前的版本新增的文件信息,分叉点特征信息指的是非初始版本相对于之前的版本修改的文件信息,无效特征信息是开源软件从初始版本到当前最新版本未修改过的文件信息,根据这些特征信息识别装置就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
其次,本申请实施例提供了多种根据目标特征信息确定目标代码对应的开源软件信息的方式,提高了方案的灵活性。
为了便于理解本申请,下面以一实际应用场景对本申请中的开源软件识别方法进行详细介绍:
识别装置基于Openstack开源官网获取开源软件包,构建开源软件“特征库”记录各开源软件的非初始版本相对于上一版本新增的文件(端点特征信息)的哈希值、各个开源软件的非初始版本相对于上一版本修改过的文件的哈希值(分叉点特征信息)以及各个开源软件从初始版本到当前最新版本未修改过的文件的哈希值(无效特征信息),如图3所示为某个开源软件的特征信息的示意图。
识别装置获取待识别的目标代码,并确定目标代码对应的各个文件的哈希值(目标文件信息),如图4所示,图4示出了目标代码对应各个文件的存储路径以及各个文件对应的哈希值。
识别装置获取开源软件特征库中各个开源软件的端点特征信息对应的哈希值,并将各个端点特征信息对应的哈希值与图4所示各个文件的哈希值进行比对,最终识别出目标代码对应的文件名为“ssl.py”的哈希值与开源软件特征库中的murano软件(第一开源软件)1.0.3版本的端点特征(目标端点特征信息)对应的哈希值相等,目标代码对应的文件名为“ext_context.py”的哈希值与murano软件2.0.2版本的端点特征(目标端点特征信息)的哈希值相等,包含这两个模板端点特征信息的版本范围清单识别为murano软件2.0.2版本及其之后的版本
识别装置获取murano软件2.0.2版本(目标版本)及其之后的版本(即murano软件2.0.2版本以及murano软件3.0.0版本)所对应的分叉点特征对应的哈希值,将获取的分叉点特征对应的哈希值与目标代码对应的各个文件的哈希值进行比对,确定murano软件2.0.2版本没有对应的分叉点特征,而murano软件3.0.0版本的分叉点特征的哈希值与目标代码对应的文件的哈希值不匹配,则识别装置确定目标代码与murano软件2.0.0版本对应。
识别装置获取murano软件的无效特征对应的哈希值,将murano软件的无效特征对应的哈希值与目标代码对应的各个文件的哈希值进行比对,确定murano软件的无效特征(“context.py”以及“_init_.py”)对应的哈希值与目标代码中“context.py”以及“_init_.py”对应的哈希值相等,即murano软件的所有无效特征与目标代码匹配,识别装置可以进一步确定目标代码未对“context.py”以及“_init_.py”进行修改,目标代码对应的所有文件与murano软件2.0.0版本完全吻合。
上面介绍了本实施例中的开源软件识别方法,下面对本实施例中的识别装置进行介绍,本实施例中的识别装置可以是任意的计算机设备,如个人计算机(PC,personalcomputer),手提电脑,向外提供开源软件识别服务的服务器等。请参阅图5,本申请实施例中识别装置的一个实施例包括:
第一获取模块501,用于获取待识别的目标代码;
第一确定模块502,用于将开源软件特征库中开源软件的特征信息与目标代码进行匹配,确定与目标代码匹配的目标特征信息;
第二确定模块503,用于根据目标特征信息确定目标代码对应的开源软件信息;
其中,特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息;
应理解,上述图5对应识别装置中各模块所执行的流程与前述图1所示实施例所描述的方法流程类似,此处不再赘述。
本申请实施例中,第一确定模块502将开源软件特征库中开源软件的特征信息与目标代码进行匹配,然后第二确定模块503根据与目标代码匹配的目标特征信息识别出目标代码对应的开源软件信息。其中,特征信息可以包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息指的是开源软件的初始版本对应的文件信息和开源软件的初始版本相对于之前的版本新增的文件信息,分叉点特征信息指的是非初始版本相对于之前的版本修改的文件信息,无效特征信息是开源软件从初始版本到当前最新版本未修改过的文件信息,根据这些特征信息识别装置就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
为了便于理解,下面对本申请中的识别装置进行详细描述,请参阅图6,本申请实施例中识别装置的另一实施例包括:
第一获取模块601,用于获取待识别的目标代码;
第一确定模块602,用于将开源软件特征库中开源软件的特征信息与目标代码进行匹配,确定与目标代码匹配的目标特征信息;
第二确定模块603,用于根据目标特征信息确定目标代码对应的开源软件信息;
特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息;
第一确定模块602包括:
第一获取单元6021,用于获取开源软件特征库中各个开源软件的端点特征信息;
第一确定单元6022,用于确定目标代码对应的目标文件信息;
第一判断单元6023,用于判断开源软件特征库中是否存在与目标文件信息对应的第一开源软件的目标端点特征信息;
第二确定单元6024,用于当第一判断单元确定存在目标端点特征信息时,确定目标端点特征信息与目标代码匹配;
对应地,第二确定模块603包括:
第三确定单元6031,用于根据目标端点特征信息确定第一开源软件的信息为目标代码对应的开源软件信息。
作为一种可选的方式,识别装置还可以包括:
第三确定模块604,用于确定目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号;
第四确定模块605,用于确定第一开源软件的版本号中的目标版本号,目标版本号为目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号中的最高版本号;确定目标版本号是否是开源软件特征库中第一开源软件对应的所有版本号中最高的版本号,若是,确定目标版本号为目标代码对应的开源软件的版本号;
第二获取模块606,用于若目标版本号不是开源软件特征库中第一开源软件对应的所有版本号中最高的版本号,获取所述开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息;
第一判断模块607,用于判断第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息中是否存在与目标文件信息匹配的目标分叉点特征信息;
第五确定模块608,用于当第一判断模块确定存在目标分叉点特征信息时,确定目标分叉点特征信息对应的第一开源软件的版本号为目标代码对应的开源软件的版本号。
作为一种可选的方式,识别装置还可以包括:
第三获取模块609,用于获取开源软件特征库中第一开源软件的无效特征信息;
第二判断模块610,用于判断第一开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息;
第六确定模块611,用于当第二判断模块确定存在目标无效特征信息时,确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在目标代码中被修改。
应理解,上述图6对应识别装置中各模块所执行的流程与前述图2所示实施例所描述的方法流程类似,此处不再赘述。
本申请实施例中,第一确定模块602将开源软件特征库中开源软件的特征信息与目标代码进行匹配,然后第二确定模块603根据与目标代码匹配的目标特征信息识别出目标代码对应的开源软件信息。其中,特征信息可以包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息指的是开源软件的初始版本对应的文件信息和开源软件的初始版本相对于之前的版本新增的文件信息,分叉点特征信息指的是非初始版本相对于之前的版本修改的文件信息,无效特征信息是开源软件从初始版本到当前最新版本未修改过的文件信息,根据这些特征信息识别装置就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
其次,本实施例中,识别装置提供了一种识别目标代码对应的开源软件及其版本的方式,提高了方案的可实现性。
为了便于理解,下面对本申请中的识别装置进行详细描述,请参阅图7,本申请实施例中识别装置的另一实施例包括:
第一获取模块701,用于获取待识别的目标代码;
第一确定模块702,用于将开源软件特征库中开源软件的特征信息与目标代码进行匹配,确定与目标代码匹配的目标特征信息;
第二确定模块703,用于根据目标特征信息确定目标代码对应的开源软件信息;
特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息;
第一确定模块702包括:
第二获取单元7021,用于获取开源软件特征库中各个开源软件的分叉点特征信息;
第四确定单元7022,用于确定目标代码对应的目标文件信息;
第二判断单元7023,用于判断各个开源软件的分叉点特征信息中是否存在与目标文件信息匹配的目标分叉点特征信息;
第五确定单元7024,用于当第二判断单元确定存在目标分叉点特征信息时,确定目标分叉点特征信息与目标代码匹配;
第二确定模块703包括:
第六确定单元7031,用于确定目标分叉点特征信息对应的第一开源软件以及目标分叉点特征信息对应的第一开源软件的版本号与目标代码对应。
本申请实施例中,第一确定模块702将开源软件特征库中开源软件的特征信息与目标代码进行匹配,然后第二确定模块703根据与目标代码匹配的目标特征信息识别出目标代码对应的开源软件信息。其中,特征信息可以包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息指的是开源软件的初始版本对应的文件信息和开源软件的初始版本相对于之前的版本新增的文件信息,分叉点特征信息指的是非初始版本相对于之前的版本修改的文件信息,无效特征信息是开源软件从初始版本到当前最新版本未修改过的文件信息,根据这些特征信息识别装置就可以识别出与目标代码所使用的开源软件及其版本,不需要进行全量的比对,提升了识别效率。
其次,本实施例中,识别装置提供了另一种识别目标代码对应的开源软件及其版本的方式,提高了方案的灵活性。
上面从功能模块的角度介绍了本申请中的识别装置,下面从实体硬件的角度对本申请中的识别装置进行介绍,请参阅图8,本申请中识别装置的结构示意图。识别装置80可包括输入设备810、输出设备820、处理器830和存储器840。
存储器840可以包括只读存储器和随机存取存储器,并向处理器830提供指令和数据。存储器840的一部分还可以包括非易失性随机存取存储器(Non-Volatile RandomAccess Memory,NVRAM)。
存储器840存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
本实施例中,处理器830用于:获取待识别的目标代码,然后将开源软件特征库中的特征信息与目标代码进行匹配,确定与目标代码匹配的目标特征信息,根据该目标特征信息确定目标代码对应的开源软件信息;
其中,特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;端点特征信息包括开源软件的初始版本对应的文件信息和/或开源软件的非初始版本相对于之前的版本新增的文件信息;分叉点特征信息包括开源软件的非初始版本相对于之前的版本修改的文件信息;无效特征信息包括开源软件从初始版本到当前最新版本未修改过的文件信息。
作为一种可选的方式,处理器830用于确定目标特征信息时,具体用于:确定目标代码对应的目标文件信息,并获取开源软件特征库中各个开源软件的端点特征信息,然后判断这些端点特征信息中是否存在于目标文件信息匹配的目标端点特征信息,若存在,则这些目标端点特征信息就是与目标代码匹配的目标特征信息;
对应地,处理器确830用于确定目标代码对应的开源软件信息时,具体用于:将目标端点特征信息所属的开源软件(第一开源软件)的信息确定为目标代码对应的开源软件信息。
作为一种可选的方式,处理器830还用于:定目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号,将这些版本号中的最高版本号确定为目标版本号,然后获取开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点特征信息对应的版本号就是目标代码对应的开源软件的版本号。
作为一种可选的方式,处理器830还用于:获取开源软件特征库中第一开源软件的无效特征信息,判断第一开源软件的无效特征信息中是否存在与目标文件信息匹配的目标无效特征信息,若是,则确定第一开源软件的无效特征信息中除了目标无效特征信息以外的其他无效特征信息在目标代码中被修改了。
作为一种可选的方式,处理器830用于确定目标端点特征信息时,具体用于:确定目标代码对应的目标文件信息,并获取开源软件特征库中各个开源软件的分叉点特征信息,判断这些分叉点特征信息中是否存在于目标文件信息匹配的目标分叉点特征信息,若存在,则这个目标分叉点信息就是与目标代码匹配的目标特征信息;
对应地,处理器确830用于确定目标代码对应的开源软件信息时,具体用于:确定目标分叉点特征信息所属的第一开源软件以及目标分叉点特征信息对应的第一开源软件的版本号与目标代码对应,即目标代码对应的开源软件为第一开源软件,目标对应的开源软件版本号为目标分叉点信息对应的版本号。
处理器830控制识别装置80的操作,处理器830还可以称为中央处理单元(英文全称:Central Processing Unit,英文缩写:CPU)。存储器840可以包括只读存储器和随机存取存储器,并向处理器830提供指令和数据。存储器840的一部分还可以包括NVRAM。具体的应用中,识别装置80的各个组件通过总线系统850耦合在一起,其中总线系统850除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统850。
上述本申请实施例揭示的方法可以应用于处理器830中,或者由处理器830实现。处理器830可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器830中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器830可以是通用处理器、数字信号处理器(英文全称:Digital Signal Processing,英文缩写:DSP)、专用集成电路(英文全称:Application Specific Integrated Circuit,英文缩写:ASIC)、现成可编程门阵列(英文全称:Field-Programmable Gate Array,英文缩写:FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器840,处理器830读取存储器840中的信息,结合其硬件完成上述方法的步骤。
图8的相关描述可以参阅图2方法部分的相关描述和效果进行理解,本处不做过多赘述。
本申请实施例还提供了一种计算机存储介质,该计算机存储介质用于储存为上述识别装置所用的计算机软件指令。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现上述图1以及图2所示开源软件识别方法中的流程。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:Read-OnlyMemory,英文缩写:ROM)、随机存取存储器(英文全称:Random Access Memory,英文缩写:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (12)
1.一种开源软件识别方法,其特征在于,包括:
获取待识别的目标代码;
将开源软件特征库中开源软件的特征信息与所述目标代码进行匹配,确定与所述目标代码匹配的目标特征信息,所述特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;所述端点特征信息包括所述开源软件的初始版本对应的文件信息和/或所述开源软件的非初始版本相对于之前的版本新增的文件信息;所述分叉点特征信息包括所述开源软件的非初始版本相对于之前的版本修改的文件信息;所述无效特征信息包括所述开源软件从初始版本到当前最新版本未修改过的文件信息;
根据所述目标特征信息确定所述目标代码对应的开源软件信息。
2.根据权利要求1所述的方法,其特征在于,所述将开源软件特征库中开源软件的特征信息与所述目标代码进行匹配包括:
获取所述开源软件特征库中各个开源软件的端点特征信息,并确定所述目标代码对应的目标文件信息;
判断所述开源软件特征库中是否存在与所述目标文件信息对应的第一开源软件的目标端点特征信息;
若是,则确定所述目标端点特征信息与所述目标代码匹配;
所述根据所述目标特征信息确定所述目标代码对应的开源软件信息包括:
根据所述目标端点特征信息确定所述第一开源软件的信息为所述目标代码对应的开源软件信息。
3.根据权利要求2所述的方法,其特征在于,所述确定所述目标端点特征信息与所述目标代码匹配之后,所述方法还包括:确定所述目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号;
确定所述第一开源软件的版本号中的目标版本号,所述目标版本号为所述目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号中的最高版本号;
确定目标版本号是否为开源软件特征库中第一开源软件对应的所有版本号中最高的版本号;
若是,则确定目标版本号为目标代码对应的开源软件的版本号;
若否,则获取所述开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息;
判断所述第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息中是否存在与所述目标文件信息匹配的目标分叉点特征信息;
若是,则确定所述目标分叉点特征信息对应的第一开源软件的版本号为所述目标代码对应的开源软件的版本号。
4.根据权利要求2或3所述的方法,其特征在于,所述确定所述目标端点特征信息与所述目标代码匹配之后,所述方法还包括:
获取所述开源软件特征库中第一开源软件的无效特征信息;判断所述第一开源软件的无效特征信息中是否存在与所述目标文件信息匹配的目标无效特征信息;
若是,则确定所述第一开源软件的无效特征信息中除了所述目标无效特征信息以外的其他无效特征信息在所述目标代码中被修改。
5.根据权利要求1所述的方法,其特征在于,所述将开源软件特征库中开源软件的特征信息与所述目标代码进行匹配包括:
获取所述开源软件特征库中各个开源软件的分叉点特征信息,并确定所述目标代码对应的目标文件信息;
判断所述各个开源软件的分叉点特征信息中是否存在与所述目标文件信息匹配的目标分叉点特征信息;
若是,则确定所述目标分叉点特征信息与所述目标代码匹配;
所述根据所述目标特征信息确定所述目标代码对应的开源软件信息包括:
确定所述目标分叉点特征信息对应的第一开源软件以及所述目标分叉点特征信息对应的第一开源软件的版本号与所述目标代码对应。
6.一种识别装置,其特征在于,包括:
第一获取模块,用于获取待识别的目标代码;
第一确定模块,用于将开源软件特征库中开源软件的特征信息与所述目标代码进行匹配,确定与所述目标代码匹配的目标特征信息,所述特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;所述端点特征信息包括所述开源软件的初始版本对应的文件信息和/或所述开源软件的非初始版本相对于之前的版本新增的文件信息;所述分叉点特征信息包括所述开源软件的非初始版本相对于之前的版本修改的文件信息;所述无效特征信息包括所述开源软件从初始版本到当前最新版本未修改过的文件信息;
第二确定模块,用于根据所述目标特征信息确定所述目标代码对应的开源软件信息。
7.根据权利要求6所述的装置,其特征在于,所述第一确定模块包括:
第一获取单元,用于获取所述开源软件特征库中各个开源软件的端点特征信息;
第一确定单元,用于确定所述目标代码对应的目标文件信息;
第一判断单元,用于判断所述开源软件特征库中是否存在与所述目标文件信息对应的第一开源软件的目标端点特征信息;
第二确定单元,用于当所述第一判断单元确定存在目标端点特征信息时,确定所述目标端点特征信息与所述目标代码匹配;
所述第二确定模块包括:
第三确定单元,用于根据所述目标端点特征信息确定所述第一开源软件的信息为所述目标代码对应的开源软件信息。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第三确定模块,用于确定所述目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号;
第四确定模块,用于确定所述第一开源软件的版本号中的目标版本号,所述目标版本号为所述目标端点特征信息中各个端点特征信息对应的第一开源软件的版本号中的最高版本号;确定目标版本号是否是开源软件特征库中第一开源软件对应的所有版本号中最高的版本号;若是,则确定目标版本号为目标代码对应的开源软件的版本号;
第二获取模块,用于若目标版本号不是开源软件特征库中第一开源软件对应的所有版本号中最高的版本号,获取所述开源软件特征库中第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息;
第一判断模块,用于判断所述第一开源软件的目标版本号以及目标版本号之后的版本号所对应的分叉点特征信息中是否存在与所述目标文件信息匹配的目标分叉点特征信息;
第五确定模块,用于当所述第一判断模块确定存在目标分叉点特征信息时,确定所述目标分叉点特征信息对应的第一开源软件的版本号为所述目标代码对应的开源软件的版本号。
9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括:
第三获取模块,用于获取所述开源软件特征库中第一开源软件的无效特征信息;
第二判断模块,用于判断所述第一开源软件的无效特征信息中是否存在与所述目标文件信息匹配的目标无效特征信息;
第六确定模块,用于当所述第二判断模块确定存在目标无效特征信息时,确定所述第一开源软件的无效特征信息中除了所述目标无效特征信息以外的其他无效特征信息在所述目标代码中被修改。
10.根据权利要求6所述的装置,其特征在于,所述第一确定模块包括:
第二获取单元,用于获取所述开源软件特征库中各个开源软件的分叉点特征信息;
第四确定单元,用于确定所述目标代码对应的目标文件信息;
第二判断单元,用于判断所述各个开源软件的分叉点特征信息中是否存在与所述目标文件信息匹配的目标分叉点特征信息;
第五确定单元,用于当所述第二判断单元确定存在目标分叉点特征信息时,确定所述目标分叉点特征信息与所述目标代码匹配;
所述第二确定模块包括:
第六确定单元,用于确定所述目标分叉点特征信息对应的第一开源软件以及所述目标分叉点特征信息对应的第一开源软件的版本号与所述目标代码对应。
11.一种识别装置,其特征在于,包括:处理器及存储器;
所述存储器用于存储程序;
所述处理器用于执行所述程序,具体包括如下步骤:
获取待识别的目标代码;
将开源软件特征库中开源软件的特征信息与所述目标代码进行匹配,确定与所述目标代码匹配的目标特征信息,所述特征信息包括如下至少一项:端点特征信息,分叉点特征信息,无效特征信息;所述端点特征信息包括所述开源软件的初始版本对应的文件信息和/或所述开源软件的非初始版本相对于之前的版本新增的文件信息;所述分叉点特征信息包括所述开源软件的非初始版本相对于之前的版本修改的文件信息;所述无效特征信息包括所述开源软件从初始版本到当前最新版本未修改过的文件信息;
根据所述目标特征信息确定所述目标代码对应的开源软件信息。
12.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-5任意一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711463010.9A CN109977675B (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
CN202210801205.4A CN115357897A (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711463010.9A CN109977675B (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210801205.4A Division CN115357897A (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109977675A CN109977675A (zh) | 2019-07-05 |
CN109977675B true CN109977675B (zh) | 2022-08-16 |
Family
ID=67075000
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711463010.9A Active CN109977675B (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
CN202210801205.4A Pending CN115357897A (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210801205.4A Pending CN115357897A (zh) | 2017-12-28 | 2017-12-28 | 一种开源软件识别方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN109977675B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110659502B (zh) * | 2019-09-05 | 2021-09-28 | 中国科学院软件研究所 | 一种基于文本信息关联关系分析的项目版本检测方法及系统 |
CN112965741A (zh) * | 2021-02-10 | 2021-06-15 | 中国工商银行股份有限公司 | 变更程序识别方法及装置 |
CN113360178B (zh) * | 2021-05-31 | 2023-05-05 | 东风商用车有限公司 | 软件唯一识别码生成方法、装置、设备及可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1918839A1 (de) * | 2006-11-03 | 2008-05-07 | Siemens Aktiengesellschaft | Modifizieren eines Softwarestands einer Steuergerätesoftware für ein Steuergerät und Erkennen einer solchen Modifikation |
CN101751473A (zh) * | 2009-12-31 | 2010-06-23 | 中兴通讯股份有限公司 | 一种修改记录项的查找、更新和同步方法及数据同步设备 |
US8359655B1 (en) * | 2008-10-03 | 2013-01-22 | Pham Andrew T | Software code analysis and classification system and method |
CN103559449A (zh) * | 2013-11-15 | 2014-02-05 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN106446691A (zh) * | 2016-11-24 | 2017-02-22 | 工业和信息化部电信研究院 | 检测软件中集成或定制的开源项目漏洞的方法和装置 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9207933B2 (en) * | 2006-10-10 | 2015-12-08 | International Business Machines Corporation | Identifying authors of changes between multiple versions of a file |
US20080209399A1 (en) * | 2007-02-27 | 2008-08-28 | Michael Bonnet | Methods and systems for tracking and auditing intellectual property in packages of open source software |
US8479161B2 (en) * | 2009-03-18 | 2013-07-02 | Oracle International Corporation | System and method for performing software due diligence using a binary scan engine and parallel pattern matching |
US8498982B1 (en) * | 2010-07-07 | 2013-07-30 | Openlogic, Inc. | Noise reduction for content matching analysis results for protectable content |
CN101901160B (zh) * | 2010-08-11 | 2015-06-03 | 中兴通讯股份有限公司 | 版本升级软件包的打包方法及装置 |
US9104796B2 (en) * | 2012-12-21 | 2015-08-11 | International Business Machines Corporation | Correlation of source code with system dump information |
CN105446723B (zh) * | 2014-09-02 | 2018-11-23 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
US9639350B2 (en) * | 2014-12-15 | 2017-05-02 | Red Hat, Inc. | Tagging non-upstream source code |
US9436463B2 (en) * | 2015-01-12 | 2016-09-06 | WhiteSource Ltd. | System and method for checking open source usage |
US10289532B2 (en) * | 2015-04-08 | 2019-05-14 | Opshub, Inc. | Method and system for providing delta code coverage information |
CN106815135B (zh) * | 2015-11-30 | 2021-04-06 | 阿里巴巴集团控股有限公司 | 漏洞检测方法及装置 |
-
2017
- 2017-12-28 CN CN201711463010.9A patent/CN109977675B/zh active Active
- 2017-12-28 CN CN202210801205.4A patent/CN115357897A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1918839A1 (de) * | 2006-11-03 | 2008-05-07 | Siemens Aktiengesellschaft | Modifizieren eines Softwarestands einer Steuergerätesoftware für ein Steuergerät und Erkennen einer solchen Modifikation |
US8359655B1 (en) * | 2008-10-03 | 2013-01-22 | Pham Andrew T | Software code analysis and classification system and method |
CN101751473A (zh) * | 2009-12-31 | 2010-06-23 | 中兴通讯股份有限公司 | 一种修改记录项的查找、更新和同步方法及数据同步设备 |
CN103559449A (zh) * | 2013-11-15 | 2014-02-05 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN106446691A (zh) * | 2016-11-24 | 2017-02-22 | 工业和信息化部电信研究院 | 检测软件中集成或定制的开源项目漏洞的方法和装置 |
Non-Patent Citations (3)
Title |
---|
Git可视化教程--Git Gui的使用;廿半;《Git可视化教程--Git Gui的使用,https://blog.csdn.net/qq_34842671/article/details/70916587》;20170428;第1页 * |
Git详解,https://www.cnblogs.com/deman/p/6367878.html,https://www.jianshu.com/p/382abb427ca9;Joyfulmath/七弦桐语;《Git详解》;20170205;第13-34页 * |
面向开源软件的演化确认方法;韩俊明等;《计算机科学与探索》;20160627(第04期);第33-49页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109977675A (zh) | 2019-07-05 |
CN115357897A (zh) | 2022-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10339315B2 (en) | Apparatus and method for detecting malicious mobile app | |
CN110825363B (zh) | 智能合约获取方法、装置、电子设备及存储介质 | |
CN109977675B (zh) | 一种开源软件识别方法及装置 | |
US20170286692A1 (en) | Vulnerability finding device, vulnerability finding method, and vulnerability finding program | |
CN112527816A (zh) | 数据血缘关系解析方法、系统、计算机设备及存储介质 | |
CN107797854B (zh) | 交易文件处理方法、装置、存储介质和计算机设备 | |
CN111967017B (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
US10055583B2 (en) | Method and apparatus for processing file | |
US10394763B2 (en) | Method and device for generating pileup file from compressed genomic data | |
WO2018121464A1 (zh) | 一种病毒检测方法及装置、存储介质 | |
CN111124480A (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
EP4232915A1 (en) | Code similarity search | |
US20170141922A1 (en) | Incremental upgrade method and system for file | |
US20120011083A1 (en) | Product-Centric Automatic Software Identification in z/OS Systems | |
CN114879985B (zh) | 一种证书文件的安装方法、装置、设备及存储介质 | |
CN109002710B (zh) | 一种检测方法、装置及计算机可读存储介质 | |
US20180260303A1 (en) | Method and device for determining usage log | |
WO2020231413A1 (en) | Methodology for trustworthy software build | |
US9158537B2 (en) | Streamlining hardware initialization code | |
US10210334B2 (en) | Systems and methods for software integrity assurance via validation using build-time integrity windows | |
CN114924742A (zh) | 用于虚拟机模拟软件的热补丁制作和应用方法、装置 | |
CN109308299B (zh) | 用于搜索信息的方法和装置 | |
CN111104671B (zh) | 应用的标识确定方法和应用的检测方法 | |
CN111783131A (zh) | 数据保护方法、计算机设备及计算机可读存储介质 | |
WO2019080426A1 (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211223 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Applicant after: Super fusion Digital Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |