一种检测可执行文件引用的开源组件的方法及相关产品转让专利

申请号 : CN202311106117.3

文献号 : CN116820556B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 万振华

申请人 : 深圳开源互联网安全技术有限公司

摘要 :

本发明涉及软件检测技术领域,揭露了一种检测可执行文件引用的开源组件的方法及相关产品,其中,所述方法包括:根据预设的开源组件的版本信息生成时间戳;根据开源组件、版本信息及时间戳生成库文件;利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;根据函数特征确认待检测可执行文件所引用的目标开源组件。本发明可以根据开源组件、版本信息及时间戳生成库文件,并利用库文件对特征库进行更新,使得待检测可执行文件从更新后的特征库内筛选出函数特征,进而准确确认待检测可执行文件的组件版本,从而提高对二进制文件进行检测时的准确性。

权利要求 :

1.一种检测可执行文件引用的开源组件的方法,其特征在于,所述方法包括:

根据预设的开源组件的版本信息生成时间戳;

从所述版本信息中选取目标版本信息,基于所述目标版本信息对所述开源组件的组件目录进行扫描,根据扫描的结果构建目标文件;配置所述目标文件的编译优化选项及指令架构目的,得到配置文件;从所述时间戳中提取所述目标版本信息对应的目标时间戳,并将所述目标时间戳存储至所述配置文件中,得到库文件;

利用所述库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;

根据所述函数特征确认所述待检测可执行文件所引用的目标开源组件;

所述利用所述库文件对预设的特征库进行更新,包括:对所述库文件进行反汇编处理,得到处理文件;获取所述处理文件中的文件版本信息及文件时间戳,根据所述文件版本信息及所述文件时间戳对所述处理文件进行命名,得到命名文件;提取所述命名文件中的限定函数,对所述限定函数进行筛选,得到目标函数;对所述目标函数进行特征提取,得到标准函数特征,并对所述标准函数特征进行特征清洗,得到清洗函数特征;将所述清洗函数特征存储至所述特征库中,得到更新后的特征库;

所述对所述限定函数进行筛选,得到目标函数,包括:获取所述限定函数的操作码长度,判断所述操作码长度是否大于预设的字节长度;当所述操作码长度小于或等于所述字节长度时,判定所述限定函数不符合标准,对所述限定函数进行删除,将删除后的限定函数作为初始目标函数;当所述操作码大于所述字节长度时,判定所述限定函数符合标准,并将所述限定函数作为初始目标函数;判断所述初始目标函数是否为预设的设定函数;当所述初始目标函数为所述设定函数时,判定所述初始目标函数不符合标准,对所述初始目标函数进行删减,将删减后的初始目标函数作为目标函数;当所述初始目标函数不为所述设定函数时,判定所述初始目标函数符合标准,将所述初始目标函数作为目标函数;

所述对所述标准函数特征进行特征清洗,包括:针对所述标准函数特征,查询出组件名称不同但函数名称与函数特征对应的哈希算法相同的数据,保留文件版本信息的生成时间最早的那一条数据,然后删除其余数据。

2.如权利要求1所述的检测可执行文件引用的开源组件的方法,其特征在于,所述根据预设的开源组件的版本信息生成时间戳,包括:获取所述开源组件的版本信息对应的版本日期及版本时间,根据所述版本日期及所述版本时间创建日期对象;

利用预设的内置函数将所述日期对象转换为时间戳。

3.如权利要求1所述的检测可执行文件引用的开源组件的方法,其特征在于,所述根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征,包括:对所述待检测可执行文件进行反汇编处理,得到处理执行文件;

利用预设的函数返回指令对所述处理执行文件进行切割,得到切割函数;

对所述切割函数进行特征提取,得到切割函数特征;

将所述切割函数特征与更新后的所述特征库中的清洗函数特征进行匹配,根据匹配的结果从所述清洗函数特征中提取函数特征。

4.如权利要求1至3中任一项所述的检测可执行文件引用的开源组件的方法,其特征在于,所述根据所述函数特征确认所述待检测可执行文件所引用的目标开源组件,包括:获取所述函数特征对应的文件版本信息,对所述文件版本信息对应的文件时间戳进行遍历,根据遍历的结果选取所述文件时间戳中的最晚文件时间戳;

将所述最晚文件时间戳对应的文件版本信息作为所述待检测可执行文件的组件版本;

根据所述组件版本确认所述待检测可执行文件所引用的目标开源组件。

5.一种检测可执行文件引用的开源组件的装置,其特征在于,所述装置包括:

时间戳生成模块,用于根据预设的开源组件的版本信息生成时间戳;

库文件生成模块,用于从所述版本信息中选取目标版本信息,基于所述目标版本信息对所述开源组件的组件目录进行扫描,根据扫描的结果构建目标文件;配置所述目标文件的编译优化选项及指令架构目的,得到配置文件;从所述时间戳中提取所述目标版本信息对应的目标时间戳,并将所述目标时间戳存储至所述配置文件中,得到库文件;

特征筛选模块,用于利用所述库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;

组件确认模块,用于根据所述函数特征确认所述待检测可执行文件所引用的目标开源组件;

所述特征筛选模块在执行所述利用所述库文件对预设的特征库进行更新的功能时,具体用于:对所述库文件进行反汇编处理,得到处理文件;获取所述处理文件中的文件版本信息及文件时间戳,根据所述文件版本信息及所述文件时间戳对所述处理文件进行命名,得到命名文件;提取所述命名文件中的限定函数,获取所述限定函数的操作码长度,判断所述操作码长度是否大于预设的字节长度;当所述操作码长度小于或等于所述字节长度时,判定所述限定函数不符合标准,对所述限定函数进行删除,将删除后的限定函数作为初始目标函数;当所述操作码大于所述字节长度时,判定所述限定函数符合标准,并将所述限定函数作为初始目标函数;判断所述初始目标函数是否为预设的设定函数;当所述初始目标函数为所述设定函数时,判定所述初始目标函数不符合标准,对所述初始目标函数进行删减,将删减后的初始目标函数作为目标函数;当所述初始目标函数不为所述设定函数时,判定所述初始目标函数符合标准,将所述初始目标函数作为目标函数;对所述目标函数进行特征提取,得到标准函数特征;针对所述标准函数特征,查询出组件名称不同但函数名称与函数特征对应的哈希算法相同的数据,保留文件版本信息的生成时间最早的那一条数据,然后删除其余数据,得到清洗函数特征;将所述清洗函数特征存储至所述特征库中,得到更新后的特征库。

6.一种电子设备,其特征在于,所述电子设备包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至4中任意一项所述的检测可执行文件引用的开源组件的方法。

7.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4中任意一项所述的检测可执行文件引用的开源组件的方法。

说明书 :

一种检测可执行文件引用的开源组件的方法及相关产品

技术领域

[0001] 本发明涉及软件检测技术领域,尤其涉及一种检测可执行文件引用的开源组件的方法及相关产品。

背景技术

[0002] 由于编译器、编译优化配置及指令架构等问题,导致在同一份开源组件源码所编译出的二进制文件会有明显的差别,所以很难将源码与二进制文件建立起对应关系。目前对二进制文件的检测方案大多采用基于文本、属性度量、程序逻辑及语义等方式,存在着组件名称检测准确率不高、无法自动化识别组件间的依赖关系(检测文件仅引用了A组件,但由于B组件依赖于A组件,检测结果出现A与B)及组件版本识能力弱等问题。综上,现存技术中存在对二进制文件进行检测时的准确性较低的问题。

发明内容

[0003] 本发明提供一种检测可执行文件引用的开源组件的方法及相关产品,其主要目的在于解决对二进制文件进行检测时的准确性较低的问题。
[0004] 为实现上述目的,本发明提供的一种检测可执行文件引用的开源组件的方法,包括:根据预设的开源组件的版本信息生成时间戳;根据开源组件、版本信息及时间戳生成库文件;利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;根据函数特征确认待检测可执行文件所引用的目标开源组件。
[0005] 为了解决上述问题,本发明还提供了一种检测可执行文件引用的开源组件的装置,包括:时间戳生成模块,用于根据预设的开源组件的版本信息生成时间戳;库文件生成模块,用于根据开源组件、版本信息及时间戳生成库文件;特征筛选模块,用于利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;组件确认模块,用于根据函数特征确认待检测可执行文件所引用的目标开源组件。
[0006] 为了解决上述问题,本发明还提供了一种电子设备,包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的计算机程序,计算机程序被至少一个处理器执行,以使至少一个处理器能够执行上述的检测可执行文件引用的开源组件的方法。
[0007] 为了解决上述问题,本发明还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一个计算机程序,至少一个计算机程序被电子设备中的处理器执行以实现上述的检测可执行文件引用的开源组件的方法。
[0008] 根据本发明提供的上述技术方案,通过自动编译组件的方式,解决了编译优化配置、指令架构造成的同一份开源组件源码所编译出的二进制文件会有明显的差别问题;通过组件每个文件版本的生成时间,来过滤组件之间的依赖关系,解决了无法确定组件依赖关系所产生的误报问题;通过对库文件以及待检测可执行文件反汇编后,对待检测可执行文件的反汇编结果进行处理,保证了与库文件的反汇编结果一致,从而提高了文件进行检测时的准确性;通过比较文件版本之间的函数特征对应的哈希算法,来进行文件版本的区分,保证了最终得到的待检测可执行文件的文件版本为最高版本。因此本发明提出的检测可执行文件引用的开源组件的方法及相关产品,可以解决对二进制文件进行检测时的准确性较低的问题。

附图说明

[0009] 图1为本发明一实施例提供的检测可执行文件引用的开源组件的方法的流程示意图;
[0010] 图2为本发明一实施例提供的命名文件中组件A依赖于组件B的示意图;
[0011] 图3为本发明一实施例提供的命名文件中两个组件的函数特征对应的哈希算法一致的示意图;
[0012] 图4为本发明一实施例提供的检测可执行文件引用的开源组件的装置的功能模块图;
[0013] 图5为本发明一实施例提供的实现检测可执行文件引用的开源组件的方法的电子设备的结构示意图。
[0014] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0015] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0016] 为解决现有技术中提供的开源组件引用检测方法所存在的对二进制文件进行检测时的准确性较低的问题。本发明提供了一种检测可执行文件引用的开源组件的方法,该方法通过开源组件的版本信息生成时间戳,根据开源组件、版本信息及时间戳生成库文件,利用库文件对特征库进行更新,并根据待检测可执行文件从更新后的特征库内筛选出函数特征,根据函数特征确认待检测可执行文件所引用的目标开源组件,从而能够提高对二进制文件进行检测时的准确性。
[0017] 参照图1所示,为本发明一实施例提供的检测可执行文件引用的开源组件的方法的流程示意图。在本实施例中,该检测可执行文件引用的开源组件的方法包括:
[0018] S1、根据预设的开源组件的版本信息生成时间戳。
[0019] 本发明实施例中,开源组件指的是用于构建软件系统的组件;通过自动编译的方式对开源组件进行克隆,得到克隆文件,其中,克隆文件中包含了开源组件的所有版本信息;版本信息指的是开源组件对应的版本号,其中,可以通过查询命令查询开源组件对应的所有版本信息,查询命令为“git tag”;开源组件包含若干版本信息,可以通过“git checkout [tag]”命令切换指定版本信息。
[0020] 本发明实施例中,根据预设的开源组件的版本信息生成时间戳,包括:获取开源组件的版本信息对应的版本日期及版本时间,根据版本日期及版本时间创建日期对象;利用预设的内置函数将日期对象转换为时间戳。
[0021] 本发明实施例中,版本日期指的是版本信息创建的日期;版本时间指的是版本信息创建的时间;根据版本日期及版本时间创建日期对象指的是调用无参构造函数,利用无参构造函数创建日期对象,例如,利用Date date=new Date()创建了一个名为date的Date对象;内置函数指的是getTime()函数,利用getTime()函数将日期对象转换为时间戳,其中,由于时间戳是一个长整型数字,因此,利用getTime()函数进行转换可以表示为long timestamp = date.getTime(),timestamp表示长整型变量。
[0022] 进一步地,根据开源组件的版本信息生成时间戳以后,可以利用预设的查询命令查询时间戳,其中,查询命令可以为“git log ‑1 ‑‑format=%ct [tag]”命令。
[0023] 本发明实施例中,根据开源组件的版本信息能够准确生成时间戳,通过时间戳能够过滤开源组件之间的依赖关系,从而能够减少误报问题。
[0024] S2、根据开源组件、版本信息及时间戳生成库文件。
[0025] 本发明实施例中,根据开源组件、版本信息及时间戳生成库文件,包括:从版本信息中选取目标版本信息,基于目标版本信息对开源组件的组件目录进行扫描,根据扫描的结果构建目标文件;配置目标文件的编译优化选项及指令架构目的,得到配置文件;从时间戳中提取目标版本信息对应的目标时间戳,并将目标时间戳存储至配置文件中,得到库文件。
[0026] 本发明实施例中,根据预先设定的开源组件对应的指定版本从版本信息中选取指定版本对应的版本信息作为目标版本信息,其中,指定版本可以是开源组件对应的任何一个版本;固定目标版本信息,对目标版本信息对应的所有开源组件进行遍历,当遍历到开源组件对应的文件为“CmakeList.txt”文件时,利用“cmake ‑G "Visual Studio 17 2022"”对“CmakeList.txt”文件进行编写,包括使用 project() 命令指定项目的名称、设定最低版本要求、添加源文件等,得到目标文件。
[0027] 进一步地,在实际应用中,为了实现对目标文件中开源组件的编译,可以借助安装Visual Studio时所集成的msbuild工具,执行如下命令:msbuild [sln文件路径]‑p:Configuration=Release‑p:Platform=x64‑p:CL_ExtraOptions="/O2/Ob2"‑p:
ConfigurationType=StaticLibrary,并可通过set() 命令来设置编译优化选项、通过add_library() 命令设置指令架构目的,得到配置文件。
[0028] 本发明实施例中,时间戳中包含若干个版本信息对应的时间戳,将目标版本信息与时间戳中的版本信息进行匹配,将匹配成功的版本信息对应的时间戳作为目标时间戳;将配置文件与目标时间戳进行合并,将合并后的配置文件作为库文件。
[0029] 本发明实施例中,根据开源组件、版本信息及时间戳能够准确生成库文件,从而能够提高后续文件处理的准确性以及计算机处理的效率。
[0030] S3、利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征。
[0031] 本发明实施例中,特征库包含函数名称、函数指令代码对应的哈希算法、函数组件名称、组件版本名称及组件版本等;待检测可执行文件可以为PE文件,指的是可移植的可执行的文件,例如,EXE文件、DLL文件、OCX文件、SYS文件及COM文件等。
[0032] 本发明实施例中,利用库文件对预设的特征库进行更新,包括:对库文件进行反汇编处理,得到处理文件;获取处理文件中的文件版本信息及文件时间戳,根据文件版本信息及文件时间戳对处理文件进行命名,得到命名文件;提取命名文件中的限定函数,对限定函数进行筛选,得到目标函数;对目标函数进行特征提取,得到标准函数特征,并对标准函数特征进行特征清洗,得到清洗函数特征;将清洗函数特征存储至特征库中,得到更新后的特征库。
[0033] 本发明实施例中,可以执行“dumpbin /disasm [库文件]>[处理文件]”的命令,实现对库文件的反汇编处理;文本版本信息指的是处理文件对应的文件版本;文件时间戳指的是处理文件对应的文件版本创建的日期及时间;利用文件版本信息及文件时间戳形成二元组,例如,文件版本号+文件生成时间;将二元组作为处理文件的文件名称,得到命名文件;限定函数包含时间函数、信息函数、工程函数、逻辑函数、库函数及引用函数等。
[0034] 本发明实施例中,对限定函数进行筛选,得到目标函数,包括:获取限定函数的操作码长度,判断操作码长度是否大于预设的字节长度;当操作码长度小于或等于字节长度时,判定限定函数不符合标准,对限定函数进行删除,将删除后的限定函数作为初始目标函数;当操作码大于字节长度时,判定限定函数符合标准,并将限定函数作为初始目标函数;判断初始目标函数是否为预设的设定函数;当初始目标函数为设定函数时,判定初始目标函数不符合标准,对初始目标函数进行删减,将删减后的初始目标函数作为目标函数;当初始目标函数不为设定函数时,判定初始目标函数符合标准,将初始目标函数作为目标函数。
[0035] 本发明实施例中,操作码长度指的是限定函数中的指令码,一个指令码占一个字节的长度,其中,限定函数中包含多个指令码,将所有指令码长度进行整合,得到限定函数的操作码长度;字节长度指的是预先设定的总字节长度,例如,设定字节长度为150个字节,当操作码长度大于字节长度时,表示限定函数满足第一条件,即作为初始目标函数;当操作码长度小于或等于字节长度时,表示限定函数不满足第一条件,即对限定函数进行删减。
[0036] 进一步地,设定函数为预先设定的非目标函数,例如,设定非目标函数为C/C++的库函数,因此,当初始目标函数为设定函数时,表示初始目标函数不符合第二条件,则对初始目标函数进行删除;当初始目标函数不为设定函数时,表示初始目标函数符合第二条件,则将初始目标函数作为目标函数。
[0037] 本发明实施例中,可以采用预设的关键函数对目标函数进行特征提取,其中,关键函数可以为int sift_features ( IplImage img, struct feature feat ),得到标准函数特征。
[0038] 本发明实施例中,可以从三个方面出发对标准函数特征进行特征清洗,第一,为了减小特征库的规模大小,删除掉命名文件中同一组件不同文件版本信息之间的相同函数哈希算法,首先查询出目标函数中组件名称相同且哈希算法相同的数据,保留文件版本信息中生成时间最小的那一条数据,然后删除其余数据即可;第二,为了避免由于命名文件中组件之间的相互依赖关系所产生的误报,需要对标准函数特征进行特征清洗,例如,首先查询出组件名称不同但函数名称与函数特征对应的哈希算法相同的数据,保留文件版本信息的生成时间最小的那一条数据,然后删除其余数据,当A组件依赖于B组件时,由于A依赖于B,则B组件的函数特征对应的哈希算法的文件版本信息的生成时间是最早的,则在A组件的特征数据中删除掉B组件的特征数据,如图2所示,表示命名文件中组件A依赖于组件B的原理示意图。
[0039] 进一步地,第三,为了避免命名文件中两个组件在巧合情况下具有相同的函数特征对应的哈希算法而造成误报,需要查询函数特征对应的哈希算法相同,但函数名称不相同的数据,在整个特征库中删除存在这条函数特征对应的哈希算法的所有数据,其中,如图3所示,表示命名文件中两个组件的函数特征对应的哈希算法一致的原理示意图。
[0040] 本发明实施例中,获取特征库对应的数据接口,基于数据接口利用文本传输协议(HTTP协议)将清洗函数特征存储至特征库中,实现特征库的更新。
[0041] 本发明实施例中,根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征,包括:对待检测可执行文件进行反汇编处理,得到处理执行文件;利用预设的函数返回指令对处理执行文件进行切割,得到切割函数;对切割函数进行特征提取,得到切割函数特征;将切割函数特征与特征库中的清洗函数特征进行匹配,根据匹配的结果从清洗函数特征中提取函数特征。
[0042] 本发明实施例中,可以采用预设的反汇编命令对待检测可执行文件进行反汇编处理,得到处理执行文件,其中,反汇编命令可以为“dumpbin /disasm [待检测可执行文件]>[处理执行文件]”;处理执行文件中表示内存的部分均替换为4个字节的0;由于待检测可执行文件的反汇编得到的处理执行文件与库文件反汇编得到的处理文件不同,因此,需要对处理执行文件进行切割,得到切割函数,其中,函数返回指令指的是汇编语言中的RET指令,切割函数的每一项都是一个单独的函数。
[0043] 本发明实施例中,对切割函数进行卷积、最大池化以及全连接处理,实现对切割函数的特征提取,得到切割函数特征;利用RK算法或KMP算法对切割函数特征及清洗函数特征进行匹配计算,将匹配成功的清洗函数特征提取出来作为函数特征,其中,匹配成功指的是切割函数特征与清洗函数特征的多个函数特征一致。
[0044] 本发明实施例中,利用库文件能够准确对特征库进行更新;根据待检测可执行文件从更新后的特征库内能够准确筛选出函数特征,从而保证了检测结果的准确性。
[0045] S4、根据函数特征确认待检测可执行文件所引用的目标开源组件。
[0046] 本发明实施例中,根据函数特征确认待检测可执行文件所引用的目标开源组件,包括:获取函数特征对应的文件版本信息,对文件版本信息对应的文件时间戳进行遍历,根据遍历的结果选取文件时间戳中的最晚文件时间戳;将最晚文件时间戳对应的文件版本信息作为待检测可执行文件的组件版本;根据组件版本从待检测可执行文件中提取目标开源组件。
[0047] 本发明实施例中,可以采用深度优先遍历的方式对文件时间戳进行遍历;最晚文件时间戳指的是最接近当前时间的日期及时间,即文件版本信息为最新版本,将最新版本作为待检测可执行文件的组件版本;根据组件版本从待检测可执行文件中找到对应的目标开源组件。
[0048] 本发明实施例中,根据函数特征能够准确确认待检测执行文本的目标开源组件,从而提高文件检测时的准确性。
[0049] 本发明实施例通过自动编译组件的方式,解决了编译优化配置、指令架构造成的同一份开源组件源码所编译出的二进制文件会有明显的差别问题;通过组件每个文件版本的生成时间,来过滤组件之间的依赖关系,解决了无法确定组件依赖关系所产生的误报问题;通过对库文件以及待检测可执行文件反汇编后,对待检测可执行文件的反汇编结果进行处理,保证了与库文件的反汇编结果一致,从而提高了文件进行检测时的准确性;通过比较文件版本之间的函数特征对应的哈希算法,来进行文件版本的区分,保证了最终得到的待检测可执行文件的文件版本为最高版本。因此本发明提出的检测可执行文件引用的开源组件的方法,可以解决对二进制文件进行检测时的准确性较低的问题。
[0050] 如图4所示,是本发明一实施例提供的检测可执行文件引用的开源组件的装置的功能模块图。
[0051] 本发明检测可执行文件引用的开源组件的装置400可以安装于电子设备中。根据实现的功能,检测可执行文件引用的开源组件的装置400可以包括时间戳生成模块401、库文件生成模块402、特征筛选模块403及组件确认模块404。本发明模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。
[0052] 在本实施例中,关于各模块/单元的功能如下:时间戳生成模块401,用于根据预设的开源组件的版本信息生成时间戳;库文件生成模块402,用于根据开源组件、版本信息及时间戳生成库文件;特征筛选模块403,用于利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;组件确认模块404,用于根据函数特征确认待检测可执行文件所引用的目标开源组件。
[0053] 详细地,本发明实施例中检测可执行文件引用的开源组件的装置400中的各模块在使用时采用与附图中的检测可执行文件引用的开源组件的方法一样的技术手段,并能够产生相同的技术效果,这里不再赘述。
[0054] 如图5所示,是本发明一实施例提供的实现检测可执行文件引用的开源组件的方法的电子设备的结构示意图。
[0055] 电子设备500可以包括处理器501、存储器502、通信总线503以及通信接口504,还可以包括存储在存储器502中并可在处理器501上运行的计算机程序,如检测可执行文件引用的开源组件的程序。
[0056] 其中,处理器501在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing Unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。处理器501是电子设备的控制核心(Control Unit),利用各种接口和线路连接整个电子设备的各个部件,通过运行或执行存储在存储器502内的程序或者模块(例如执行检测可执行文件引用的开源组件的程序等),以及调用存储在存储器502内的数据,以执行电子设备的各种功能和处理数据。
[0057] 存储器502至少包括一种类型的可读存储介质,可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如:SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器502在一些实施例中可以是电子设备的内部存储单元,例如该电子设备的移动硬盘。存储器502在另一些实施例中也可以是电子设备的外部存储设备,例如电子设备上配备的插接式移动硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(Secure Digital,SD)卡、闪存卡(Flash Card)等。进一步地,存储器502还可以既包括电子设备的内部存储单元也包括外部存储设备。存储器502不仅可以用于存储安装于电子设备的应用软件及各类数据,例如检测可执行文件引用的开源组件的程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
[0058] 通信总线503可以是外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。总线被设置为实现存储器502以及至少一个处理器501等之间的连接通信。
[0059] 通信接口504用于上述电子设备与其他设备之间的通信,包括网络接口和用户接口。可选地,网络接口可以包括有线接口和/或无线接口(如WI‑FI接口、蓝牙接口等),通常用于在该电子设备与其他电子设备之间建立通信连接。用户接口可以是显示器(Display)、输入单元(比如键盘(Keyboard)),可选地,用户接口还可以是标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light‑Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备中处理的信息以及用于显示可视化的用户界面。
[0060] 图5仅示出了具有部件的电子设备,本领域技术人员可以理解的是,图5示出的结构并不构成对电子设备500的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
[0061] 例如,尽管未示出,电子设备还可以包括给各个部件供电的电源(比如电池),优选地,电源可以通过电源管理装置与至少一个处理器501逻辑相连,从而通过电源管理装置实现充电管理、放电管理、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。电子设备还可以包括多种传感器、蓝牙模块、Wi‑Fi模块等,在此不再赘述。
[0062] 应该了解,实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
[0063] 电子设备500中的存储器502存储的检测可执行文件引用的开源组件的程序是多个指令的组合,在处理器501中运行时,可以实现:根据预设的开源组件的版本信息生成时间戳;根据开源组件、版本信息及时间戳生成库文件;利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;根据函数特征确认待检测可执行文件所引用的目标开源组件。
[0064] 具体地,处理器501对上述指令的具体实现方法可参考附图对应实施例中相关步骤的描述,在此不赘述。
[0065] 进一步地,电子设备500集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。计算机可读存储介质可以是易失性的,也可以是非易失性的。例如,计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)。
[0066] 本发明还提供一种计算机可读存储介质,可读存储介质存储有计算机程序,计算机程序在被电子设备的处理器所执行时,可以实现:根据预设的开源组件的版本信息生成时间戳;根据开源组件、版本信息及时间戳生成库文件;利用库文件对预设的特征库进行更新,并根据预设的待检测可执行文件从更新后的特征库内筛选出函数特征;根据函数特征确认待检测可执行文件所引用的目标开源组件。
[0067] 在本发明所提供的几个实施例中,应该理解到,所揭露的设备,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0068] 作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0069] 另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
[0070] 对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。
[0071] 因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。
[0072] 本申请实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
[0073] 此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一、第二等词语用来表示名称,而并不表示任何特定的顺序。
[0074] 最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。