本技术涉及计算机,尤其涉及一种软件成分分析方法、装置及设备。
背景技术:
1、随着互联网技术的发展,软件在各个领域中发挥着重要作用。软件开发的复杂性不断增加,为了提高软件开发效率,在软件开发中引入了第三方组件或开源组件,而这些第三方组件往往存在潜在的安全漏洞和风险。因此,在软件发布之前,需要对软件进行软件成分分析,基于软件成分进行安全检测,从而确保软件的安全性。
2、但目前的软件成分分析技术是通过对软件的源代码文件进行静态扫描的方式,确定软件所依赖的开源组件。但在实际应用中,这种方式检测得到的软件成分存在误检、漏检的情况,软件成分分析的准确性较低。
技术实现思路
1、本技术提供一种软件成分分析方法、装置及设备,用于提高软件成分分析的准确性。
2、第一方面,本技术实施例提供一种软件成分分析方法,包括:在目标软件运行过程中,监测并采集所述目标软件中正在加载的类文件信息;从所述类文件信息中,提取所述目标软件在运行过程中使用的n个开源组件以及所述n个开源组件的组件信息;根据所述n个开源组件的组件信息和预设的组件库,确定所述目标软件的第一成分信息,所述组件库包括开源组件与唯一标识的对应关系,所述第一成分信息包括n个开源组件、所述n个开源组件的唯一标识和组件信息,n为正整数;根据所述第一成分信息,确定所述目标软件的软件成分信息。
3、在本技术实施例中,由于开源组件在目标软件中实现相应功能是通过类文件加载的方式实现,通过在目标软件的运行过程中,监测目标软件中正在加载的类文件信息,从而可从类文件信息提取得到目标软件在运行过程中所使用的n个开源组件,相较于现有技术中的静态检测的方式,本技术实施例中的动态监测方式可准确地监测到目标软件在运行过程中所使用的开源组件,即提高了软件成分分析的准确性。
4、在一种可能的实施方式中,所述组件库包括第一组件库和第二组件库,所述第一组件库为开源组件的参考元信息库,所述第二组件库为开源组件的参考五元组信息库;根据所述n个开源组件的组件信息和预设的组件库,确定所述目标软件的第一成分信息,包括:将所述n个开源组件中每个开源组件的组件信息与所述第一组件库进行匹配,记录所述n个开源组件中与所述第一组件库匹配成功的开源组件的唯一标识,并将所述n个开源组件中未与所述第一组件库匹配成功的开源组件确定为未知开源组件;根据所述未知开源组件在所述目标软件中的五元组信息和所述第二组件库,确定所述未知开源组件的唯一标识。
5、在一种可能的实施方式中,所述五元组信息包括所述未知开源组件对应的类名称、方法名、参数信息、类路径信息和引入依赖信息;根据所述未知开源组件在所述目标软件中的五元组信息和所述第二组件库,确定所述未知开源组件的唯一标识,包括:根据所述类名称、所述方法名和所述参数信息,确定所述第二组件库中是否存在候选开源组件,所述候选开源组件与所述未知开源组件的类名称、方法名和参数信息相同;若存在所述候选开源组件,则根据所述类路径信息、所述引入依赖信息和所述候选开源组件的五元组信息,确定所述未知开源组件的唯一标识;若不存在所述候选开源组件,则根据所述未知开源组件在所述目标软件中的类目录结构信息、方法返回值类型、参数数量和参数类型,从所述第二组件库中确定与所述未知开源组件匹配的唯一标识。
6、在一种可能的实施方式中,根据所述第一成分信息,确定所述目标软件的软件成分信息,包括:根据每个开源组件的唯一标识,确定所述第一成分信息和第二成分信息包括的开源组件是否相同,所述第二成分信息是对所述目标软件进行静态检测得到的,所述第二成分信息包括m个开源组件、所述m个开源组件的组件信息和唯一标识,m为正整数;若相同,则将所述n个开源组件、所述n个开源组件的组件信息和唯一标识与所述m个开源组件的组件信息融合后,确定为所述目标软件的软件成分信息;若不相同,则根据每个开源组件的唯一标识,确定所述m个开源组件中与所述n个开源组件匹配的目标开源组件,并将所述目标开源组件在所述第二成分信息中的组件信息和所述第一成分信息融合后,确定为所述目标软件的软件成分信息。
7、在一种可能的实施方式中,所述方法还包括:对所述目标软件的源代码文件和可执行文件进行静态扫描,获得所述目标软件的所述第二成分信息。
8、第二方面,本技术实施例提供一种软件成分分析装置,包括:监测模块,用于在目标软件运行过程中,监测并采集所述目标软件中正在加载的类文件信息;提取模块,用于从所述类文件信息中,提取所述目标软件在运行过程中使用的n个开源组件以及所述n个开源组件的组件信息;确定模块,用于根据所述n个开源组件的组件信息和预设的组件库,确定所述目标软件的第一成分信息,所述组件库包括开源组件与唯一标识的对应关系,所述第一成分信息包括n个开源组件、所述n个开源组件的唯一标识和组件信息,n为正整数;所述确定模块,还用于根据所述第一成分信息,确定所述目标软件的软件成分信息。
9、在一种可能的实施方式中,所述组件库包括第一组件库和第二组件库,所述第一组件库为开源组件的参考元信息库,所述第二组件库为开源组件的参考五元组信息库;所述确定模块,具体用于:将所述n个开源组件中每个开源组件的组件信息与所述第一组件库进行匹配,记录所述n个开源组件中与所述第一组件库匹配成功的开源组件的唯一标识,并将所述n个开源组件中未与所述第一组件库匹配成功的开源组件确定为未知开源组件;根据所述未知开源组件在所述目标软件中的五元组信息和所述第二组件库,确定所述未知开源组件的唯一标识。
10、在一种可能的实施方式中,所述五元组信息包括所述未知开源组件对应的类名称、方法名、参数信息、类路径信息和引入依赖信息;所述确定模块,具体用于:根据所述类名称、所述方法名和所述参数信息,确定所述第二组件库中是否存在候选开源组件,所述候选开源组件与所述未知开源组件的类名称、方法名和参数信息相同;若存在所述候选开源组件,则根据所述类路径信息、所述引入依赖信息和所述候选开源组件的五元组信息,确定所述未知开源组件的唯一标识;若不存在所述候选开源组件,则根据所述未知开源组件在所述目标软件中的类目录结构信息、方法返回值类型、参数数量和参数类型,从所述第二组件库中确定与所述未知开源组件匹配的唯一标识。
11、在一种可能的实施方式中,所述确定模块,具体用于:根据每个开源组件的唯一标识,确定所述第一成分信息和第二成分信息包括的开源组件是否相同,所述第二成分信息是对所述目标软件进行静态检测得到的,所述第二成分信息包括m个开源组件、所述m个开源组件的组件信息和唯一标识,m为正整数;若相同,则将所述n个开源组件、所述n个开源组件的组件信息和唯一标识与所述m个开源组件的组件信息融合后,确定为所述目标软件的软件成分信息;若不相同,则根据每个开源组件的唯一标识,确定所述m个开源组件中与所述n个开源组件匹配的目标开源组件,并将所述目标开源组件在所述第二成分信息中的组件信息和所述第一成分信息融合后,确定为所述目标软件的软件成分信息。
12、在一种可能的实施方式中,所述软件成分装置还包括静态检测模块,用于对所述目标软件的源代码文件和可执行文件进行静态扫描,获得所述目标软件的所述第二成分信息。
13、第三方面,本技术实施例提供一种软件成分分析设备,包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令实现如第一方面及任一可能的实施方式所述的方法。
14、第四方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如第一方面及任一可能的实施方式所述的方法。
15、第五方面,本技术实施例提供一种计算机程序产品,包含有计算机指令,当其在计算机上运行时,使得上述如第一方面及任一可能的实施方式所述的方法被实现。
16、关于第二方面至第五方面的有益效果可对应参照前文第一方面所述的内容,此处不再赘述。