一种函数库引用版本检测方法、设备及存储介质与流程
未命名
07-12
阅读:104
评论:0
1.本技术涉及电子技术领域,尤其涉及一种函数库引用版本检测方法、设备及存储介质。
背景技术:
2.对于在c语言、c++语言源码项目中检测引用函数库的方法,目前行业内多采用源码相似度检测和包管理器识别的方案,再通过检测得到所引用的函数库确定函数库的版本。
3.源码相似度检测是大量采集开源项目的源码,提取出项目中所有函数的内容,并将每个函数进行如删除空格、变量名称规格化等处理,将处理后的函数内容计算得到哈希值并存储入库,同时入库的还有该哈希值对应的函数库名称和版本。需要检测某个项目引用了哪些组件时,将该项目经同样的处理,得到每个函数的哈希值,将这些哈希值拿到库中进行检索,通过匹配的哈希值数量、比例等,取得引用的函数库名称和版本。
4.包管理器识别组件的方案,是识别包管理文件如vcpkg中的内容,此类文件中的内容为文本形式,描述了需要下载或引用的库,有些包含版本信息。
5.但采用源码相似度检测的方案只能检测包含函数库源码的情况,比如某个c、c++语言项目中,包含了开源库zlib的源码,那么zlib理论上就可以被检测出。但如果是引用的二进制库,就无法检测,因为该c、c++语言项目只是调用了zlib的函数,而没有包含和zlib项目相同或相似的函数。并且采用源码相似度检测的方案还存在以下问题:需要大量数据作为储备来进行检测,空间消耗大;检测准确率低,由于存在开源函数库相互引用的问题,比如开源项目a以源码形式引用了开源项目zlib,那么当某个c、c++语言项目引用了项目a时,项目a和项目zlib会被检测出来。而包管理器识别组件的方案,需要c、c++语言项目中存在包管理文件,如果不存在,则无法检测引用的函数库。包管理器并非c、c++语言项目中流行的解决方案,因此并不常有包管理文件可供检测。
技术实现要素:
6.本技术的主要目的在于提供一种函数库引用版本检测方法、设备及存储介质,至少能够解决相关技术中在检测引用函数库的版本时需要大量数据,空间消耗较大且不能同时识别多种引用函数库形式的函数库的问题。
7.为实现上述目的,本技术第一方面提供了一种函数库引用版本检测方法,该方法包括:
8.获取待检测项目中第一头文件信息;其中,所述第一头文件信息包括:第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;
9.将所述第一头文件信息与预设的数据库中所述第二头文件信息进行匹配;其中,所述数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息;
10.根据匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的
函数库版本。
11.本技术第二方面提供了一种电子设备,包括:存储器及处理器,其中,处理器用于执行存储在存储器上的计算机程序,处理器执行计算机程序时,实现上述本技术第一方面提供的函数库引用版本检测方法中的各步骤。
12.本技术第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现上述本技术第一方面提供的函数库引用版本检测方法中的各步骤。
13.由上可见,根据本技术方案所提供的函数库引用版本检测方法、设备及存储介质,获取待检测项目中第一头文件信息;其中,第一头文件信息包括:第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;将第一头文件信息与预设的数据库中第二头文件信息进行匹配;其中,数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息;根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。通过本技术方案的实施,将待检测项目中的头文件信息与预设数据库中的头文件信息进行匹配,即可确定目标函数库对应的函数库版本,并且数据库中包含二进制文件引用形式以及源码引用形式的头文件信息,从而可以兼顾检测两种引用函数库形式的函数库,且所需准备的数据量少,可有效节省存储空间。
附图说明
14.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
15.图1为本技术第一实施例提供的函数库引用版本检测方法的基本流程示意图;
16.图2为本技术第二实施例提供的函数库引用版本检测方法的细化流程示意图;
17.图3为本技术第三实施例提供的一种函数库引用版本检测装置的模块示意图;
18.图4为本技术第四实施例提供的电子设备的结构示意图。
具体实施方式
19.为使得本技术的发明目的、特征、优点能够更加的明显和易懂,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而非全部实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
20.此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本技术实施例的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
21.为了解决相关技术在检测引用函数库的版本时需要大量数据,空间消耗较大且不能同时识别多种引用函数库形式的函数库的问题,本技术第一实施例提供了一种函数库引用版本检测方法,应用于c语言、c++语言项目中,如图1为本实施例提供的函数库引用版本
检测方法的基本流程示意图,该函数库引用版本检测方法包括以下的步骤:
22.步骤101、获取待检测项目中第一头文件信息。
23.具体的,在本实施例中,第一头文件信息包括:第一头文件对应的第一头文件名、第一头文件对应的第一哈希值、第一头文件对应的第二哈希值以及第一头文件对应的第一修改时间。在实际的c语言、c++语言项目中,当c语言、c++语言代码引用函数库时,必定需要包含其头文件,因此本实施例利用头文件信息来进行检测。
24.在本实施例一些实施方式中,获取待检测项目中第一头文件信息的步骤之前,还包括:获取第一头文件中第一目标函数的第一声明信息;根据预设提取工具,获取第一声明信息中第一目标函数名以及第一参数信息;根据第一目标函数名的声明顺序,将所有删除无效信息后的第一目标函数名以及第一参数信息进行拼接,得到第一字符串;对第一字符串进行哈希运算,得到第二哈希值。
25.具体的,在本实施例中,头文件中会声明其所对应的函数库对外提供的函数,例如头文件stdio.h中对函数fprintf的声明信息为:
26.int__cdecl fprintf(file*__restrict___file,const char*__restrict___format,...);
27.本实施例主要提取声明信息中函数名以及参数信息,提取的工具或方法有很多,本实施例可选的采用正则表达式的提取方式,例如通过表达式:type stdio.h|grep-p-o"\w+\s*\([^)]+\)\s*;"可提取到关于函数fprintf的函数名以及参数信息,例如:
[0028]
fprintf(file*__restrict___file,const char*__restrict___format,...);
[0029]
在得到上述结果后,再将该结果中的无效信息例如空格删除后,得到如下结果:
[0030]
fprintf(file*__restrict___file,constchar*__restrict___format,...);
[0031]
最后,再根据头文件中对目标函数的声明顺序,将所有目标函数对应的函数名以及参数信息依次拼接,构成字符串,接着再对该字符串进行哈希运算,得到第二哈希值。
[0032]
步骤102、将第一头文件信息与预设的数据库中第二头文件信息进行匹配。
[0033]
具体的,在本实施例中,数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息。当需要检测某个项目中所引用的函数库的版本时,只需要将该项目中的头文件信息与预设的数据库中的头文件信息进行匹配即可。应当说明的是,c、c++语言项目引用函数库有两种方式,一种是以二进制文件形式引用,也就是函数的实现在该二进制库中;另一种是以源码形式引用,也就是该c、c++语言项目包含了函数库的部分或全部源码,而不管哪种形式,都仍然需要使用该函数库的头文件。本实施例中的数据库包含了上述两种引用函数库的形式,因此可以对两种引用形式的进行检测。
[0034]
在本实施例一些实施方式中,将第一头文件信息与预设的数据库中第二头文件信息进行匹配的步骤之前,还包括:获取所有预设版本的函数库对应的第二头文件;分别获取第二头文件对应的第二头文件名、第三哈希值、第四哈希值以及第二修改时间;基于函数库对应的函数库名称、函数库对应的版本、第二头文件名、第三哈希值、第四哈希值以及第二修改时间生成数据库。
[0035]
具体的,在本实施例中,数据库包含各个版本的函数库所对应的头文件信息,即头文件名、头文件对应的第三哈希值、第四哈希值、头文件的修改时间,还包含函数库的名称以及函数库对应的版本。一般在下载函数库文件时都会附带有头文件,可以将函数库的各
个版本都进行下载,并收集每个版本的头文件。如果该函数库是开源且存放在代码托管平台的,那么可使用git工具将该项目克隆到本地,然后再使用git工具切换该项目的版本,如此就能获取到该函数库的每个版本的头文件。在下载函数库头文件时应注意,应尽量采取可以保留修改时间信息的下载方式,以便提取头文件对应的修改时间。而对于修改时间,如果下载的库是压缩包形式,那么解压缩时可以还原文件的“修改时间”;如果是用git克隆形式得到的函数库源码,那么用git进行版本回溯时,也会自动还原文件的“修改时间”;其他方式的下载也有可能还原文件的修改时间。并且,如果倾向于检测引用二进制函数库的情况,则应侧重收集二进制函数库的头文件,如果倾向于检测引用源码形式的函数库,则应侧重收集源码函数库的头文件,因为在源码情况中,头文件会更多,检测二进制函数库会存在较大误差。
[0036]
进一步地,在本实施例一些实施方式中,分别获取第二头文件对应的第二头文件名、第三哈希值、第四哈希值以及第二修改时间的步骤之前,还包括:获取第二头文件中第二目标函数的第二声明信息;根据预设提取工具,获取第二声明信息中第二目标函数名以及第二参数信息;根据第二目标函数名的声明顺序,将所有删除无效信息后的第二目标函数名以及第二参数信息进行拼接,得到第二字符串;对第二字符串进行哈希运算,得到第四哈希值。
[0037]
具体的,在本实施例中,数据库中的第四哈希值与待检测项目中第二哈希值的处理过程相似,具体的获取过程可以参照前述第二哈希值的获取过程,在此不再赘述。
[0038]
在本实施例另一些实施方式中,将第一头文件信息与预设的数据库中第二头文件信息进行匹配的步骤,包括:将第一头文件信息中第一头文件名与所有第二头文件信息中第二头文件名进行匹配,得到第一匹配结果;其中,第一匹配结果包括:数据库中对应于第一头文件名的所有一级第二头文件信息;将第一修改时间与所有一级第二头文件信息中第二修改时间进行匹配,得到第二匹配结果;其中,第二匹配结果包括:第二修改时间匹配于第一修改时间的所有二级第二头文件信息,以及第二修改时间不匹配于第一修改时间的剩余一级第二头文件信息。
[0039]
具体的,在本实施例中,先将获取到的第一头文件信息中的第一头文件名在预设的数据库中进行匹配,会在数据库中匹配出与待检测项目中的第一头文件名相同的第二头文件信息以及该第二头文件信息对应的目标函数库的各个版本;再在与待检测项目中的第一头文件名相同的第二头文件信息中,将第一修改时间进行匹配,得到与第一修改时间匹配的第二头文件信息以及与第一修改时间不匹配的第二头文件信息。
[0040]
步骤103、根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0041]
具体的,在本实施例中,在将待检测项目中的头文件信息进行匹配之后,即可在该头文件信息的匹配结果中确定该项目从数据库中所引用的目标函数库对应的函数版本。
[0042]
在本实施例的一些实施方式中,根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本的步骤,包括:根据第二匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0043]
具体的,在本实施例中,将待检测项目中的头文件信息中修改时间进行匹配之后,即可在修改时间这一头文件信息对应的匹配结果中确定该项目从数据库中所引用的目标
函数库对应的函数版本。
[0044]
进一步地,在本实施例一些实施方式中,根据第二匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本的步骤,包括:将第一哈希值与所有二级第二头文件信息的第三哈希值进行匹配,得到第三匹配结果;其中,第三匹配结果包括第三哈希值匹配于第一哈希值的所有三级第二头文件信息;根据第三匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本;或,将第二哈希值与所有剩余一级第二头文件信息的第四哈希值进行匹配,得到第四匹配结果;其中,第四匹配结果包括第四哈希值匹配于第二哈希值的所有四级第二头文件信息;根据第四匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0045]
具体的,在本实施例中,当匹配到与第一修改时间相同的头文件信息时,将第一哈希值在所有与第一修改时间相同的头文件信息中进行匹配,根据匹配结果确定函数库的版本。或者,当未匹配到与第一修改时间相同的头文件信息时,将第二哈希值在所有剩余一级第二头文件信息中进行匹配,根据匹配结果确定函数库的版本。其中,未匹配到与第一修改时间相同的第二头文件信息,说明源码项目中的头文件有可能被修改过,也可能是下载的时候只有数据相同,丢失了时间信息,因此可通过将第二哈希值在所有剩余一级第二头文件信息中进行匹配。
[0046]
再进一步地,在本实施例的一些实施方式中,根据第四匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本的步骤,包括:当第四匹配结果中存在多个四级第二头文件信息时,将第一哈希值与所有四级第二头文件信息的第三哈希值进行匹配,得到第五匹配结果;其中,第五匹配结果包括第三哈希值匹配于第一哈希值的所有五级第二头文件信息;根据第五匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0047]
具体的,在本实施例中,当将第二哈希值进行匹配得到的结果中存在多个四级第二头文件信息时,再将第一哈希值与所有四级第二头文件信息进行匹配,根据匹配结果确定函数库版本。当将第二哈希值进行匹配得到的结果即第四匹配结果中只存在一个四级第二头文件信息时,确定四级第二头文件信息相应的版本为目标函数库版本。
[0048]
更进一步地,在本实施例一些实施方式中,根据第三匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本的步骤,包括:当第三匹配结果中只存在一个三级第二头文件信息时,确定三级第二头文件信息相应的版本为目标函数库版本;当第三匹配结果中存在多个三级第二头文件信息时,分别获取各三级第二头文件信息的版本,并将具有相同版本的三级第二头文件信息进行数量统计,然后将三级第二头文件信息的数量最多的目标版本确定为目标函数库版本;或,当第五匹配结果中只存在一个五级第二头文件信息时,确定五级第二头文件信息相应的版本为目标函数库版本;当第五匹配结果中存在多个五级第二头文件信息时,分别获取各五级第二头文件信息的版本,并将具有相同版本的五级第二头文件信息进行数量统计,然后将五级第二头文件信息的数量最多的目标版本确定为目标函数库版本。
[0049]
具体的,在本实施例中,第三匹配结果中只存在一个三级第二头文件信息时,即可确定该三级第二头文件信息对应的版本为目标函数库对应的版本;当第三匹配结果中存在多个三级第二头文件信息时,将具有相同版本的三级第二头文件信息进行数量统计,然后
将三级第二头文件信息的数量最多的目标版本确定为目标函数库版本;对于第五匹配结果进行与第三匹配结果相似的处理。
[0050]
基于上述本技术实施例的技术方案,获取待检测项目中第一头文件信息;其中,第一头文件信息包括:第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;将第一头文件信息与预设的数据库中第二头文件信息进行匹配;其中,数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息;根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。通过本技术方案的实施,将待检测项目中的头文件信息与预设数据库中的头文件信息进行匹配,即可确定目标函数库对应的函数库版本,并且数据库中包含二进制文件引用形式以及源码引用形式的头文件信息,从而可以兼顾检测两种引用函数库形式的函数库,且所需准备的数据量少,可有效节省存储空间。并且,将本技术实施例的技术方案应用于代码审计、漏洞分析等领域,可有效提高相关事项的处理效率。
[0051]
图2中的方法为本技术第二实施例提供的一种细化的函数库引用版本检测方法,该函数库引用版本检测方法包括:
[0052]
步骤201、获取待检测项目的第一头文件信息中第一头文件名、第一哈希值、第二哈希值以及第一修改时间。
[0053]
具体的,在本实施例中,第一头文件信息包括:第一头文件对应的第一头文件名、第一头文件对应的第一哈希值、第一头文件对应的第二哈希值以及第一头文件对应的第一修改时间。在实际的c语言、c++语言项目中,当c语言、c++语言代码引用函数库时,必定需要包含其头文件,因此本实施例利用头文件信息来进行检测。
[0054]
步骤202、将第一头文件名与预设数据库的所有第二头文件信息中第二头文件名进行匹配,得到对应于第一头文件名的所有一级第二头文件信息。
[0055]
步骤203、判断所有一级第二头文件信息中是否包括第二修改时间匹配于第一修改时间的二级第二头文件信息;若是,则执行步骤204,若否,则执行步骤206。
[0056]
具体的,在本实施例中,先将获取到的第一头文件信息中的第一头文件名在预设的数据库中进行匹配,会在数据库中匹配出与待检测项目中的第一头文件名相同的第二头文件信息以及该第二头文件信息对应的目标函数库的各个版本;再判断在与待检测项目中的第一头文件名相同的第二头文件信息中,是否有与第一修改时间相匹配的第二修改时间所对应的二级第二头文件信息。若是,则执行步骤204,若否,则执行步骤206。
[0057]
步骤204、将第一哈希值与所有二级第二头文件信息的第三哈希值进行匹配,得到第三哈希值匹配于第一哈希值的所有三级第二头文件信息。
[0058]
具体的,在本实施例中,当存在与第一修改时间相匹配的第二修改时间所对应的二级第二头文件信息时,将第一哈希值在所有与第一修改时间相同的头文件信息中进行匹配。
[0059]
步骤205、当存在多个三级第二头文件信息时,将三级第二头文件信息的数量最多的目标版本确定为目标函数库版本。
[0060]
具体的,在本实施例中,当存在多个三级第二头文件信息时,分别获取各三级第二头文件信息的版本,并将具有相同版本的三级第二头文件信息进行数量统计,然后将三级第二头文件信息的数量最多的目标版本确定为目标函数库版本。
[0061]
步骤206、将第二哈希值与所有剩余一级第二头文件信息的第四哈希值进行匹配,得到第四哈希值匹配于第二哈希值的所有四级第二头文件信息。
[0062]
具体的,在本实施例中,当不存在与第一修改时间相匹配的第二修改时间所对应的二级第二头文件信息时,将第二哈希值与所有剩余一级第二头文件信息的第四哈希值进行匹配。
[0063]
步骤207、当存在多个四级第二头文件信息时,将第一哈希值与所有四级第二头文件信息的第三哈希值进行匹配,得到第三哈希值匹配于第一哈希值的所有五级第二头文件信息。
[0064]
具体的,在本实施例中,当存在多个四级第二头文件信息时,再将第一哈希值与所有四级第二头文件信息进行匹配,根据匹配结果确定函数库版本。
[0065]
步骤208、当存在多个五级第二头文件信息时,将五级第二头文件信息的数量最多的目标版本确定为目标函数库版本。
[0066]
具体的,在本实施例中,当存在多个五级第二头文件信息时,分别获取各五级第二头文件信息的版本,并将具有相同版本的五级第二头文件信息进行数量统计,然后将五级第二头文件信息的数量最多的目标版本确定为目标函数库版本。
[0067]
应当理解的是,本实施例中各步骤的序号的大小并不意味着步骤执行顺序的先后,各步骤的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成唯一限定。
[0068]
基于本技术实施例的上述技术方案,获取待检测项目中第一头文件信息中第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;先将第一头文件信息中的第一头文件名与预设的数据库中第二头文件信息中第二头文件名进行匹配,得到匹配于第一头文件名的第二头文件信息;再判断该匹配于第一头文件名的第二头文件信息中有无与第一修改时间相匹配的第二头文件信息,当存在时可用第一哈希值再进行匹配;当不存在时可用第一哈希值和第二哈希值分别进行匹配;根据最后的匹配结果即可确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。通过本技术方案的实施,将待检测项目中的头文件信息与预设数据库中的头文件信息进行匹配,即可确定目标函数库对应的函数库版本,该检测方法所需准备的数据量少,可有效节省存储空间,并且通过将头文件信息中四个信息逐步于数据库进行匹配,可有效提高检测的准确率。
[0069]
图3为本技术第三实施例提供的一种函数库引用版本检测装置,该函数库引用版本检测装置可应用于前述函数库引用版本检测方法。如图3所示,该函数库引用版本检测装置主要包括:
[0070]
获取模块301,用于获取待检测项目中第一头文件信息;其中,第一头文件信息包括:第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;
[0071]
匹配模块302,用于将第一头文件信息与预设的数据库中第二头文件信息进行匹配;其中,数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息;
[0072]
确定模块303,用于根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0073]
在本实施例的一些实施方式中,函数库引用版本检测装置还包括:第一运算模块,用于获取第一头文件中第一目标函数的第一声明信息;根据预设提取工具,获取第一声明
信息中第一目标函数名以及第一参数信息;根据第一目标函数名的声明顺序,将所有删除无效信息后的第一目标函数名以及第一参数信息进行拼接,得到第一字符串;对第一字符串进行哈希运算,得到第二哈希值。
[0074]
在本实施例的一些实施方式中,函数库引用版本检测装置还包括:生成模块,用于获取所有预设版本的函数库对应的第二头文件;分别获取第二头文件对应的第二头文件名、第三哈希值、第四哈希值以及第二修改时间;基于函数库对应的函数库名称、函数库对应的版本、第二头文件名、第三哈希值、第四哈希值以及第二修改时间生成数据库。
[0075]
进一步地,在本实施例的一些实施方式中,函数库引用版本检测装置还包括:第二运算模块,用于获取所述第二头文件中第二目标函数的第二声明信息;根据预设提取工具,获取第二声明信息中第二目标函数名以及第二参数信息;根据第二目标函数名的声明顺序,将所有删除无效信息后的第二目标函数名以及第二参数信息进行拼接,得到第二字符串;对第二字符串进行哈希运算,得到第四哈希值。
[0076]
在本实施例的一些实施方式中,匹配模块具体用于:将第一头文件信息中第一头文件名与所有第二头文件信息中第二头文件名进行匹配,得到第一匹配结果;其中,第一匹配结果包括:数据库中对应于第一头文件名的所有一级第二头文件信息;将第一修改时间与所有一级第二头文件信息中第二修改时间进行匹配,得到第二匹配结果;其中,第二匹配结果包括:述第二修改时间匹配于第一修改时间的所有二级第二头文件信息,以及第二修改时间不匹配于所述第一修改时间的剩余一级第二头文件信息。
[0077]
在本实施例的一些实施方式中,确定模块具体用于:根据第二匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0078]
进一步地,在本实施例的一些实施方式中,确定模块还用于:将第一哈希值与所有二级第二头文件信息的第三哈希值进行匹配,得到第三匹配结果;其中,第三匹配结果包括第三哈希值匹配于第一哈希值的所有三级第二头文件信息;根据第三匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本;或,将第二哈希值与所有剩余一级第二头文件信息的第四哈希值进行匹配,得到第四匹配结果;其中,第四匹配结果包括第四哈希值匹配于第二哈希值的所有四级第二头文件信息;根据第四匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0079]
再进一步地,在本实施例的一些实施方式中,确定模块还用于:当第四匹配结果中存在多个四级第二头文件信息时,将第一哈希值与所有四级第二头文件信息的第三哈希值进行匹配,得到第五匹配结果;其中,第五匹配结果包括第三哈希值匹配于第一哈希值的所有五级第二头文件信息;根据第五匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。
[0080]
更进一步地,在本实施例的一些实施方式中,确定模块还用于:当第三匹配结果中只存在一个三级第二头文件信息时,确定三级第二头文件信息相应的版本为目标函数库版本;当第三匹配结果中存在多个三级第二头文件信息时,分别获取各三级第二头文件信息的版本,并将具有相同版本的三级第二头文件信息进行数量统计,然后将三级第二头文件信息的数量最多的目标版本确定为目标函数库版本;或,当第五匹配结果中只存在一个五级第二头文件信息时,确定五级第二头文件信息相应的版本为目标函数库版本;当第五匹配结果中存在多个五级第二头文件信息时,分别获取各五级第二头文件信息的版本,并将
具有相同版本的五级第二头文件信息进行数量统计,然后将五级第二头文件信息的数量最多的目标版本确定为目标函数库版本。
[0081]
根据本实施例所提供的函数库引用版本检测装置,获取待检测项目中第一头文件信息;其中,第一头文件信息包括:第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;将第一头文件信息与预设的数据库中第二头文件信息进行匹配;其中,数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息;根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。通过本技术方案的实施,将待检测项目中的头文件信息与预设数据库中的头文件信息进行匹配,即可确定目标函数库对应的函数库版本,并且数据库中包含二进制文件引用形式以及源码引用形式的头文件信息,从而可以兼顾检测两种引用函数库形式的函数库,且所需准备的数据量少,可有效节省存储空间。
[0082]
图4为本技术第四实施例提供的一种电子设备,该电子设备可用于实现前述实施例中的函数库引用版本检测方法,主要包括:
[0083]
存储器401、处理器402及存储在存储器401上并可在处理器402上运行的计算机程序403,存储器401和处理器402通过通信连接。处理器402执行该计算机程序403时,实现前述实施例一或二中的方法。其中,处理器的数量可以是一个或多个。
[0084]
存储器401可以是高速随机存取记忆体(ram,random access memory)存储器,也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。存储器401用于存储可执行程序代码,处理器402与存储器401耦合。
[0085]
进一步地,本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述电子设备中,该计算机可读存储介质可以是前述图4所示实施例中的存储器。
[0086]
该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述实施例中的函数库引用版本检测方法。进一步地,该计算机可存储介质还可以是u盘、移动硬盘、只读存储器(rom,read-only memory)、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0087]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0088]
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0089]
另外,在本技术各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0090]
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可
以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例方法的全部或部分步骤。而前述的可读存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0091]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本技术所必须的。
[0092]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0093]
以上为对本技术所提供的函数库引用版本检测方法、设备及存储介质的描述,对于本领域的技术人员,依据本技术实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本技术的限制。
技术特征:
1.一种函数库引用版本检测方法,其特征在于,包括:获取待检测项目中第一头文件信息;其中,所述第一头文件信息包括:第一头文件对应的第一头文件名、第一哈希值、第二哈希值以及第一修改时间;将所述第一头文件信息与预设的数据库中第二头文件信息进行匹配;其中,所述数据库包括二进制文件引用形式以及源码引用形式的所述第二头文件信息;根据匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本。2.根据权利要求1所述的函数库引用版本检测方法,其特征在于,所述获取待检测项目中第一头文件信息的步骤之前,还包括:获取所述第一头文件中第一目标函数的第一声明信息;根据预设提取工具,获取所述第一声明信息中第一目标函数名以及第一参数信息;根据所述第一目标函数名的声明顺序,将所有删除无效信息后的所述第一目标函数名以及所述第一参数信息进行拼接,得到第一字符串;对所述第一字符串进行哈希运算,得到所述第二哈希值。3.根据权利要求1所述的函数库引用版本检测方法,其特征在于,所述将所述第一头文件信息与预设的数据库中第二头文件信息进行匹配的步骤之前,还包括:获取所有预设版本的函数库对应的第二头文件;分别获取所述第二头文件对应的第二头文件名、第三哈希值、第四哈希值以及第二修改时间;基于所述函数库对应的函数库名称、所述函数库对应的版本、所述第二头文件名、所述第三哈希值、所述第四哈希值以及所述第二修改时间生成所述数据库。4.根据权利要求3所述的函数库引用版本检测方法,其特征在于,所述分别获取所述第二头文件对应的第二头文件名、第三哈希值、第四哈希值以及第二修改时间的步骤之前,还包括:获取所述第二头文件中第二目标函数的第二声明信息;根据预设提取工具,获取所述第二声明信息中第二目标函数名以及第二参数信息;根据所述第二目标函数名的声明顺序,将所有删除无效信息后的所述第二目标函数名以及所述第二参数信息进行拼接,得到第二字符串;对所述第二字符串进行哈希运算,得到所述第四哈希值。5.根据权利要求3所述的函数库引用版本检测方法,其特征在于,所述将所述第一头文件信息与预设的数据库中第二头文件信息进行匹配的步骤,包括:将所述第一头文件信息中第一头文件名与所有所述第二头文件信息中第二头文件名进行匹配,得到第一匹配结果;其中,所述第一匹配结果包括:所述数据库中对应于所述第一头文件名的所有一级第二头文件信息;将所述第一修改时间与所有所述一级第二头文件信息中第二修改时间进行匹配,得到第二匹配结果;其中,所述第二匹配结果包括:所述第二修改时间匹配于所述第一修改时间的所有二级第二头文件信息,以及所述第二修改时间不匹配于所述第一修改时间的剩余一级第二头文件信息;所述根据匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的
函数库版本的步骤,包括:根据所述第二匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本。6.根据权利要求5所述的函数库引用版本检测方法,其特征在于,所述根据所述第二匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本的步骤,包括:将所述第一哈希值与所有所述二级第二头文件信息的第三哈希值进行匹配,得到第三匹配结果;其中,所述第三匹配结果包括所述第三哈希值匹配于所述第一哈希值的所有三级第二头文件信息;根据所述第三匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本;或,将所述第二哈希值与所有所述剩余一级第二头文件信息的所述第四哈希值进行匹配,得到第四匹配结果;其中,所述第四匹配结果包括所述第四哈希值匹配于所述第二哈希值的所有四级第二头文件信息;根据所述第四匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本。7.根据权利要求6所述的函数库引用版本检测方法,其特征在于,所述根据所述第四匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本的步骤,包括:当所述第四匹配结果中存在多个所述四级第二头文件信息时,将所述第一哈希值与所有所述四级第二头文件信息的所述第三哈希值进行匹配,得到第五匹配结果;其中,所述第五匹配结果包括所述第三哈希值匹配于所述第一哈希值的所有五级第二头文件信息;根据所述第五匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本。8.根据权利要求6或7所述的函数库引用版本检测方法,其特征在于,所述根据所述第三匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本的步骤,包括:当所述第三匹配结果中只存在一个所述三级第二头文件信息时,确定所述三级第二头文件信息相应的版本为所述目标函数库版本;当所述第三匹配结果中存在多个所述三级第二头文件信息时,分别获取各所述三级第二头文件信息的版本,并将具有相同版本的所述三级第二头文件信息进行数量统计,然后将所述三级第二头文件信息的数量最多的目标版本确定为所述目标函数库版本;或,所述根据所述第五匹配结果确定所述待检测项目从所述数据库中所引用的目标函数库对应的函数库版本的步骤,包括:当所述第五匹配结果中只存在一个所述五级第二头文件信息时,确定所述五级第二头文件信息相应的版本为所述目标函数库版本;当所述第五匹配结果中存在多个所述五级第二头文件信息时,分别获取各所述五级第二头文件信息的版本,并将具有相同版本的所述五级第二头文件信息进行数量统计,然后将所述五级第二头文件信息的数量最多的目标版本确定为所述目标函数库版本。
9.一种电子设备,其特征在于,包括存储器及处理器,其中:所述处理器用于执行存储在所述存储器上的计算机程序;所述处理器执行所述计算机程序时,实现权利要求1至8中任意一项所述方法中的步骤。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至8中的任意一项所述方法中的步骤。
技术总结
本申请提供了一种函数库引用版本检测方法、设备及存储介质。所述方法包括:获取待检测项目中第一头文件信息;将第一头文件信息与预设的数据库中第二头文件信息进行匹配;数据库包括二进制文件引用形式以及源码引用形式的第二头文件信息;根据匹配结果确定待检测项目从数据库中所引用的目标函数库对应的函数库版本。通过本申请方案的实施,将待检测项目中的头文件信息与预设数据库中的头文件信息进行匹配,即可确定目标函数库对应的函数库版本,并且数据库中包含二进制文件引用形式以及源码引用形式的头文件信息,从而可以兼顾检测两种引用函数库形式的函数库,且所需准备的数据量少,可有效节省存储空间。可有效节省存储空间。可有效节省存储空间。
技术研发人员:朱劲松 万振华 王颉
受保护的技术使用者:深圳开源互联网安全技术有限公司
技术研发日:2023.02.08
技术公布日:2023/7/11
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
