组件识别方法、装置、电子设备及存储介质转让专利

申请号 : CN202311725580.6

文献号 : CN117406967B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 左利

申请人 : 卓望数码技术(深圳)有限公司

摘要 :

本发明实施例提供了一种组件识别方法、装置、电子设备和存储介质。上述方法包括:对软件产品进行切片采集,获取软件产品的第一代码切片;在第一代码切片不为预设的黑名单切片的情况下,解析第一代码切片,获得第一代码切片对应的组件特征;根据预设的组件特征库和第一代码切片对应的组件特征,确定软件产品对应的组件识别结果;组件识别结果用于表征软件产品包括的第三方组件。在上述过程中,不需要解析软件产品中的源码或二进制包即可生成软件产品对应的组件识别结果,确定软件产品包括的第三方组件,以此扩展了组件识别的使用场景,且提高了组件识别结果的准确性。

权利要求 :

1.一种组件识别方法,其特征在于,包括:

对软件产品进行切片采集,获取所述软件产品的第一代码切片;

在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征;

根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果;所述组件识别结果用于表征所述软件产品包括的第三方组件;

所述根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果,包括:所述组件特征库包括特征基本表和特征增量表,所述特征基本表存储有组件特征与组件编号之间的映射关系;

所述特征增量表存储有编号与组件版本之间的映射关系,以及增量类型,其中,所述增量类型包括文件夹类型、文件类型和改变文件类型;

在所述特征基本表中对所述第一代码切片对应的组件特征进行查询;

在查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,根据所述特征增量表,确定所述软件产品对应的组件识别结果;

所述根据所述特征增量表,确定所述软件产品对应的组件识别结果,包括:

在所述特征增量表中对所述组件编号进行查询;

若查询得到与所述组件编号存在映射关系的唯一组件版本,则确定所述组件编号关联的组件为所述软件产品包括的第三方组件;

若查询得到与所述组件编号存在映射关系的多个组件版本,则基于第二代码切片,确定所述软件产品对应的组件识别结果;所述第二代码切片基于对所述第一代码切片进行扩大切片处理得到,且所述第二代码切片对应的数据量大于所述第一代码切片对应的数据量;

所述基于第二代码切片,确定所述软件产品对应的组件识别结果,包括:

对所述第一代码切片进行扩大切片处理,得到所述第二代码切片;

获取所述第二代码切片对应的切片信息;所述切片信息包括所述第二代码切片所属数据包中的文件夹、所述第二代码切片所属数据包中的文件以及所述第二代码切片所属数据包对应的哈希值;

基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果;

所述基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果,包括:在所述第二代码切片对应的切片信息和所述特征增量表符合预设条件的情况下,确定所述第二代码切片关联的组件为所述软件产品包括的第三方组件;

其中,所述预设条件包括以下任意一项:

所述第二代码切片所属数据包中的文件夹与所述文件夹类型匹配;

所述第二代码切片所属数据包中的文件与所述文件类型匹配;

所述第二代码切片所属数据包对应的哈希值与所述改变文件类型匹配;

在未查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,重新对所述软件产品进行切片采集。

2.根据权利要求1所述的方法,其特征在于,所述在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征之前,所述方法还包括:获取所述第一代码切片对应的组件识别路径;

在预设的过滤黑名单中对所述第一代码切片对应的组件路径进行查询;

若未查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片不为预设的黑名单切片;

若查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片为预设的黑名单切片;

其中,所述过滤黑名单存储有黑名单切片对应的组件路径。

3.根据权利要求1所述的方法,其特征在于,所述对软件产品进行切片采集,获取所述软件产品的第一代码切片之后,所述方法还包括:在所述第一代码切片为预设的黑名单切片的情况下,重新对所述软件产品进行切片采集。

4.一种组件识别装置,其特征在于,包括:

第一采集模块,用于对软件产品进行切片采集,获取所述软件产品的第一代码切片;

解析模块,用于在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征;

第一确定模块,用于根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果;所述组件识别结果用于表征所述软件产品包括的第三方组件;所述根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果,包括:所述组件特征库包括特征基本表和特征增量表,所述特征基本表存储有组件特征与组件编号之间的映射关系;所述特征增量表存储有编号与组件版本之间的映射关系,以及增量类型,其中,所述增量类型包括文件夹类型、文件类型和改变文件类型;在所述特征基本表中对所述第一代码切片对应的组件特征进行查询;在查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,根据所述特征增量表,确定所述软件产品对应的组件识别结果;所述根据所述特征增量表,确定所述软件产品对应的组件识别结果,包括:在所述特征增量表中对所述组件编号进行查询;若查询得到与所述组件编号存在映射关系的唯一组件版本,则确定所述组件编号关联的组件为所述软件产品包括的第三方组件;若查询得到与所述组件编号存在映射关系的多个组件版本,则基于第二代码切片,确定所述软件产品对应的组件识别结果;所述第二代码切片基于对所述第一代码切片进行扩大切片处理得到,且所述第二代码切片对应的数据量大于所述第一代码切片对应的数据量;所述基于第二代码切片,确定所述软件产品对应的组件识别结果,包括:对所述第一代码切片进行扩大切片处理,得到所述第二代码切片;获取所述第二代码切片对应的切片信息;所述切片信息包括所述第二代码切片所属数据包中的文件夹、所述第二代码切片所属数据包中的文件以及所述第二代码切片所属数据包对应的哈希值;基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果;所述基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果,包括:在所述第二代码切片对应的切片信息和所述特征增量表符合预设条件的情况下,确定所述第二代码切片关联的组件为所述软件产品包括的第三方组件;其中,所述预设条件包括以下任意一项:所述第二代码切片所属数据包中的文件夹与所述文件夹类型匹配;所述第二代码切片所属数据包中的文件与所述文件类型匹配;

所述第二代码切片所属数据包对应的哈希值与所述改变文件类型匹配;在未查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,重新对所述软件产品进行切片采集。

5.一种电子设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至3中任一项所述的组件识别方法的步骤。

6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3中任一项所述的组件识别方法的步骤。

说明书 :

组件识别方法、装置、电子设备及存储介质

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种组件识别方法、装置、电子设备及存储介质。

背景技术

[0002] 伴随信息化技术的广泛应用,软件研发需求呈爆发式增长,为了提升软件研发效率以及降低软件研发成本,当前开发人员广泛使用第三方开源组件来提升开发工作效率。然而,第三方组件可能存在安全风险,为此,在软件产品开发过程中,需要对软件产品包含的第三方组件进行组件识别。
[0003] 现有技术中的组件识别方法通常为提取软件产品中的源码或二进制包,通过解析源码或二进制包,确定软件产品中包含的第三方组件。然而,某些软件产品可能对源码或二进制包进行了加密,这导致不能准确的提取该软件产品的源码或二进制包,进而降低了组件识别结果的准确性。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种组件识别方法、装置、电子设备及存储介质,以解决现有的组件识别结果的准确性较低的技术问题。
[0005] 一种组件识别方法,包括:
[0006] 对软件产品进行切片采集,获取所述软件产品的第一代码切片;
[0007] 在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征;
[0008] 根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果;所述组件识别结果用于表征所述软件产品包括的第三方组件。
[0009] 可选地,所述在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征之前,所述方法还包括:
[0010] 获取所述第一代码切片对应的组件识别路径;
[0011] 在预设的过滤黑名单中对所述第一代码切片对应的组件路径进行查询;
[0012] 若未查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片不为预设的黑名单切片;
[0013] 若查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片为预设的黑名单切片;
[0014] 其中,所述过滤黑名单存储有黑名单切片对应的组件路径。
[0015] 可选地,所述对软件产品进行切片采集,获取所述软件产品的第一代码切片之后,所述方法还包括:
[0016] 在所述第一代码切片为预设的黑名单切片的情况下,重新对所述软件产品进行切片采集。
[0017] 可选地,所述组件特征库包括特征基本表和特征增量表,所述特征基本表存储有组件特征与组件编号之间的映射关系;
[0018] 所述根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果,包括:
[0019] 在所述特征基本表中对所述第一代码切片对应的组件特征进行查询;
[0020] 在查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,根据所述特征增量表,确定所述软件产品对应的组件识别结果;
[0021] 在未查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,重新对所述软件产品进行切片采集。
[0022] 可选地,所述特征增量表存储有编号与组件版本之间的映射关系;
[0023] 所述根据所述特征增量表,确定所述软件产品对应的组件识别结果,包括:
[0024] 在所述特征增量表中对所述组件编号进行查询;
[0025] 若查询得到与所述组件编号存在映射关系的唯一组件版本,则确定所述组件编号关联的组件为所述软件产品包括的第三方组件;
[0026] 若查询得到与所述组件编号存在映射关系的多个组件版本,则基于第二代码切片,确定所述软件产品对应的组件识别结果;所述第二代码切片基于对所述第一代码切片进行扩大切片处理得到,且所述第二代码切片对应的数据量大于所述第一代码切片对应的数据量。
[0027] 可选地,所述基于第二代码切片,确定所述软件产品对应的组件识别结果,包括:
[0028] 对所述第一代码切片进行扩大切片处理,得到所述第二代码切片;
[0029] 获取所述第二代码切片对应的切片信息;所述切片信息包括所述第二代码切片所属数据包中的文件夹、所述第二代码切片所属数据包中的文件以及所述第二代码切片所属数据包对应的哈希值;
[0030] 基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果。
[0031] 可选地,所述特征增量表还存储有增量类型,所述增量类型包括文件夹类型、文件类型和改变文件类型;
[0032] 所述基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果,包括:
[0033] 在所述第二代码切片对应的切片信息和所述特征增量表符合预设条件的情况下,确定所述第二代码切片关联的组件为所述软件产品包括的第三方组件;
[0034] 其中,所述预设条件包括以下任意一项:
[0035] 所述第二代码切片所属数据包中的文件夹与所述文件夹类型匹配;
[0036] 所述第二代码切片所属数据包中的文件与所述文件类型匹配;
[0037] 所述第二代码切片所属数据包对应的哈希值与所述改变文件类型匹配。
[0038] 一种组件识别装置,包括:
[0039] 第一采集模块,用于对软件产品进行切片采集,获取所述软件产品的第一代码切片;
[0040] 解析模块,用于在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征;
[0041] 第一确定模块,用于根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果;所述组件识别结果用于表征所述软件产品包括的第三方组件。
[0042] 一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现上述组件识别方法。
[0043] 一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如上述组件识别方法。
[0044] 本发明实施例提供了一种组件识别方法、装置、电子设备和存储介质。本实施例中,通过对软件产品进行切片采集获得代码切片,进而根据预设的组件特征库和代码切片对应的组件特征,确定软件产品对应的组件识别结果。在上述过程中,不需要解析软件产品中的源码或二进制包即可生成软件产品对应的组件识别结果,确定软件产品包括的第三方组件,以此扩展了组件识别的使用场景,在无法提供软件产品的源码或二进制包的情况下,也能识别软件产品中的第三方组件,且提高了组件识别结果的准确性。

附图说明

[0045] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0046] 图1是本发明一实施例中组件识别方法的一应用环境示意图;
[0047] 图2是本发明一实施例中组件识别方法的流程示意图;
[0048] 图3是本发明一实施例中组件识别方法的应用流程图;
[0049] 图4是本发明一实施例中组件识别装置的一结构示意图;
[0050] 图5是本发明一实施例中电子设备的一示意图。

具体实施方式

[0051] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0052] 本实施例提供的组件识别方法,可应用在如图1的应用环境中,其中,客户端与服务端进行通信。其中,客户端包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
[0053] 如图2所示,在一实施例中,提供一种组件识别方法,以该方法应用在图1中的服务端为例进行说明,其中,上述服务端可以为组件识别装置,上述方法包括如下步骤:
[0054] S210,对软件产品进行切片采集,获取所述软件产品的第一代码切片。
[0055] 上述软件产品可以为应用程序,且上述软件产品为待进行组件识别的软件产品。
[0056] 可选地,可以采用JVM字节码插装技术无感知地接入运行态的应用程序进程中,对运行态程序进行一个代码切片采集,从而获取软件产品的第一代码切片。应理解,JVM字节码插装技术随着业务场景的触发而进行切片采集,所以这种模式也称之为最小运行态切片快照,即上述第一代码切片为最小代码切片。
[0057] S220,在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征。
[0058] 需要说明的是,预先设置有黑名单切片,上述黑名单切片为自定义的不需要进行组件识别的代码切片。
[0059] 本步骤中,在第一代码切片不为预设的黑名单切片的情况下,表示需要对第一代码切片关联的组件进行组件识别,则解析该第一代码切片,获得第一代码切片对应的组件特征。具体如何判断第一代码切片是否为黑名单切片的实施方式,请参阅后续实施例。
[0060] 应理解,在最小运行态的切片快照,即第一代码切片中,包含字节码信息,通过解析该字节码信息得到供应商标识和组件名称,其中,上述组件名称用于表征该第一代码切片关联的组件的名称,上述供应商表示用于表征该第一代码切片关联的组件的供应商,进而将上述供应商标识和组件名称确定为第一代码切片对应的组件特征。
[0061] 具体而言,通过表一可知,从字节码信息的class文件往后读取8个字节,获取到constant_pool_count即常量池数量,作为cpInfoOffsets数组,数组中的数据为当前常量在class中的偏移量,基于上述偏移量获取常量。在常量池数据全部遍历后完存入cpInfoOffsets变量中,此时位置access_flags。在当前位置偏移两位,获取当前类索引 this_class,即得到供应商标识和组件名称。
[0062] 表一:
[0063]
[0064] S230,根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果。
[0065] 需要说明的是,预先设置有组件特征库。本步骤中,在获得第一代码切片对应的组件特征之后,根据预设的组件特征库和第一代码切片对应的组件特征,确定软件产品对应的组件识别结果。其中,上述组件识别结果用于表征软件产品包括的第三方组件。
[0066] 本实施例中,通过对软件产品进行切片采集获得代码切片,进而根据预设的组件特征库和代码切片对应的组件特征,确定软件产品对应的组件识别结果。在上述过程中,不需要解析软件产品中的源码或二进制包即可生成软件产品对应的组件识别结果,确定软件产品包括的第三方组件,以此扩展了组件识别的使用场景,在无法提供软件产品的源码或二进制包的情况下,也能识别软件产品中的第三方组件,且提高了组件识别结果的准确性。
[0067] 以下,具体阐述如何判断第一代码切片是否为黑名单切片的实施方式:
[0068] 可选地,所述在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征之前,所述方法还包括:
[0069] 获取所述第一代码切片对应的组件识别路径;
[0070] 在预设的过滤黑名单中对所述第一代码切片对应的组件路径进行查询;
[0071] 若未查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片不为预设的黑名单切片;
[0072] 若查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片为预设的黑名单切片;
[0073] 其中,所述过滤黑名单存储有黑名单切片对应的组件路径。
[0074] 本实施例中,预先设置有过滤黑名单,该过滤黑名单存储有黑名单切片对应的组件路径,即存储有不需要进行组件识别的切片对应的组件路径。
[0075] 如上所述,第一代码切片包含字节码信息,在字节码信息中读取组件识别路径,并在预设的过滤黑名单中对第一代码切片对应的组件路径进行查询。
[0076] 若在过滤黑名单中未查询到第一代码切片对应的组件路径,则确定第一代码切片不为预设的黑名单切片;若在过滤黑名单中查询到第一代码切片对应的组件路径,则确定第一代码切片为预设的黑名单切片。
[0077] 其中,上述组件路径包括但不限于基础包路径和应用主体路径。
[0078] 本实施例中,由于过滤黑名单存储有黑名单切片对应的组件路径,因此在过滤黑名单中对第一代码切片对应的组件路径进行查询,可以准确的判断第一代码切片是否为不需要进行组件识别的黑名单切片。
[0079] 可选地,所述对软件产品进行切片采集,获取所述软件产品的第一代码切片之后,所述方法还包括:
[0080] 在所述第一代码切片为预设的黑名单切片的情况下,重新对所述软件产品进行切片采集。
[0081] 本实施例中,若第一代码切片为预设的黑名单切片,表示不需要对第一代码切片进行组件识别,则重新对软件产品进行切片采集,得到另一第一代码切片。
[0082] 可选地,所述组件特征库包括特征基本表和特征增量表,所述特征基本表存储有组件特征与组件编号之间的映射关系;
[0083] 所述根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果,包括:
[0084] 在所述特征基本表中对所述第一代码切片对应的组件特征进行查询;
[0085] 在查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,根据所述特征增量表,确定所述软件产品对应的组件识别结果;
[0086] 在未查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,重新对所述软件产品进行切片采集。
[0087] 需要说明的是,组件特征库包括特征基本表和特征增量表,上述特征基本表采用GAV坐标体系来标识组件,该坐标由供应商标识(groupId)、组件名称(artifactId)、组件版本(version)三元素组成组件的基本特征。
[0088] 请参阅表二,表二是特征基本表的一种表现形式:
[0089] 表二:
[0090]
[0091] 如表二所示,特征基本表包括组件编号、供应商标识、组件名称和版本号。如上所述,组件特征包括供应商标识和组件名称,即特征基本表存储有组件特征与组件编号之间的映射关系。
[0092] 本实施例中,在特征基本表中对对第一代码切片对应的组件特征进行查询,换言之,在特征基本表中对第一代码切片对应的供应商标识和组件名称进行查询。
[0093] 若在特征基本表中查询得到与第一代码切片对应的组件特征存在映射关系的组件编号,表示第一代码切片关联的组件为软件产品包括的第三方组件,则进一步的根据特征增量表,确定软件产品对应的组件识别结果。具体的如何根据特征增量表确定组件识别结果的技术方案,请参阅后续实施例。
[0094] 若未在特征基本表中查询得到与第一代码切片对应的组件特征存在映射关系的组件编号,表示第一代码切片关联的组件不是软件产品包括的第三方组件,则重新对软件产品进行切片采集,得到另一第一代码切片。
[0095] 本实施例中,组件特征库包括特征基本表和特征增量表,即组件特征库只存储某个组件版本特有的增量的特征信息,没有存储同一组件多个版本都有的相同的冗余特征信息,因此上述组件特征库占用的存储空间较少,节省了存储空间。在后续利用组件特征库进行组件识别的过程中,只需要比对各组件特有的增量信息即可实现组件识别,这减少了组件识别过程中特征匹配的次数,降低了计算量,进而提高了组件识别的效率。
[0096] 可选地,所述特征增量表存储有编号与组件版本之间的映射关系;
[0097] 所述根据所述特征增量表,确定所述软件产品对应的组件识别结果,包括:
[0098] 在所述特征增量表中对所述组件编号进行查询;
[0099] 若查询得到与所述组件编号存在映射关系的唯一组件版本,则确定所述组件编号关联的组件为所述软件产品包括的第三方组件;
[0100] 若查询得到与所述组件编号存在映射关系的多个组件版本,则基于第二代码切片,确定所述软件产品对应的组件识别结果;所述第二代码切片基于对所述第一代码切片进行扩大切片处理得到,且所述第二代码切片对应的数据量大于所述第一代码切片对应的数据量。
[0101] 需要说明的是,特征增量表存储有编号与组件版本之间的映射关系。
[0102] 本实施例中,通过特征基本表获得组件编号之后,将组件编号输入至特征增量表中进行查询。
[0103] 若在特征增量表中查询得到组件编号存在映射关系的唯一组件版本,则确定组件编号关联的组件为软件产品包括的第三方组件;若在特征增量表中查询得到组件编号存在映射关系的多个组件版本,则需要进一步的判断软件产品包括的第三方组件。
[0104] 具体而言,对第一代码切片进行扩大切片处理,获得第二代码切片,并基于该第二代码切片确定软件产品对应的组件识别结果。其中,上述第二代码切片对应的数据量大于第一代码切片对应的数据量。
[0105] 可选地,所述基于第二代码切片,确定所述软件产品对应的组件识别结果,包括:
[0106] 对所述第一代码切片进行扩大切片处理,得到所述第二代码切片;
[0107] 获取所述第二代码切片对应的切片信息;所述切片信息包括所述第二代码切片所属数据包中的文件夹、所述第二代码切片所属数据包中的文件以及所述第二代码切片所属数据包对应的哈希值;
[0108] 基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果。
[0109] 本实施例中,通过扩大切片快照方式对第一代码切片进行扩大切片处理,在第一代码切片的基础上再次进行切片采集得到扩大代码切片快照,即第二代码切片。根据第一代码切片中class文件所属的jar数据包的位置,获取jar数据包包括的文件夹、文件以及取jar数据包对应的哈希值,得到第二代码切片对应的切片信息。
[0110] 其中,第二代码切片对应的切片信息包括第二代码切片所属数据包中的文件夹,即jar数据包包括的文件夹;第二代码切片所属数据包中的文件,即jar数据包包括的文件;第二代码切片所属数据包对应的哈希值,即jar数据包对应的哈希值。
[0111] 进一步的,基于上述第二代码切片对应的切片信息和特征增量表,确定软件产品对应的组件识别结果。
[0112] 本实施例中,组件识别的过程中运用第一代码切片和第二代码切片,即运行态代码切片的最小代码切片快照与扩大代码切片快照作为互补,扩大组件识别范围。通过获取第二代码切片的切片信息,基于更多的切片特征进行组件识别,以此提高组件识别结果的准确性。
[0113] 可选地,所述特征增量表还存储有增量类型,所述增量类型包括文件夹类型、文件类型和改变文件类型;
[0114] 所述基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果,包括:
[0115] 在所述第二代码切片对应的切片信息和所述特征增量表符合预设条件的情况下,确定所述第二代码切片关联的组件为所述软件产品包括的第三方组件;
[0116] 其中,所述预设条件包括以下任意一项:
[0117] 所述第二代码切片所属数据包中的文件夹与所述文件夹类型匹配;
[0118] 所述第二代码切片所属数据包中的文件与所述文件类型匹配;
[0119] 所述第二代码切片所属数据包对应的哈希值与所述改变文件类型匹配。
[0120] 需要说明的是,特征增量表包括组件编号、增量类型、增量内容、文件md5值。其中增量类型有三种,新增文件夹,新增文件,改动文件,也就是说,特征增量表存储有增量类型,增量类型包括文件夹类型、文件类型和改变文件类型。
[0121] 请参阅表三,表三是特征基本表的一种表现形式:
[0122] 表三:
[0123]
[0124] 本实施例中,在特征增量表中对第二代码切片对应的切片信息进行查询,若第二代码切片对应的切片信息和特征增量表符合预设条件,则确定第二代码切片关联的组件为软件产品包括的第三方组件。
[0125] 可选地,上述预设条件包括以下任意一项:
[0126] 1、第二代码切片所属数据包中的文件夹与文件夹类型匹配。
[0127] 具体而言,若可以通过解析第二代码切片得到特征增量表中的文件夹,则确定第二代码切片所属数据包中的文件夹与文件夹类型匹配。
[0128] 2、第二代码切片所属数据包中的文件与文件类型匹配。
[0129] 具体而言,若可以通过解析第二代码切片得到特征增量表中的文件,则确定第二代码切片所属数据包中的文件夹与文件类型匹配。
[0130] 3、第二代码切片所属数据包对应的哈希值与改变文件类型匹配
[0131] 具体而言,读取第二代码切片所属数据包对应的哈希值,若上述哈希值与特征增量表中的哈希值相同,则确定第二代码切片所属数据包对应的哈希值与改变文件类型匹配。
[0132] 为便于理解整体的技术方案,请参阅图3,如图3所示,先通过S1步骤对软件产品进行切片处理,获取最小的切片快照,即第一代码切片。提取第一代码切片中的组件识别路径,即特征A。将上述组件识别路径与过滤黑名单中的路径进行比较,若过滤黑名单不包括上述组件识别路径,则在组件特征库中对上述特征A进行匹配,若特征A与组件特征库中的所有特征均不匹配,即通过特征基本表和特征增量表确定第一代码切片关联的组件不为第三方组件,则返回至S1步骤重新进行切片采集。若通过组件特征库确定第一代码切片关联的组件为软件产品包括的唯一第三方组件,则生成该软件产品对应的组件识别结果。若通过组件特征库确定第一代码切片关联的组件不是唯一第三方组件,则扩大切片快照范围得到第二代码切片,并应用组件特征库确定第二代码切片关联的组件是否为第三方组件,进而生成软件产品对应的组件识别结果。
[0133] 在一实施例中,提供一种组件识别装置,该组件识别装置与上述实施例中组件识别方法一一对应。如图4所示,该组件识别装置400包括采集模块410、解析模块420和第一确定模块430。
[0134] 各功能模块详细说明如下:
[0135] 第一采集模块410,用于对软件产品进行切片采集,获取所述软件产品的第一代码切片;
[0136] 解析模块420,用于在所述第一代码切片不为预设的黑名单切片的情况下,解析所述第一代码切片,获得所述第一代码切片对应的组件特征;
[0137] 第一确定模块430,用于根据预设的组件特征库和所述第一代码切片对应的组件特征,确定所述软件产品对应的组件识别结果;所述组件识别结果用于表征所述软件产品包括的第三方组件。
[0138] 可选地,所述组件识别装置400还包括:
[0139] 获取模块,用于获取所述第一代码切片对应的组件识别路径;
[0140] 查询模块,用于在预设的过滤黑名单中对所述第一代码切片对应的组件路径进行查询;
[0141] 第三确定模块,用于若未查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片不为预设的黑名单切片;
[0142] 第四确定模块,用于若查询得到所述第一代码切片对应的组件路径,则确定所述第一代码切片为预设的黑名单切片;
[0143] 其中,所述过滤黑名单存储有黑名单切片对应的组件路径。
[0144] 可选地,所述组件识别装置400还包括:
[0145] 第二采集模块,用于在所述第一代码切片为预设的黑名单切片的情况下,重新对所述软件产品进行切片采集。
[0146] 可选地,所述组件特征库包括特征基本表和特征增量表,所述特征基本表存储有组件特征与组件编号之间的映射关系;
[0147] 所述第一确定模块430,具体用于:
[0148] 在所述特征基本表中对所述第一代码切片对应的组件特征进行查询;
[0149] 在查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,根据所述特征增量表,确定所述软件产品对应的组件识别结果;
[0150] 在未查询得到与所述第一代码切片对应的组件特征存在映射关系的组件编号的情况下,重新对所述软件产品进行切片采集。
[0151] 可选地,所述特征增量表存储有编号与组件版本之间的映射关系;
[0152] 所述第一确定模块430,还具体用于:
[0153] 在所述特征增量表中对所述组件编号进行查询;
[0154] 若查询得到与所述组件编号存在映射关系的唯一组件版本,则确定所述组件编号关联的组件为所述软件产品包括的第三方组件;
[0155] 若查询得到与所述组件编号存在映射关系的多个组件版本,则基于第二代码切片,确定所述软件产品对应的组件识别结果;所述第二代码切片基于对所述第一代码切片进行扩大切片处理得到,且所述第二代码切片对应的数据量大于所述第一代码切片对应的数据量。
[0156] 可选地,所述第一确定模块430,还具体用于:
[0157] 对所述第一代码切片进行扩大切片处理,得到所述第二代码切片;
[0158] 获取所述第二代码切片对应的切片信息;所述切片信息包括所述第二代码切片所属数据包中的文件夹、所述第二代码切片所属数据包中的文件以及所述第二代码切片所属数据包对应的哈希值;
[0159] 基于所述第二代码切片对应的切片信息和所述特征增量表,确定所述软件产品对应的组件识别结果。
[0160] 可选地,所述特征增量表还存储有增量类型,所述增量类型包括文件夹类型、文件类型和改变文件类型;
[0161] 所述第一确定模块430,还具体用于:
[0162] 在所述第二代码切片对应的切片信息和所述特征增量表符合预设条件的情况下,确定所述第二代码切片关联的组件为所述软件产品包括的第三方组件;
[0163] 其中,所述预设条件包括以下任意一项:
[0164] 所述第二代码切片所属数据包中的文件夹与所述文件夹类型匹配;
[0165] 所述第二代码切片所属数据包中的文件与所述文件类型匹配;
[0166] 所述第二代码切片所属数据包对应的哈希值与所述改变文件类型匹配。
[0167] 关于组件识别装置的具体限定可以参见上文中对于组件识别方法的限定,在此不再赘述。上述组件识别装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于电子设备中的处理器中,也可以以软件形式存储于电子设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0168] 在一个实施例中,提供了一种电子设备,该电子设备可以是服务器,其内部结构图可以如图5所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括可读存储介质、内存储器。该可读存储介质存储有操作系统、计算机可读指令和数据库。该内存储器为可读存储介质中的操作系统和计算机可读指令的运行提供环境。该电子设备的数据库用于存储组件识别方法所涉及的数据。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机可读指令被处理器执行时以实现一种组件识别方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
[0169] 在一个实施例中,提供了一种电子设备,该电子设备可以是终端设备,其内部结构图可以如图5所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括可读存储介质。该可读存储介质存储有计算机可读指令。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机可读指令被处理器执行时以实现一种组件识别方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
[0170] 在一实施例中,提供了一种电子设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现如上述组件识别方法的步骤。
[0171] 在一实施例中,提供了一种可读存储介质,可读存储介质存储有计算机可读指令,计算机可读指令被处理器执行时实现如上述组件识别方法步骤。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
[0172] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0173] 以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。