CN117972399A - 用于二进制sca的特征提取方法、装置、设备及介质 - Google Patents
用于二进制sca的特征提取方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN117972399A CN117972399A CN202410369909.8A CN202410369909A CN117972399A CN 117972399 A CN117972399 A CN 117972399A CN 202410369909 A CN202410369909 A CN 202410369909A CN 117972399 A CN117972399 A CN 117972399A
- Authority
- CN
- China
- Prior art keywords
- binary
- file
- source code
- character string
- string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000605 extraction Methods 0.000 title claims abstract description 91
- 238000000034 method Methods 0.000 claims abstract description 40
- 230000006870 function Effects 0.000 claims description 85
- 238000012545 processing Methods 0.000 claims description 58
- 238000006243 chemical reaction Methods 0.000 claims description 49
- 238000001514 detection method Methods 0.000 claims description 48
- 230000008569 process Effects 0.000 claims description 15
- 238000013075 data extraction Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 8
- 238000012217 deletion Methods 0.000 claims description 7
- 230000037430 deletion Effects 0.000 claims description 7
- 238000004891 communication Methods 0.000 claims description 5
- 238000012216 screening Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 9
- 238000006467 substitution reaction Methods 0.000 description 8
- 230000018109 developmental process Effects 0.000 description 6
- 238000001914 filtration Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本公开提供了一种用于二进制SCA的特征提取方法、装置、设备及介质,其中,该方法包括:获取目标软件的源代码文件以及二进制文件;对二进制文件进行第一字符串提取,得到与二进制文件对应的二进制字符串集合,对源代码文件进行第二字符串提取,得到与源代码文件对应的源代码字符串集合;基于二进制字符串集合和源代码字符串集合,确定针对目标软件的目标字符串集合,目标字符串集合用于检测目标软件是否使用第三方组件。通过上述方式得到目标字符串集合,有助于避免单独从二进制文件进行字符串提取时的过多引入和遗漏提取的情况,同时减少单独从源代码文件进行字符串提取时,由于缺少字符串拼接导致与从二进制文件提取出的字符串无法匹配的情况。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种用于二进制SCA的特征提取方法、装置、设备及介质。
背景技术
在软件的开发过程中,使用第三方组件的比例逐渐增高,引用已有的组件来进行开发成为了当下主流的软件开发模式。虽然引入第三方组件加快了软件的研发效率,但是由第三方于组件在安全性上往往缺少有效地审查和管理,使得软件自身存在安全风险。为了降低软件中的组件安全隐患,可以通过软件成分分析(Software CompositionAnalysis,SCA)来识别软件中用到的第三方组件成分,进而分析其中使用的第三方组件是否存在风险。
在进行SCA检测时,大多是从编译好的二进制文件中提取字符串特征,通过字符串特征进行第三方组件的识别。然而这样只能提取到特定编译配置的字符串,比如特定语言类型的字符串,此时其他配置的字符串由于未被编译,导致其他配置的字符串未被提取出来,造成字符串的遗漏提取,进而导致对于部分第三方组件的识别遗漏。
发明内容
本公开实施例至少提供一种用于二进制SCA的特征提取方法、装置、设备及介质。
本公开实施例提供了一种用于二进制SCA的特征提取方法,所述方法包括:
获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到;
对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合;
基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
一种可选的实施方式中,所述对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合,包括:
对所述源代码文件进行格式转换处理,得到格式转换处理后的源代码文件,以使得所述格式转换处理后的源代码文件与所述二进制文件之间的格式相似度高于格式转换处理前的源代码文件与所述二进制文件之间的格式相似度;
对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
一种可选的实施方式中,所述对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合,包括:
针对所述格式转换处理后的源代码文件中的每对目标符号,将位于该对目标符号之间的字符进行提取,得到提取字符串,所述目标符号用于区分字符串和其他内容;
针对所述格式转换处理后的源代码文件中的每个函数,将该函数包括的各个提取字符串按照先后顺序进行拼接处理,得到函数字符串;
将各个函数分别对应的函数字符串,按照各个函数在源代码文件中的先后顺序进行拼接处理,得到文件字符串;
将所述文件字符串和至少一个所述函数字符串组成的字符串集合确定为与所述源代码文件对应的源代码字符串集合。
一种可选的实施方式中,所述源代码字符串集合包括文件字符串和至少一个函数字符串;所述基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,包括:
将所述二进制字符串集合中与所述函数字符串相同的二进制字符串删除,得到删除处理后的二进制字符串集合;
将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,其中,所述第一匹配结果用于指示在所述删除处理后的二进制字符串集合中是否存在与所述文件字符串匹配成功的二进制字符串;
将匹配成功的至少一个二进制字符串和所述至少一个函数字符串组成的集合确定为针对所述目标软件的目标字符串集合。
一种可选的实施方式中,所述将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,包括:
针对所述删除处理后的二进制字符串集合中的每个二进制字符串,在所述文件字符串中存在连续多个字符与该二进制字符串一致的情况下,将该二进制字符串确定为与所述文件字符串匹配成功的二进制字符串。
一种可选的实施方式中,在所述基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合之后,所述方法还包括:
对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果;所述检测结果用于指示所述目标软件是否使用第三方组件。
一种可选的实施方式中,所述对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果,包括:
将预先建立的代码特征库中的多个预设字符串与所述目标字符串集合中的每个字符串进行匹配,得到第二匹配结果,其中,所述代码特征库基于第三方组件对应的源代码样本文件以及二进制样本文件建立,所述第二匹配结果用于指示所述目标字符串集合中是否存在与所述预设字符串匹配成功的字符串;
基于所述第二匹配结果,确定针对所述目标软件的检测结果。
本公开实施例还提供一种用于二进制SCA的特征提取装置,所述装置包括:
文件获取模块,用于获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到;
数据提取模块,用于对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合;
数据筛选模块,用于基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
一种可选的实施方式中,所述数据提取模块在用于所述对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合时,具体用于:
对所述源代码文件进行格式转换处理,得到格式转换处理后的源代码文件,以使得所述格式转换处理后的源代码文件与所述二进制文件之间的格式相似度高于格式转换处理前的源代码文件与所述二进制文件之间的格式相似度;
对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
一种可选的实施方式中,所述数据提取模块在用于所述对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合时,具体用于:
针对所述格式转换处理后的源代码文件中的每对目标符号,将位于该对目标符号之间的字符进行提取,得到提取字符串,所述目标符号用于区分字符串和其他内容;
针对所述格式转换处理后的源代码文件中的每个函数,将该函数包括的各个提取字符串按照先后顺序进行拼接处理,得到函数字符串;
将各个函数分别对应的函数字符串,按照各个函数在源代码文件中的先后顺序进行拼接处理,得到文件字符串;
将所述文件字符串和至少一个所述函数字符串组成的字符串集合确定为与所述源代码文件对应的源代码字符串集合。
一种可选的实施方式中,所述源代码字符串集合包括文件字符串和至少一个函数字符串;所述数据筛选模块具体用于:
将所述二进制字符串集合中与所述函数字符串相同的二进制字符串删除,得到删除处理后的二进制字符串集合;
将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,其中,所述第一匹配结果用于指示在所述删除处理后的二进制字符串集合中是否存在与所述文件字符串匹配成功的二进制字符串;
将匹配成功的至少一个二进制字符串和所述至少一个函数字符串组成的集合确定为针对所述目标软件的目标字符串集合。
一种可选的实施方式中,所述数据筛选模块在用于所述将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果时,具体用于:
针对所述删除处理后的二进制字符串集合中的每个二进制字符串,在所述文件字符串中存在连续多个字符与该二进制字符串一致的情况下,将该二进制字符串确定为与所述文件字符串匹配成功的二进制字符串。
一种可选的实施方式中,所述装置还包括软件检测模块,所述软件检测模块用于:
对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果;所述检测结果用于指示所述目标软件是否使用第三方组件。
一种可选的实施方式中,所述软件检测模块在用于所述对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果时,具体用于:
将预先建立的代码特征库中的多个预设字符串与所述目标字符串集合中的每个字符串进行匹配,得到第二匹配结果,其中,所述代码特征库基于第三方组件对应的源代码样本文件以及二进制样本文件建立,所述第二匹配结果用于指示所述目标字符串集合中是否存在与所述预设字符串匹配成功的字符串;
基于所述第二匹配结果,确定针对所述目标软件的检测结果。
本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述任一种可能的用于二进制SCA的特征提取方法的步骤。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述任一种可能的用于二进制SCA的特征提取方法的步骤。
本公开实施例提供的用于二进制SCA的特征提取方法、装置、设备及介质,针对同一个目标软件,可以从该目标软件的源代码文件和二进制文件两侧均进行字符串的提取,得到与二进制文件对应的二进制字符串集合以及与源代码文件对应的源代码字符串集合,根据二进制字符串集合和源代码字符串集合确定目标字符串集合,以便后续通过目标字符串集合检测目标软件是否使用第三方组件,通过上述方式得到目标字符串集合,有助于避免单独从二进制文件进行字符串提取时,存在的过多引入和遗漏提取的情况,同时兼顾减少单独从源代码文件进行字符串提取时,由于缺少字符串拼接导致与从二进制文件提取出的字符串无法匹配的情况。
进一步的,使用通过上述方式得到的目标字符串集合来检测目标软件是否使用第三方组件,有助于提升检测的准确性和全面性,保障检测效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开的技术方案。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种源代码和二进制代码之间的关系示意图;
图2示出了本公开实施例所提供的一种用于二进制SCA的特征提取方法的流程图;
图3示出了本公开实施例所提供的另一种用于二进制SCA的特征提取方法的流程图;
图4示出了本公开实施例所提供的一种用于二进制SCA的特征提取的过程示意图;
图5示出了本公开实施例所提供的一种用于二进制SCA的特征提取装置的示意图之一;
图6示出了本公开实施例所提供的一种用于二进制SCA的特征提取装置的示意图之二;
图7示出了本公开实施例所提供的一种电子设备的结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在进行SCA检测时,大多是从编译好的二进制文件中提取字符串特征,通过字符串特征进行第三方组件的识别。这里可以同时参阅图1,图1为本公开实施例所提供的一种源代码和二进制代码之间的关系示意图,如图1中所示,源代码经过编译器的编译处理后,转换为汇编代码,汇编代码经过汇编器和链接器的链接处理后,转换为二进制代码。这里二进制代码中存在的常量字符串、部分类名称、函数名称以及配置信息等信息在编译链接前后均存在,因此这些信息存在一定的不变性,即这些信息受中央处理器(CentralProcessing Unit,CPU)架构、不同编译优化选项的影响较小,因此这些信息在编译链接前后能保持一致,因此可以从二进制文件中提取这些信息对应的字符串来进行第三方组件的识别。
然而这样只能提取到特定编译配置的字符串,比如特定语言类型的字符串,此时其他配置的字符串由于未被编译,导致其他配置的字符串未被提取出来,造成字符串的遗漏提取,进而导致对于部分第三方组件的识别遗漏。此外,由于二进制文件是经过编译处理的,编译器在编译时需要依赖静态库,因此可能会引入非本软件的头文件里或者静态库里的字符串,造成字符串的过多提取,进而导致对于部分第三方组件的错误识别。而若是直接从源代码中提取字符串,由于源代码未经过编译器的处理,因此缺少字符串拼接,导致与从二进制文件提取出的字符串存在无法匹配的情况。
基于上述研究,本公开提供了一种用于二进制SCA的特征提取方法,针对同一个目标软件,可以从该目标软件的源代码文件和二进制文件两侧均进行字符串的提取,得到与二进制文件对应的二进制字符串集合以及与源代码文件对应的源代码字符串集合,根据二进制字符串集合和源代码字符串集合确定目标字符串集合,以便后续通过目标字符串集合检测目标软件是否使用第三方组件,通过上述方式得到目标字符串集合,有助于避免单独从二进制文件进行字符串提取时,存在的过多引入和遗漏提取的情况,同时兼顾减少单独从源代码文件进行字符串提取时,由于缺少字符串拼接导致与从二进制文件提取出的字符串无法匹配的情况。进一步的,使用通过上述方式得到的目标字符串集合来检测目标软件是否使用第三方组件,有助于提升检测的准确性和全面性,保障检测效果。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种用于二进制SCA的特征提取方法进行详细介绍,本公开实施例所提供的用于二进制SCA的特征提取方法的执行主体一般为具有一定计算能力的电子设备。本实施方式中,该电子设备可以为服务器。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云存储、大数据和人工智能平台等基础云计算服务的云服务器。
其他实施方式中,该电子设备还可以为终端设备或者其他处理设备,该终端设备可以为移动设备、终端及计算设备等。其它处理设备可以是包括处理器和存储器的设备,在此不做限定。在一些可能的实现方式中,该用于二进制SCA的特征提取方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面结合附图,对本公开实施例提供的一种用于二进制SCA的特征提取方法加以说明。
参见图1所示,为本公开实施例提供的一种用于二进制SCA的特征提取方法的流程图,如图1中所示,本公开实施例提供的用于二进制SCA的特征提取方法包括步骤S101~S103,其中:
S101:获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到。
这里,可以获取对应于同一个目标软件的源代码文件和二进制文件,所述源代码文件和所述二进制文件为同一版本、同一项目的目标软件在不同编译阶段的文件,对所述源代码文件进行编译链接后得到所述二进制文件。
其中,本实施例不对编写所述目标软件的语言类型进行限制,例如c语言、java语言、go语言等。
S102:对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
本步骤中,可以从源代码文件和二进制文件两侧均进行字符串的提取,从而分别得到与所述二进制文件对应的二进制字符串集合,以及与所述源代码文件对应的源代码字符串集合。
这里,对所述二进制文件进行第一字符串提取和对所述源代码文件进行第二字符串提取的字符串提取方式不同。
具体的,针对所述二进制文件,由于二进制文件中本身包括字符串格式的信息,因此可以直接从所述二进制文件中提取二进制字符串。
可选地,可以基于二进制解析工具等,通过分析所述二进制文件的文件格式与结构,从所述二进制文件中提取出多个二进制字符串,将多个二进制字符串组成的字符串集合确定为与所述二进制文件对应的二进制字符串集合。
针对所述源代码文件,在一些可能的实施方式中,可以对所述源代码文件进行格式转换处理,得到格式转换处理后的源代码文件,以使得所述格式转换处理后的源代码文件与所述二进制文件之间的格式相似度高于格式转换处理前的源代码文件与所述二进制文件之间的格式相似度;对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
上述步骤中,考虑到源代码文件未经过编译链接处理,因此源代码文件的格式与所述二进制文件的格式偏差较大,具体的,由于源代码未经过编译器的处理,因此缺少字符串拼接,导致与从二进制文件提取出的字符串存在无法匹配的情况。为了解决上述问题,可以先对所述源代码文件进行格式转换处理,得到格式转换处理后的源代码文件,以使得所述格式转换处理后的源代码文件与所述二进制文件之间的格式相似度高于格式转换处理前的源代码文件与所述二进制文件之间的格式相似度,然后对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合,这样提取的源代码字符串集合中的字符串能够与从二进制文件提取出的字符串成功匹配。
其中,所述格式化处理包括以下处理中的至少一项:删除注释内容、删除汇编内容、进行宏替换处理。
这里,所述注释内容用于对所述源代码文件中的代码进行标注解释,提高代码的可读性,由于注释内容并不会参与编译,因此编译后的二进制文件中不会有注释内容,因此可以将所述源代码文件中的注释内容删除。
这里,所述汇编内容具体为采用汇编语言编写的代码,为了避免汇编内容对于字符串提取的影响,将所述源代码文件中的汇编内容删除。
针对宏替换处理,宏替换处理用于进行文本替换,是在编译过程中的机制,具体的,在编译器读到需要被替换的文本时,会将该文本替换为给定的文本,由于源代码文件未经过编译器的处理,因此为了提升源代码文件与二进制文件之间的格式相似度,对所述源代码文件进行宏替换处理。
示例性的,格式转换处理前的源代码文件包括下述代码:
#define OFF_FMT "l"
fprintf(stderr, "%"OFF_FMT"u+%"OFF_FMT"u records in"
经过宏替换处理后的对应代码为:
fprintf(stderr, "%""l""u+%""l""u records in"
这样,先对源代码文件进行格式转换处理,再进行第二字符串提取,通过该方式可以减少由于源代码未经过编译器的处理,因此缺少字符串拼接,导致与从二进制文件提取出的字符串存在无法匹配的情况。
在所述对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合时,具体的,针对所述格式转换处理后的源代码文件中的每对目标符号,将位于该对目标符号之间的字符进行提取,得到提取字符串,所述目标符号用于区分字符串和其他内容;针对所述格式转换处理后的源代码文件中的每个函数,将该函数包括的各个提取字符串按照先后顺序进行拼接处理,得到函数字符串;将各个函数分别对应的函数字符串,按照各个函数在源代码文件中的先后顺序进行拼接处理,得到文件字符串;将所述文件字符串和至少一个所述函数字符串组成的字符串集合确定为与所述源代码文件对应的源代码字符串集合。
上述步骤中,在格式转换处理后的源代码文件中,由于排除了其他信息的干扰,位于每对目标符号之间的只有字符串,从而可以将位于每对目标符号之间的字符进行提取,得到提取字符串。
其中,所述目标符号用于区分字符串和其他内容,可选地,所述目标符号具体可以为引号,这里,所述目标符号可以为单引号也可以为双引号,在此不做限制。
在提取得到各提取字符串后,可以将每个函数包括的各个提取字符串按照先后顺序进行拼接处理,得到函数字符串,并且还可以将源代码文件中所有的函数字符串按照各个函数在源代码文件中的先后顺序进行拼接处理,得到文件字符串。
可以理解,所述源代码字符串集合包括一个文件字符串和至少一个函数字符串,该一个文件字符串对应源代码文件,该至少一个函数字符串与源代码文件包括的各个函数一一对应。
针对所述函数字符串,承接上述示例,该函数的代码为:
fprintf(stderr, "%""l""u+%""l""u records in"
从中提取得到的提取字符串分别为%、l、u+%、l、u records in,将各个提取字符串按照先后顺序进行拼接处理,可以得到如下所示的函数字符串:
%lu+%lu records in
在拼接得到函数字符串时,还可以考虑到各个字符本身的含义,针对换行符、分隔符等不具备实际意义的字符,可以将其删除。
承接上述示例,函数代码中最末尾的为换行符,不具备实际意义,因此在拼接函数字符串时将其删除。
针对所述函数字符串,在另一示例中,某函数中包括的提取字符串具体为:
printf("Mac %-14s""IP %-13s""Host %-15s""Expires %s",
从中提取得到的提取字符串分别为Mac %-14s、IP %-13s、Host %-15s、Expires %s,将各个提取字符串按照先后顺序进行拼接处理,可以得到如下所示的函数字符串:
Mac %-14sIP %-13sHost %-15sExpires %s
这里,同样可以理解,最末尾的为换行符,不具备实际意义,因此在拼接函数字符串时将其删除。
针对所述文件字符串,示例性的,所述源代码文件中包括下述部分,这里举例了其中的两个函数:
const char* FAST_FUNC make_human_readable_str(unsigned long long val,
unsigned long block_size, unsigned long display_unit)
{
static const char unit_chars[] ALIGN1 = {
'\0', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'
};
---------跨函数
int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
{
struct addrinfo req, *ai = NULL;
int s;
memset(&req, 0, sizeof(req));
req.ai_family = AF_INET6;
s = getaddrinfo(name, NULL,&req,&ai);
if (s != 0) {
bb_error_msg("getaddrinfo: %s: %d", name, s);
return -1;
从中提取得到的提取字符串分别为\0、K、M、G、T、P、E、Z、Y、getaddrinfo: %s: %d,从而可以得到两个函数字符串,其中一个函数字符串为:
KMGTPEZY
另一个函数字符串为:
getaddrinfo: %s: %d
其中,\0为分割符,不具备实际意义,因此在拼接函数字符串时将其删除。
然后将源代码文件中所有的函数字符串按照各个函数在源代码文件中的先后顺序进行拼接处理,可以得到如下所示的文件字符串;
xxxxxKMGTPEZYgetaddrinfo: %s: %dxxxxxxxxxxxxxx
这里的xx表示在从上述示例中的两个函数之前以及之后的其他函数中提取得到的函数字符串。
这样,可以将格式转换处理后的源代码文件中位于每对目标符号之间的字符进行提取,得到提取字符串,并且还可以得到对应于各个函数的函数字符串以及对应与源代码文件的文件字符串,有助于保障针对源代码文件进行字符串提取的全面性和丰富性。
S103:基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
本步骤中,在得到二进制字符串集合和源代码字符串集合后,可以从中进行筛选,从而构建目标字符串集合,以便后续使用目标字符串集合来检测所述目标软件是否使用第三方组件。
通过前述内容可知,所述源代码字符串集合包括文件字符串和至少一个函数字符串,所述二进制字符串集合包括多个二进制字符串,为了确定所述目标字符串集合,具体的,可以将所述二进制字符串集合中与所述函数字符串相同的二进制字符串删除,得到删除处理后的二进制字符串集合;将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,其中,所述第一匹配结果用于指示在所述删除处理后的二进制字符串集合中是否存在与所述文件字符串匹配成功的二进制字符串;将匹配成功的至少一个二进制字符串和所述至少一个函数字符串组成的集合确定为针对所述目标软件的目标字符串集合。
上述步骤中,由于所述二进制文件通过对所述源代码文件进行编译链接后得到,因此所述二进制文件和所述源代码文件之间肯定有重复的内容,为了避免重复的数据处理,可以先将所述二进制字符串集合中与所述函数字符串相同的二进制字符串删除,得到删除处理后的二进制字符串集合。
这里,在源代码文件中部分分散的字符,经过编译器的优化处理后可以组合成一个字符串,为此将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,避免数据的遗漏。
进而将与所述文件字符串匹配成功的至少一个二进制字符串和所述至少一个函数字符串组成的集合确定为针对所述目标软件的目标字符串集合,有助于保障目标字符串集合的全面性和准确性。
这样,不但删除了二进制字符串集合中与函数字符串相同的二进制字符串,而且保留了删除处理后的二进制字符串集合中与文件字符串匹配成功的二进制字符串,有助于保障目标字符串集合的全面性和准确性。
为了得到第一匹配结果,在一些可能的实施方式中,针对所述删除处理后的二进制字符串集合中的每个二进制字符串,在所述文件字符串中存在连续多个字符与该二进制字符串一致的情况下,将该二进制字符串确定为与所述文件字符串匹配成功的二进制字符串。
该步骤中,在所述文件字符串中存在连续多个字符与该二进制字符串一致的情况下,可以认为该二进制字符串是所述文件字符串的子串,也即该二进制字符串与所述文件字符串匹配成功。
示例性的,所述文件字符串具体为:
xxxxxKMGTPEZYgetaddrinfo: %s: %dxxxxxxxxxxxxxx
删除处理后的二进制字符串集合包括三个二进制字符串,分别为:
Aaaaa、KMGTPEZYgetaddrinfo: %s: %d、bbbbbbbbbb
从而可以确定与文件字符串匹配成功的二进制字符串为:
KMGTPEZYgetaddrinfo: %s: %d
这样,将与文件字符串中存在的连续多个字符一致的二进制字符串确定为与文件字符串匹配成功的二进制字符串,有助于提取到某些在源代码文件中是分散的字符,但是经编译器优化后组合成一个字符串的情况,从而保障字符串提取的全面性,避免遗漏提取。
本公开实施例提供的用于二进制SCA的特征提取方法,针对同一个目标软件,可以从该目标软件的源代码文件和二进制文件两侧均进行字符串的提取,得到与二进制文件对应的二进制字符串集合以及与源代码文件对应的源代码字符串集合,根据二进制字符串集合和源代码字符串集合确定目标字符串集合,以便后续通过目标字符串集合检测目标软件是否使用第三方组件,通过上述方式得到目标字符串集合,有助于避免单独从二进制文件进行字符串提取时,存在的过多引入和遗漏提取的情况,同时兼顾减少单独从源代码文件进行字符串提取时,由于缺少字符串拼接导致与从二进制文件提取出的字符串无法匹配的情况。
进一步的,使用通过上述方式得到的目标字符串集合来检测目标软件是否使用第三方组件,有助于提升检测的准确性和全面性,保障检测效果。
参见图3所示,图3为本公开实施例提供的另一种用于二进制SCA的特征提取方法的流程图,如图3中所示,本公开实施例提供的用于二进制SCA的特征提取方法包括步骤S301~S304,其中:
S301:获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到。
S302:对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
S303:基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
其中,步骤S301至步骤S303的描述可以参照步骤S201至步骤S203的描述,并且可以达到相同的技术效果和解决相同的技术问题,在此不做赘述。
S304:对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果;所述检测结果用于指示所述目标软件是否使用第三方组件。
本步骤中,通过对所述目标字符串集合中的各个字符串进行软件成分分析检测,可以检测出所述目标软件中引用的第三方组件的名称以及对应的版本等。
根据上述内容可知,所述目标字符串集合中的各个字符串包括与所述文件字符串匹配成功的至少一个二进制字符串和所述至少一个函数字符串。
这样,通过基于二进制文件和源代码文件得到的目标字符串集合,进行针对目标软件的检测,可以确定目标软件是否使用第三方组件,有助于提升检测的准确性和全面性,保障检测效果。
在一些可能的实施方式中,可以将预先建立的代码特征库中的多个预设字符串与所述目标字符串集合中的每个字符串进行匹配,得到第二匹配结果,其中,所述代码特征库基于第三方组件对应的源代码样本文件以及二进制样本文件建立,所述第二匹配结果用于指示所述目标字符串集合中是否存在与所述预设字符串匹配成功的字符串;基于所述第二匹配结果,确定针对所述目标软件的检测结果。
这里,所述代码特征库基于第三方组件对应的源代码样本文件以及二进制样本文件建立,所述代码特征库的确定过程与所述目标字符串集合的确定过程相似,针对同一个第三方组件,可以从该第三方组件的源代码样本文件和二进制样本文件两侧均进行字符串的提取,得到与二进制样本文件对应的二进制样本字符串集合以及与源代码样本文件对应的源代码样本字符串集合,根据二进制样本字符串集合和源代码样本字符串集合确定代码特征库。具体建立代码特征库的步骤描述参见前述各个实施例,此处不再赘述。
为了得到第二匹配结果,在一些可能的实施方式中,针对所述目标字符串集合中的每个字符串,将该字符串与所述代码特征库中的多个预设字符串进行匹配,在与任一预设字符串的匹配度高于预设阈值的情况下,将该字符串确定为与所述预设字符串匹配成功的字符串。
考虑到字符串本身可能会包含可变的部分,例如日期、文件路径等,这些信息可能会导致所述目标字符串集合中的字符串与预设字符串匹配失败,因此,设置所述代码特征库的数据结构为字典树,所述字典树中的一条路径表征第三方组件中的一个预设字符串。如此,由于字典树自身结构的限制,并不能将整个字符串作为一个特征构建字典树,字典树的建立必须将字符串进行分词等操作,提取出需要的特征后再构建字典树,在构建过程中会剔除掉无用的冗余信息,从而提升所述目标字符串集合中的字符串与预设字符串匹配的效率和效果。
这样,通过采用与目标字符串集合相同方式生成的代码特征库,与目标字符串集合进行匹配,有助于提升检测的准确性和全面性,保障检测效果。
为了清晰地展示用于二进制SCA的特征提取的过程,这里可以同时参照图4,图4为本公开实施例所提供的一种用于二进制SCA的特征提取的过程示意图,如图4中所示,可以获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到;对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合;基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件;对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果;所述检测结果用于指示所述目标软件是否使用第三方组件。其中,具体步骤的描述参见前述各个实施例,此处不再赘述。
本公开实施例提供的用于二进制SCA的特征提取方法,针对同一个目标软件,可以从该目标软件的源代码文件和二进制文件两侧均进行字符串的提取,得到与二进制文件对应的二进制字符串集合以及与源代码文件对应的源代码字符串集合,根据二进制字符串集合和源代码字符串集合确定目标字符串集合,以便后续通过目标字符串集合检测目标软件是否使用第三方组件,通过上述方式得到目标字符串集合,有助于避免单独从二进制文件进行字符串提取时,存在的过多引入和遗漏提取的情况,同时兼顾减少单独从源代码文件进行字符串提取时,由于缺少字符串拼接导致与从二进制文件提取出的字符串无法匹配的情况。
进一步的,使用通过上述方式得到的目标字符串集合来检测目标软件是否使用第三方组件,有助于提升检测的准确性和全面性,保障检测效果。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与用于二进制SCA的特征提取方法对应的用于二进制SCA的特征提取装置,由于本公开实施例中的用于二进制SCA的特征提取装置解决问题的原理与本公开实施例上述用于二进制SCA的特征提取方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图5和图6,图5为本公开实施例提供的一种用于二进制SCA的特征提取装置的示意图之一,图6为本公开实施例提供的一种用于二进制SCA的特征提取装置的示意图之二。如图5中所示,本公开实施例提供的用于二进制SCA的特征提取装置500包括:
文件获取模块510,用于获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到;
数据提取模块520,用于对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合;
数据筛选模块530,用于基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
一种可选的实施方式中,所述数据提取模块520在用于所述对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合时,具体用于:
对所述源代码文件进行格式转换处理,得到格式转换处理后的源代码文件,以使得所述格式转换处理后的源代码文件与所述二进制文件之间的格式相似度高于格式转换处理前的源代码文件与所述二进制文件之间的格式相似度;
对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
一种可选的实施方式中,所述数据提取模块520在用于所述对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合时,具体用于:
针对所述格式转换处理后的源代码文件中的每对目标符号,将位于该对目标符号之间的字符进行提取,得到提取字符串,所述目标符号用于区分字符串和其他内容;
针对所述格式转换处理后的源代码文件中的每个函数,将该函数包括的各个提取字符串按照先后顺序进行拼接处理,得到函数字符串;
将各个函数分别对应的函数字符串,按照各个函数在源代码文件中的先后顺序进行拼接处理,得到文件字符串;
将所述文件字符串和至少一个所述函数字符串组成的字符串集合确定为与所述源代码文件对应的源代码字符串集合。
一种可选的实施方式中,所述源代码字符串集合包括文件字符串和至少一个函数字符串;所述数据筛选模块530具体用于:
将所述二进制字符串集合中与所述函数字符串相同的二进制字符串删除,得到删除处理后的二进制字符串集合;
将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,其中,所述第一匹配结果用于指示在所述删除处理后的二进制字符串集合中是否存在与所述文件字符串匹配成功的二进制字符串;
将匹配成功的至少一个二进制字符串和所述至少一个函数字符串组成的集合确定为针对所述目标软件的目标字符串集合。
一种可选的实施方式中,所述数据筛选模块530在用于所述将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果时,具体用于:
针对所述删除处理后的二进制字符串集合中的每个二进制字符串,在所述文件字符串中存在连续多个字符与该二进制字符串一致的情况下,将该二进制字符串确定为与所述文件字符串匹配成功的二进制字符串。
一种可选的实施方式中,如图6中所示,所述用于二进制SCA的特征提取装置500还包括软件检测模块540,所述软件检测模块540用于:
对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果;所述检测结果用于指示所述目标软件是否使用第三方组件。
一种可选的实施方式中,所述软件检测模块540在用于所述对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果时,具体用于:
将预先建立的代码特征库中的多个预设字符串与所述目标字符串集合中的每个字符串进行匹配,得到第二匹配结果,其中,所述代码特征库基于第三方组件对应的源代码样本文件以及二进制样本文件建立,所述第二匹配结果用于指示所述目标字符串集合中是否存在与所述预设字符串匹配成功的字符串;
基于所述第二匹配结果,确定针对所述目标软件的检测结果。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例提供的用于二进制SCA的特征提取装置,针对同一个目标软件,可以从该目标软件的源代码文件和二进制文件两侧均进行字符串的提取,得到与二进制文件对应的二进制字符串集合以及与源代码文件对应的源代码字符串集合,根据二进制字符串集合和源代码字符串集合确定目标字符串集合,以便后续通过目标字符串集合检测目标软件是否使用第三方组件,通过上述方式得到目标字符串集合,有助于避免单独从二进制文件进行字符串提取时,存在的过多引入和遗漏提取的情况,同时兼顾减少单独从源代码文件进行字符串提取时,由于缺少字符串拼接导致与从二进制文件提取出的字符串无法匹配的情况。
进一步的,使用通过上述方式得到的目标字符串集合来检测目标软件是否使用第三方组件,有助于提升检测的准确性和全面性,保障检测效果。
对应于图2和图3中的用于二进制SCA的特征提取方法,本公开实施例还提供了一种电子设备700,如图7中所示,为本公开实施例提供的电子设备700的结构示意图,包括:
处理器710、存储器720、和总线730。其中,存储器720用于存储执行指令,包括内存721和外部存储器722;这里的内存721也称内存储器,用于暂时存放处理器710中的运算数据,以及与硬盘等外部存储器722交换的数据,处理器710通过内存721与外部存储器722进行数据交换。
本申请实施例中,存储器720具体用于存储执行本申请方案的应用程序代码,并由处理器710来控制执行。也即,当电子设备700运行时,处理器710与存储器720之间通过总线730通信,使得处理器710执行存储器720中存储的应用程序代码,进而执行前述任一实施例中所述的用于二进制SCA的特征提取方法的步骤。
其中,存储器720可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器710可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备700的具体限定。在本申请另一些实施例中,电子设备700可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的用于二进制SCA的特征提取方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品包括有计算机指令,所述计算机指令被处理器执行时可以执行上述方法实施例中所述的用于二进制SCA的特征提取方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种用于二进制SCA的特征提取方法,其特征在于,所述方法包括:
获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到;
对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合;
基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
2.根据权利要求1所述的方法,其特征在于,所述对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合,包括:
对所述源代码文件进行格式转换处理,得到格式转换处理后的源代码文件,以使得所述格式转换处理后的源代码文件与所述二进制文件之间的格式相似度高于格式转换处理前的源代码文件与所述二进制文件之间的格式相似度;
对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合。
3.根据权利要求2所述的方法,其特征在于,所述对所述格式转换处理后的源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合,包括:
针对所述格式转换处理后的源代码文件中的每对目标符号,将位于该对目标符号之间的字符进行提取,得到提取字符串,所述目标符号用于区分字符串和其他内容;
针对所述格式转换处理后的源代码文件中的每个函数,将该函数包括的各个提取字符串按照先后顺序进行拼接处理,得到函数字符串;
将各个函数分别对应的函数字符串,按照各个函数在源代码文件中的先后顺序进行拼接处理,得到文件字符串;
将所述文件字符串和至少一个所述函数字符串组成的字符串集合确定为与所述源代码文件对应的源代码字符串集合。
4.根据权利要求1所述的方法,其特征在于,所述源代码字符串集合包括文件字符串和至少一个函数字符串;所述基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,包括:
将所述二进制字符串集合中与所述函数字符串相同的二进制字符串删除,得到删除处理后的二进制字符串集合;
将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,其中,所述第一匹配结果用于指示在所述删除处理后的二进制字符串集合中是否存在与所述文件字符串匹配成功的二进制字符串;
将匹配成功的至少一个二进制字符串和所述至少一个函数字符串组成的集合确定为针对所述目标软件的目标字符串集合。
5.根据权利要求4所述的方法,其特征在于,所述将所述删除处理后的二进制字符串集合中的各个二进制字符串与所述文件字符串进行匹配,得到第一匹配结果,包括:
针对所述删除处理后的二进制字符串集合中的每个二进制字符串,在所述文件字符串中存在连续多个字符与该二进制字符串一致的情况下,将该二进制字符串确定为与所述文件字符串匹配成功的二进制字符串。
6.根据权利要求1所述的方法,其特征在于,在所述基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合之后,所述方法还包括:
对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果;所述检测结果用于指示所述目标软件是否使用第三方组件。
7.根据权利要求6所述的方法,其特征在于,所述对所述目标字符串集合进行软件成分分析检测,得到针对所述目标软件的检测结果,包括:
将预先建立的代码特征库中的多个预设字符串与所述目标字符串集合中的每个字符串进行匹配,得到第二匹配结果,其中,所述代码特征库基于第三方组件对应的源代码样本文件以及二进制样本文件建立,所述第二匹配结果用于指示所述目标字符串集合中是否存在与所述预设字符串匹配成功的字符串;
基于所述第二匹配结果,确定针对所述目标软件的检测结果。
8.一种用于二进制SCA的特征提取装置,其特征在于,所述装置包括:
文件获取模块,用于获取目标软件的源代码文件以及二进制文件,其中,所述二进制文件通过对所述源代码文件进行编译链接后得到;
数据提取模块,用于对所述二进制文件进行第一字符串提取,得到与所述二进制文件对应的二进制字符串集合,以及对所述源代码文件进行第二字符串提取,得到与所述源代码文件对应的源代码字符串集合;
数据筛选模块,用于基于所述二进制字符串集合和所述源代码字符串集合,确定针对所述目标软件的目标字符串集合,所述目标字符串集合用于检测所述目标软件是否使用第三方组件。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至7中任一项所述的用于二进制SCA的特征提取方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至7中任一项所述的用于二进制SCA的特征提取方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410369909.8A CN117972399A (zh) | 2024-03-28 | 2024-03-28 | 用于二进制sca的特征提取方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410369909.8A CN117972399A (zh) | 2024-03-28 | 2024-03-28 | 用于二进制sca的特征提取方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117972399A true CN117972399A (zh) | 2024-05-03 |
Family
ID=90855811
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410369909.8A Pending CN117972399A (zh) | 2024-03-28 | 2024-03-28 | 用于二进制sca的特征提取方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117972399A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114398069A (zh) * | 2021-12-10 | 2022-04-26 | 中国人民解放军战略支援部队信息工程大学 | 一种基于交叉指纹分析的公共组件库精确版本识别方法及系统 |
CN115794629A (zh) * | 2022-11-24 | 2023-03-14 | 深圳开源互联网安全技术有限公司 | 软件成分检测方法、电子设备及计算机可读存储介质 |
CN116149669A (zh) * | 2023-04-14 | 2023-05-23 | 杭州安恒信息技术股份有限公司 | 一种基于二进制文件的软件成分分析方法、装置以及介质 |
US20230161880A1 (en) * | 2021-11-24 | 2023-05-25 | Hangzhou Evergreen Information Technology Co., Ltd. | Cross-architecture automatic detection method and system for third-party components and security risks thereof |
CN116738441A (zh) * | 2023-06-16 | 2023-09-12 | 中机博也(宁波)汽车技术有限公司 | 一种基于组件签名的二进制软件成分分析方法 |
CN117435480A (zh) * | 2023-10-12 | 2024-01-23 | 中国电信股份有限公司技术创新中心 | 一种二进制文件检测方法、装置、电子设备及存储介质 |
-
2024
- 2024-03-28 CN CN202410369909.8A patent/CN117972399A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230161880A1 (en) * | 2021-11-24 | 2023-05-25 | Hangzhou Evergreen Information Technology Co., Ltd. | Cross-architecture automatic detection method and system for third-party components and security risks thereof |
CN114398069A (zh) * | 2021-12-10 | 2022-04-26 | 中国人民解放军战略支援部队信息工程大学 | 一种基于交叉指纹分析的公共组件库精确版本识别方法及系统 |
CN115794629A (zh) * | 2022-11-24 | 2023-03-14 | 深圳开源互联网安全技术有限公司 | 软件成分检测方法、电子设备及计算机可读存储介质 |
CN116149669A (zh) * | 2023-04-14 | 2023-05-23 | 杭州安恒信息技术股份有限公司 | 一种基于二进制文件的软件成分分析方法、装置以及介质 |
CN116738441A (zh) * | 2023-06-16 | 2023-09-12 | 中机博也(宁波)汽车技术有限公司 | 一种基于组件签名的二进制软件成分分析方法 |
CN117435480A (zh) * | 2023-10-12 | 2024-01-23 | 中国电信股份有限公司技术创新中心 | 一种二进制文件检测方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111488174B (zh) | 应用程序接口文档的生成方法、装置、计算机设备及介质 | |
US10572370B2 (en) | Test-assisted application programming interface (API) learning | |
Guerrouj et al. | Tidier: an identifier splitting approach using speech recognition techniques | |
US11048798B2 (en) | Method for detecting libraries in program binaries | |
US20080228466A1 (en) | Language neutral text verification | |
CN111967017B (zh) | 生成依赖关系的方法、装置、终端设备及存储介质 | |
CN111881300A (zh) | 面向第三方库依赖的知识图谱构建方法及系统 | |
CN105095304A (zh) | 日志模板生成方法及设备 | |
CN115080406A (zh) | 代码日志生成方法、装置、设备和存储介质 | |
CN110795069A (zh) | 代码分析方法、智能终端及计算机可读存储介质 | |
CN114201756A (zh) | 一种智能合约代码片段的漏洞检测方法和相关装置 | |
CN115017441A (zh) | 一种资产分类方法、装置及电子设备和存储介质 | |
CN116933267B (zh) | 一种符号执行的智能合约漏洞检测方法、系统和设备 | |
CN117435480A (zh) | 一种二进制文件检测方法、装置、电子设备及存储介质 | |
CN111767161A (zh) | 远程调用深度识别方法、装置、计算机设备及可读存储介质 | |
CN117009911A (zh) | 一种目标事件的异常判定方法、装置、介质及电子设备 | |
CN111241096A (zh) | 一种excel文档的文本提取方法、系统、终端及存储介质 | |
CN117972399A (zh) | 用于二进制sca的特征提取方法、装置、设备及介质 | |
CN115599388B (zh) | 一种api接口文档生成方法、存储介质及电子设备 | |
CN112069052A (zh) | 一种异常对象检测方法、装置、设备及存储介质 | |
CN112084046B (zh) | 一种分布式计算中泛化接口调用方法及装置 | |
CN110795915A (zh) | xml文件批量修改方法、系统、设备和计算机可读存储介质 | |
CN114157734A (zh) | 数据解析方法、装置、电子设备及存储介质 | |
CN114492365A (zh) | 二进制文件之间相似度的确定方法、计算设备及存储介质 | |
CN112328246A (zh) | 页面组件生成方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |