System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种软件依赖关系检测方法及相关设备技术_技高网

一种软件依赖关系检测方法及相关设备技术

技术编号:43271557 阅读:8 留言:0更新日期:2024-11-12 15:58
本申请提供了一种软件依赖关系检测方法,该方法由软件开发平台执行,该方法包括:获取被测软件的代码文件;根据被测软件的代码文件,提取被测软件的特征集合,该被测软件的特征集合包括至少一个函数级的特征;将被测软件的特征集合与软件特征库中软件的特征集合进行匹配,从软件特征库中确定被测软件的多个引用软件;根据多个引用软件的特征集合中的函数调用信息,确定被测软件与多个引用软件之间的依赖关系或多个引用软件之间的依赖关系。该方法能够避免遗漏被测软件的引用软件,有效识别出软件依赖关系,提升软件依赖关系的检测准确度,实现针对被测软件的漏洞检测或修复。

【技术实现步骤摘要】

本申请涉及软件开发及测试,尤其涉及一种软件依赖关系检测方法、软件开发平台、计算设备集群、计算机可读存储介质以及计算机程序产品。


技术介绍

1、在软件开发过程中,开发者通常可以引用其他软件,例如是引用一个或多个开源软件,来辅助当前软件的开发,从而避免一些功能的重复开发,减少开发工作量。对于一个软件而言,该软件引用的软件也可以引用其他的软件,因此,软件之间可以存在以下类型的依赖关系:直接依赖和间接依赖(也称作传递性依赖)。例如,当前开发的软件a调用了软件b的功能,那么软件a与软件b的依赖关系为直接依赖,如果软件b的运行需要依赖软件c(例如软件b调用了软件c),那么软件a与软件c的依赖关系为间接依赖。

2、由于软件的源码工程中存在一棵清晰的调用关系树,因此,软件之间的依赖关系在源码阶段易于识别。例如,在源码中查看引入的开源软件和调用的开源软件的功能函数名称以及源码所在的文件和代码行位置,可以获得软件之间的依赖关系。将源码编译为可执行的软件(例如是二进制程序)过程中,上述依赖关系会丢失或模糊化。传统的软件成分分析(software composition analysis,sca)通常只能分析出软件引用的其他软件,难以分析出软件所引用的其他软件之间的依赖关系或者软件与该软件所引用的其他软件之间的依赖关系(例如为直接依赖或间接依赖)。

3、如何检测出软件所引用的其他软件之间的依赖关系或软件与引用的其他软件的依赖关系成为业界重点关注的问题。


技术实现思路

1、本申请提供了一种软件依赖关系检测方法,该方法通过匹配函数颗粒度的特征,能够有效识别出被测软件与引用软件之间的依赖关系或多个引用软件之间的依赖关系,提升软件依赖关系的检测准确度。本申请还提供了该方法对应的软件开发平台、计算设备集群、计算机可读存储介质以及计算机程序产品。

2、第一方面,本申请提供一种软件依赖关系检测方法,该方法可以由软件开发平台执行。软件开发平台用于检测软件之间的依赖关系。软件开发平台可以是软件系统,该软件系统可以是独立的软件系统,例如是部署在本地或者云上的软件系统,该软件系统也可以集成于其他系统,例如是以插件形式集成在其他软件系统。该软件系统可以部署在计算设备集群,计算设备集群执行软件系统的程序代码,从而执行本申请的软件依赖关系检测方法。软件开发平台也可以是具有软件依赖关系检测功能的硬件系统,该硬件系统运行时,执行本申请的软件依赖关系检测方法。

3、具体地,软件开发平台获取被测软件的代码文件,该被测软件的代码文件为经过编译的代码文件,根据被测软件的代码文件,提取被测软件的特征集合,其中,被测软件的特征集合包括至少一个函数级的特征,接着软件开发平台将被测软件的特征集合与软件特征库中软件的特征集合进行匹配,从软件特征库中确定被测软件的多个引用软件,其中,软件特征库包括开源软件或具有源代码访问权限的闭源软件的特征集合,软件特征库中软件的特征集合包括至少一个函数级的特征,根据多个引用软件的特征集合中的函数调用信息,确定被测软件与多个引用软件之间的依赖关系或多个引用软件之间的依赖关系,该依赖关系可以用于被测软件的漏洞检测或修复。

4、该方法提取被测软件的以函数为最小颗粒度的特征形成特征集合,利用将被测软件的特征集合与软件特征库中软件的特征集合进行全面匹配,避免遗漏被测软件的引用软件,再通过引用软件的特征集合中的函数调用信息,有效识别出被测软件与引用软件之间的依赖关系或多个引用软件之间的依赖关系,提升软件依赖关系的检测准确度,实现针对被测软件的漏洞检测或修复。

5、在一些可能的实现方式中,软件开发平台可以根据被测软件与多个引用软件之间的依赖关系或多个引用软件之间的依赖关系,检测或修复被测软件的漏洞。在该方法中,可以利用检测出的软件依赖关系实现漏洞检测或者漏洞修复,从而避免被测软件引用开源软件而导致的安全威胁。

6、在一些可能的实现方式中,多个引用软件可以包括第一引用软件和第二引用软件,当第一引用软件的函数调用信息指示第一引用软件的第一函数调用第二引用软件的第二函数,软件开发平台可以确定第一引用软件和第二引用软件的依赖关系包括直接依赖。

7、在该方法中,软件开发平台通过函数级的特征(例如是函数调用信息),可以清晰、准确地确定引用软件之间的直接依赖关系,从而提升软件依赖关系检测的效率。

8、在一些可能的实现方式中,多个引用软件还可以包括第三引用软件,当第二引用软件的函数调用信息指示第二引用软件的第二函数调用第三引用软件的第三函数,软件开发平台可以确定第一引用软件和第三引用软件的依赖关系包括间接依赖。

9、在该方法中,软件开发平台通过函数级的特征(例如是函数调用信息),厘清引用软件之间的间接依赖关系,避免引用软件之间间接依赖关系的遗漏或错误,实现精准地软件依赖关系检测。

10、在一些可能的实现方式中,多个引用软件可以包括第四引用软件,当被测软件的特征集合包括第四引用软件的第四函数的特征,且第四引用软件的第四函数的特征在多个引用软件中除第四引用软件之外的引用软件的函数调用信息中未命中,软件开发平台可以确定被测软件与第四引用软件的依赖关系包括直接依赖。

11、在该方法中,软件开发平台通过函数级的特征(例如是函数调用信息),能够准确识别被测软件与引用软件之间的直接依赖关系,弥补了查询开源软件依赖关系数据库的方法中无法获得被测软件与引用软件之间直接依赖关系的缺陷。

12、在一些可能的实现方式中,软件特征库中软件的特征集合可以包括函数的名称、函数引用的字符串特征和函数调用信息,其中,函数引用的字符串特征包括与编译无关的字符串。在该方法中,利用函数调用关系生成特征集合,颗粒度较细,能够提升后续依赖关系检测的准确度,提供分析开源软件或具有源代码访问权限的闭源软件的安全漏洞影响力的能力。

13、在一些可能的实现方式中,软件特征库中软件的特征集合可以从开源软件的源码文件或具有源代码访问权限的闭源软件的源码文件中提取。该方法在无需搭建源码构建环境、源码无需编译成功的基础上实现高效地特征提取,对于开源软件或具有源代码访问权限的闭源软件,尤其是新版本的开源软件而言,可以在较短时间内完成特征提取。

14、在一些可能的实现方式中,软件特征库中软件的特征集合可以采用树结构存储。该方法通过树结构存储软件特征库中软件的特征集合,提升查询效率,实现高效地特征匹配。

15、在一些可能的实现方式中,软件开发平台可以对被测软件的代码文件进行反汇编,获得汇编代码文件,然后从汇编代码文件中提取函数的名称、函数的地址或函数引用的字符串特征,获得被测软件的特征集合。

16、在该方法中,通过对被测软件的代码文件进行反汇编,提取出与编译选项不敏感的特征,从而生成被测软件的函数颗粒度的特征集合,提升后续特征匹配的准确度。

17、在一些可能的实现方式中,软件开发平台可以全部部署在云上,例如是以软件即服务的形式向用本文档来自技高网...

【技术保护点】

1.一种软件依赖关系检测方法,其特征在于,应用于软件开发平台,所述软件开发平台用于检测软件之间的依赖关系,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

3.根据权利要求1或2所述的方法,其特征在于,所述多个引用软件包括第一引用软件和第二引用软件,所述根据所述多个引用软件的特征集合中的函数调用信息,确定所述多个引用软件之间的依赖关系,包括:

4.根据权利要求3所述的方法,其特征在于,所述多个引用软件还包括第三引用软件,所述方法还包括:

5.根据权利要求1至4任一项所述的方法,其特征在于,所述多个引用软件包括第四引用软件,所述根据所述多个引用软件的特征集合中的函数调用信息,确定所述被测软件与所述多个引用软件之间的依赖关系,包括:

6.根据权利要求1至5任一项所述的方法,其特征在于,所述软件特征库中软件的特征集合包括函数的名称、函数引用的字符串特征和所述函数调用信息,所述函数引用的字符串特征包括与编译无关的字符串。

7.根据权利要求1至6任一项所述的方法,其特征在于,所述软件特征库中软件的特征集合从所述开源软件的源码文件或所述具有源代码访问权限的闭源软件的源码文件中提取。

8.根据权利要求1至7任一项所述的方法,其特征在于,所述软件特征库中软件的特征集合采用树结构存储。

9.根据权利要求1至8任一项所述的方法,其特征在于,所述根据所述被测软件的代码文件,提取所述被测软件的特征集合,包括:

10.一种软件开发平台,所述软件开发平台用于检测软件之间的依赖关系,所述软件开发平台包括:

11.根据权利要求11所述的软件开发平台,其特征在于,所述软件开发平台还包括:

12.根据权利要求10或11所述的软件开发平台,其特征在于,所述多个引用软件包括第一引用软件和第二引用软件,所述依赖关系确定模块具体用于:

13.根据权利要求12所述的软件开发平台,其特征在于,所述多个引用软件还包括第三引用软件,所述依赖关系确定模块还用于:

14.根据权利要求10至13任一项所述的软件开发平台,其特征在于,所述多个引用软件包括第四引用软件,所述依赖关系确定模块具体用于:

15.根据权利要求10至14任一项所述的软件开发平台,其特征在于,所述软件特征库中软件的特征集合包括函数的名称、函数引用的字符串特征和所述函数调用信息,所述函数引用的字符串特征包括与编译无关的字符串。

16.根据权利要求10至15任一项所述的软件开发平台,其特征在于,所述软件开发平台还包括:

17.根据权利要求10至16任一项所述的软件开发平台,其特征在于,所述软件特征库中软件的特征集合采用树结构存储。

18.根据权利要求10至17任一项所述的软件开发平台,其特征在于,所述被测软件特征提取模块具体用于:

19.一种计算设备集群,其特征在于,所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器,所述至少一个存储器中存储有计算机可读指令;所述至少一个处理器执行所述计算机可读指令,以使得所述计算设备集群执行如权利要求1至9中任一项所述的方法。

20.一种计算机可读存储介质,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至9任一项所述的方法。

21.一种计算机程序产品,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至9任一项所述的方法。

...

【技术特征摘要】

1.一种软件依赖关系检测方法,其特征在于,应用于软件开发平台,所述软件开发平台用于检测软件之间的依赖关系,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

3.根据权利要求1或2所述的方法,其特征在于,所述多个引用软件包括第一引用软件和第二引用软件,所述根据所述多个引用软件的特征集合中的函数调用信息,确定所述多个引用软件之间的依赖关系,包括:

4.根据权利要求3所述的方法,其特征在于,所述多个引用软件还包括第三引用软件,所述方法还包括:

5.根据权利要求1至4任一项所述的方法,其特征在于,所述多个引用软件包括第四引用软件,所述根据所述多个引用软件的特征集合中的函数调用信息,确定所述被测软件与所述多个引用软件之间的依赖关系,包括:

6.根据权利要求1至5任一项所述的方法,其特征在于,所述软件特征库中软件的特征集合包括函数的名称、函数引用的字符串特征和所述函数调用信息,所述函数引用的字符串特征包括与编译无关的字符串。

7.根据权利要求1至6任一项所述的方法,其特征在于,所述软件特征库中软件的特征集合从所述开源软件的源码文件或所述具有源代码访问权限的闭源软件的源码文件中提取。

8.根据权利要求1至7任一项所述的方法,其特征在于,所述软件特征库中软件的特征集合采用树结构存储。

9.根据权利要求1至8任一项所述的方法,其特征在于,所述根据所述被测软件的代码文件,提取所述被测软件的特征集合,包括:

10.一种软件开发平台,所述软件开发平台用于检测软件之间的依赖关系,所述软件开发平台包括:

11.根据权利要求11所述的软件开发平台,其特征在于,所述软件开发平台还包括:

<...

【专利技术属性】
技术研发人员:郑志强张晓宇王岩
申请(专利权)人:华为云计算技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1