基于文件的漏洞检测方法和装置与流程

文档序号:12819233阅读:377来源:国知局
基于文件的漏洞检测方法和装置与流程

本申请涉及移动安全领域,具体而言,涉及一种基于文件的漏洞检测方法和装置。



背景技术:

随着android插件化开发的流行,较为大型的应用设计通常都会使用插件化开发,即将一些功能通过子dex(dalvikvmexecutes的缩写,为一种用于android的可执行程序)的方式集成进apk(androidpackage的缩写,即android安装程序包)中。在运行apk时动态加载这些dex文件,以实现dex文件对应的功能。

而标准的应用程序的apk只包含一个主dex文件,在对应用程序进行漏洞查找时,需反编译apk,并对反编译出的语句进行漏洞查找。现有技术中的漏洞扫描系统只检测apk中的主dex文件,并对其进行反编译,并不对apk中的子dex文件进行反编译,但是子dex文件中也可能有程序漏洞,无法扫描子dex文件也便无法扫描子dex文件中的漏洞,从而会漏掉apk中的某些漏洞。

针对现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题,目前尚未提出有效的解决方案。



技术实现要素:

本申请实施例提供了一种基于文件的漏洞检测方法和装置,以至少解决现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题。

根据本申请实施例的一个方面,提供了一种基于文件的漏洞检测方法,该方法包括:获取待检测程序的程序文件,其中,程序文件包括多个子文件;提取每个子文件的文件特征信息,其中,文件特征信息用于记录对应子文件的文件特征;基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件;在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

根据本申请实施例的另一方面,还提供了一种基于文件的漏洞检测装置,该装置包括:获取模块,用于获取待检测程序的程序文件,其中,程序文件包括多个子文件;提取模块,用于提取每个子文件的文件特征信息,其中,文件特征信息用于记录对应 子文件的文件特征;确定模块,用于基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件;扫描模块,用于在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

在本申请实施例中,基于待检测程序中每个子文件的文件特征,查找待检测程序的程序文件中的可执行文件(如dex文件),并利用确定的所有可执行文件,对待检测程序进行漏洞扫描。通过上述实施例,可以查找到待检测程序的程序文件中所有可执行文件,包括主可执行文件和子可执行文件,并对所有可执行文件进行漏洞查找,以实现对待检测程序中可能存在的漏洞的全面扫描,使漏洞查找的效果最大化,从而解决了现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是本申请实施例的一种基于文件的漏洞检测方法的计算机终端的结构框图;

图2是根据本申请实施例的一种基于文件的漏洞检测方法的流程图;

图3是根据本申请实施例的一种可选的基于文件的漏洞检测方法的流程图;

图4是根据本申请实施例的另一种可选的基于文件的漏洞检测方法的流程图;

图5是根据本申请实施例的一种基于文件的漏洞检测装置的示意图;

图6是根据本申请实施例的一种可选的基于文件的漏洞检测装置的示意图;

图7是根据本申请实施例的另一种可选的基于文件的漏洞检测装置的示意图;

图8是根据本申请实施例的又一种可选的基于文件的漏洞检测装置的示意图;

图9是根据本申请实施例的第四种可选的基于文件的漏洞检测装置的示意图;

图10是根据本申请实施例的一种计算机终端的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领 域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请涉及到的名词解释如下:

apk,英文名称androidpackage,即android安装包;

dex,英文名称dalvikvmexecutes,一种用于android的可执行程序;

应用程序,是指运行于操作系统上的计算机程序。

实施例1

根据本申请实施例,还提供了一种基于文件的漏洞检测方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种基于文件的漏洞检测方法的计算机终端的结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储应用软件的软件程序以及模块,如本申请实施例中的基于文件的漏洞检测方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的反编译指令中寄存器的处理方法。存储器104可包括高速随机存储器,还可包括非易失性存 储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

在上述运行环境下,本申请提供了一种基于文件的漏洞检测方法。图2是根据本申请实施例的一种基于文件的漏洞检测方法的流程图。如图2所示,该方法可以包括如下步骤:

步骤s202:获取待检测程序的程序文件,其中,程序文件包括多个子文件。

步骤s204:提取每个子文件的文件特征信息,其中,文件特征信息用于记录对应子文件的文件特征。

步骤s206:基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件。

步骤s208:在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

采用本申请实施例,基于待检测程序中每个子文件的文件特征,查找待检测程序的程序文件中的可执行文件(如dex文件),并利用确定的所有可执行文件,对待检测程序进行漏洞扫描。通过上述实施例,可以查找到待检测程序的程序文件中所有可执行文件(包括主可执行文件和子可执行文件),并对所有可执行文件进行漏洞查找,以实现对待检测程序中可能存在的漏洞的全面扫描,使漏洞查找的效果最大化,从而解决了现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题。

上述的待检测程序的程序文件可以为apk,该待检测程序可以为即时通讯应用程序、定位程序,在待检测程序的程序文件中可以包括多个dex文件,dex文件为上述的可执行文件。对待检测程序进行漏洞查找时,可以通过apk编译工具将待检测程序的apk(该apk中可以包括源文件和资源文件)进行反编译,得到反编译语句(如通 过smali语法得到的smali文件中的语句),并利用反编译语句进行漏洞查找。

上述的可执行文件指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。如,在windows操作系统下,可执行文件可以是.exe文件,也可以是.sys文件;另外,可执行文件还可以是flash、bat、dex等格式,对应于安卓操作系统,可执行文件为dex文件。

上述实施例中的程序文件apk可以通过打包工具将dex文件(.dex格式的文件)、资源文件(.arsc格式的文件)以及应用全局配置文件(.xml格式的文件)打包得到,通过在终端中直接运行该apk以实现待检测程序的安装,可选地,可以使用终端上的android模拟器运行该apk。

其中,apk文件实际是一个zip格式的压缩包,但后缀名被修改为apk,可以通过解压工具(如unzip解压)对程序文件apk进行解压,在解压后,可以得到多个子文件,该多个子文件中可以包括dex文件,dex文件是dalvik字节码的可执行程序,每个程序文件apk中都包含一个或者多个dex文件。

上述的dex文件的文件结构可以包括meta-inf目录、res目录(存放资源文件的目录)、manifest.xml(程序全局配置文件)、classes.dex(dalvik字节码)、resourcs.arsc。其中,meta-inf目录下存放的是签名信息,用来保证程序包的完整性和系统的安全;res目录存放资源文件;manifest.xml用于描述应用程序的名字、版本、权限、引用的库文件等信息;classes.dex是java源代码编译后生成的java字节码文件;resourcs.arsc存放编译后的二进制资源文件。

上述的终端可以为移动终端,如智能手机、平板电脑等。

在上述实施例中,依次提取apk安装程序中的每个子文件的文件特征,每个子文件中的文件特征信息都用于标识文件特征,该文件特征信息可以使用文件的类型字段、版本字段标识该文件的类型。

如,若子文件为压缩文件,则对应压缩文件的文件特征,该文件特征可以为压缩文件的标识符字段、压缩文件的版本字段以及压缩文件的子文件总数的字段等;若子文件为dex文件,则对应dex文件的文件特征,该文件特征可以为dex文件的标识符字段、dex文件的版本字段等。

根据本申请的上述实施例,通过安装在终端上的漏洞扫描系统对应用程序进行漏洞查找时,首先通过漏洞扫描系统中的解压工具解压应用程序的程序包,得到程序包中的多个子文件;其次通过漏洞扫描系统提取每个子文件的文件特征,并基于每个子文件的文件特征判断其是否为可执行文件,查找出多个子文件中的所有可执行文件, 并对所有的可执行文件进行反编译,得到反编译语句,利用反编译语句对待检测程序进行漏洞扫描。

以安卓操作系统为例,通过安装在安卓手机上的漏洞扫描系统对待检测程序进行漏洞查找时,首先通过漏洞扫描系统中的解压工具解压待检测程序的程序包apk,得到程序包中的多个子文件;然后提取每个子文件的文件特征,若子文件的文件特征符合预定特征,则确定该子文件为dex文件,通过该方式可以查找到待检测程序的程序文件中的所有dex文件,并基于所有的dex文件,对待检测程序进行漏洞扫描,由于在扫描时使用了所有的dex文件,则通过上述实施例,不会出现漏洞漏报的情况。

在本申请的上述实施例中,提取每个子文件的文件特征信息可以包括:按照预设方式打开每个子文件,并从打开的子文件的预定位置读取文件特征信息。

进一步地,预设方式包括二进制打开方式,预定位置包括打开的子文件的前n个字节,其中,n为自然数,可执行文件为终端操作系统的可执行文件。

上述的终端可以为移动终端,也可以为计算机终端。上述的终端上可以安装有操作系统,上述实施例中的操作系统可以为安卓操作系统、windows操作系统以及ios操作系统等。

可选地,上述的预设位置可以为打开的子文件二进制的前4个字节。

可选地,程序文件包含了应用程序(如上述的待检测程序)的二进制代码、资源文件以及应用全局配置文件等。在得到程序文件的多个子文件时,可以通过二进制打开方式打开子文件,子文件的特征信息则使用二进制代码的格式表示。举例说明,每个子文件的特征信息可以用16个字节的信息表示,选用16个字节的前4个字节表示子文件的标识符字段,即通过前4个字节标识子文件的类型。如,提取到的四个字节的信息为01100100011001010111100000001010,该二进制信息表示为16进制的信息为6465780a(0x),而dex文件的文件特征为6465780a(0x),则该子文件为dex文件;提取到的四个字节的信息为01100100011001010111100000001100,该二进制信息表示为16进制的信息为6465780c(0x),而dex文件的文件特征为6465780c(0x),则该子文件为压缩包文件;提取到的四个字节的信息为01100100011001010111100000001110,该二进制信息表示为16进制的信息为6465780e(0x),而dex文件的文件特征为6465780e(0x),则该子文件为apk文件。

在上述实施例中,采用二进制的打开方式打开程序包的子文件,并通过二进制代码信息标识子文件的类型,以判断出每个子文件的类型,该方案采用二进制代码,信息标识方式简洁明了,且容易识别。

在本申请的上述实施例中,基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件包括:依次按照每个子文件的文件特征与预定特征进行匹配;若当前匹配的子文件的文件特征与预定特征一致,则确定当前匹配的子文件为可执行文件。

进一步地,在依次按照每个子文件的文件特征与预定特征进行匹配之后,该方法还包括:若当前匹配的子文件的文件特征与预定特征不一致,则判断当前匹配的子文件的文件特征是否与压缩文件的文件特征一致;若当前匹配的子文件的文件特征与压缩文件的文件特征一致,则判断出当前匹配的子文件为压缩文件,并重新提取每个子文件的文件特征信息。

下面结合图3详述本申请的上述实施例,如图3所示,该实施例可以包括如下步骤:

步骤s301:获取待检测程序的程序文件,其中,程序文件包括多个子文件。

步骤s302:提取子文件的文件特征信息,其中,文件特征信息用于记录对应子文件的文件特征。

其中,提取子文件的文件特征信息的方式与上述实施例的方式一致,在此不再赘述。

需要说明的是,每个子文件的文件特征信息都用于标识文件特征,该文件特征信息可以使用文件的类型字段、版本字段标识该文件的类型。子文件可以包括dex文件、压缩包文件和apk文件等类型,每种类型的子文件对应不同的文件特征。

步骤s303:按照子文件的文件特征与预定特征进行匹配。

具体地,上述的预定特征可以为dex文件的文件特征,如dex文件的标识符字段。可选地,通过子文件二进制的前4个字节表示子文件的标识符字段,如dex文件的二进制信息表示为十六进制的信息为6465780a(0x)。

将提取到的子文件二进制的前四个字节信息与预先定义的dex文件的文件特征进行匹配。

步骤s304:判断当前匹配的子文件的文件特征是否与预定特征一致。

若判断出当前匹配的子文件的文件特征与预定特征一致,也即提取到的当前匹配的子文件二进制的前四个字节的信息为01100100011001010111100000001010,该二进制信息表示为16进制的信息为6465780a(0x),与预先定义的dex文件的文件特征一致,则执行步骤s305;若判断出当前匹配的子文件的文件特征与预定特征不一 致,也即提取到的当前匹配的子文件的文件特征不为6465780a(0x),则执行步骤s306。

步骤s305:判断出当前匹配的子文件为dex文件。

可选地,当判断出当前匹配的子文件的标识符字段与dex文件的标识符字段一致,时,确定当前匹配的子文件为dex文件,dex文件即为可执行文件。

步骤s306:判断当前匹配的子文件的文件特征是否与压缩文件的文件特征一致。

若判断出当前匹配的子文件的文件特征与压缩文件的文件特征一致,也即提取到的当前匹配的子文件二进制的前四个字节的信息为01100100011001010111100000001100,该二进制信息表示为16进制的信息为6465780c(0x),与预先定义的压缩文件的文件特征一致,则执行步骤s307;若判断出当前匹配的子文件的文件特征与压缩文件的文件特征不一致,则返回执行步骤s302。

步骤s307:判断出当前匹配的子文件为压缩文件。

具体地,在判断出当前匹配的子文件为压缩文件之后,返回执行步骤s302。

具体地,当确定当前匹配的子文件为压缩文件时,需要对该压缩文件重新进行解压,并得到解压后的程序文件,程序文件中可以包括多个子文件,利用漏洞扫描系统遍历所有的子文件,并提取每个子文件的文件特征信息,根据每个文件特征信息的文件特征判断子文件的类型。

以判断出的当前匹配的子文件为压缩文件为例,详述本申请实施例。当子文件的二进制前4个字节的标识符字段与压缩文件的文件特征的标识符字段相同时,例如,当前匹配的子文件的前4位标识符字段为预先定义的压缩文件的标识符字段6465780c(0x)时,则当前匹配的子文件的文件特征信息匹配到一个压缩文件。在确定当前匹配的子文件为压缩文件之后,则需要通过解压工具重新解压该压缩文件,解压后的程序文件中可以包括多个子文件,通过漏洞扫描系统可以提取这多个子文件的文件特征(如,子文件的标识符字段),并可以通过每个子文件的标识符字段,判断出子文件中的所有可执行文件。

以判断出的当前匹配的子文件为apk文件为例,详述本申请实施例。apk文件,实际也是一个zip格式的压缩文件,只是后缀名为apk。同样通过子文件的标识符字段,判断当前匹配的子文件是否为apk文件。具体地,当前匹配的子文件的二进制前4个字节的标识符字段与apk文件的文件特征的标识符字段相同时,例如,当前匹配的子文件的前4位标识符字段为预先定义的apk文件的标识符字段6465780e(0x)时,则当前匹配的子文件的文件特征信息匹配到一个apk文件。在确定当前匹配的子文件 为apk文件之后,则需要通过解压工具重新解压该apk文件,解压后的程序文件中可以包括多个子文件,通过漏洞扫描系统可以提取这多个子文件的文件特征(如,子文件的标识符字段),并可以通过每个子文件的标识符字段,判断出子文件中的所有可执行文件。

通过上述实施例,由于采用文件特征对比的方式,可以遍历所有的子文件,并在提取每个子文件的文件特征信息之后,可以根据文件特征判断出多个子文件中的所有可执行文件,并对不是可执行文件的每个文件,重新进行解压,因此通过上述方案,可以遍历所有的子文件,得到所有的可执行文件,不会发生漏掉可执行文件的情况,从而可以找出应用程序中包括隐藏的所有可执行文件,使漏洞查找的效果最大化。

在本申请的上述实施例中,获取待检测程序的程序文件包括:获取待检测程序的安装程序包;对安装程序包进行解压缩,得到程序文件。

具体地,利用漏洞扫描系统中的解压工具,将待检测程序的安装程序包进行解压缩,解压后的程序文件包括了组成待检测程序的所有文件,即程序文件包括多个子文件,这些子文件可以为可执行文件格式(如.dex格式的文件),也可以为压缩文件格式(如.exe格式的文件或者.apk格式的文件)。

通过上述实施例,利用解压工具,将待检测程序进行解压,可以得到漏洞扫描系统能够进行漏洞查找的可编译文件,即可执行文件,从而通过得到的可执行文件,以方便对待检测程序进行漏洞查找。

在本申请的上述实施例中,利用子文件对待检测程序进行漏洞扫描包括:对子文件进行反编译,得到反编译语句;利用反编译语句对待检测程序进行漏洞扫描。

具体地,对提取的每个子文件的文件特征进行匹配之后,得到匹配的多个子文件中的所有可执行文件。利用安装在终端上的漏洞扫描系统中的反编译工具,将可执行文件的源文件和资源文件进行反编译,如通过smali语法,经过反编译后,得到反编译语句smali语句。

在一种可选的实施例中,通过反编译语句得到可执行文件的控制流图;判断控制流图中记录的反编译语句中是否存在漏洞特征语句,若反编译语句中不存在漏洞特征语句,则表示该可执行文件不存在漏洞,不需要进入漏洞查找状态;若从反编译语句中查找到漏洞特征语句,则进入漏洞查找状态,进一步在漏洞查找状态中查找漏洞。在漏洞查找状态中,若扫描到漏洞,则生成漏洞信息,该漏洞信息中可以包括漏洞名称、漏洞发生位置等信息。将生成的漏洞信息显示在终端屏幕上用于显示漏洞扫描系统的界面上。

以程序文件apk为例,详述本申请实施例。程序文件apk中的可执行文件为dex文件。使用apk编译工具将程序文件apk中的所有dex文件进行反编译,得到记录有dex文件的反编译语句的smali文件。通过反编译语句得到dex文件的控制流图;判断控制流图中记录的反编译语句中是否存在漏洞特征语句,若反编译语句中不存在漏洞特征语句,则表示该dex文件不存在漏洞,不需要进入漏洞查找状态;则继续进行下一个dex文件的漏洞检测扫描,若从反编译语句中查找到漏洞特征语句,则进入漏洞查找状态,进一步在漏洞查找状态中查找漏洞。在漏洞查找状态中,若扫描到漏洞,则生成漏洞信息,该漏洞信息中可以包括漏洞名称、漏洞发生位置等信息。将生成的漏洞信息显示在终端屏幕上用于显示漏洞扫描系统的界面上。

按照上述的漏洞查找的方案,对程序文件apk中所有的dex文件进行漏洞检测扫描,得到程序文件apk中可能存在的所有漏洞。

通过上述实施例,对查找到的所有的可执行文件进行漏洞检测扫描,从而可以实现对待检测程序的全面扫描,以提高漏洞检测的精度。

下面结合图4详述本申请实施例,如图4所示,该实施例可以包括如下步骤:

步骤s401:解压待检测程序包apk。

具体地,利用漏洞扫描系统中的解压工具,将程序包apk进行解压缩,解压后的程序文件包括了组成程序包apk的所有文件,即程序文件包括多个子文件,这些子文件可以为可执行文件格式(如.dex格式的文件),也可以为压缩文件格式(如.exe格式的文件或者.apk格式的文件)。

步骤s402:遍历解压后的所有子文件。

具体地,利用漏洞扫描系统遍历程序包apk解压后的所有子文件。

步骤s403:提取每个子文件的文件特征信息。

具体地,依次提取每个子文件的文件特征信息,文件特征信息可以为子文件的标识符字段、子文件的版本字段等信息。如,当文件特征信息为子文件的标识符字段时,采用二进制方式打开每个子文件的文件特征信息,则每个子文件的文件特征信息按照二进制代码的格式表示,并可以通过二进制代码中的前四个字节表示子文件的标识符字段信息。

步骤s404:利用每个子文件的文件特征信息,判断每个子文件的文件类型。

具体地,每个子文件可以为dex文件、压缩包文件和apk文件等类型。

可选地,通过预先定义,当前四个字节的二进制表示为十六进制为6465780a(0x)时,标识子文件为dex文件;当前四个字节的二进制表示为十六进制为6465780c(0x)时,标识子文件为压缩包文件;当前四个字节的二进制表示为十六进制为6465780e(0x)时,标识子文件为apk文件。若提取到的当前匹配的子文件的前四个字节的十六进制为6465780a(0x)时,则执行步骤s405;若提取到的当前匹配的子文件的前四个字节的十六进制为6465780c(0x)时,则执行步骤s406;若提取到的当前匹配的子文件的前四个字节的十六进制为6465780e(0x)时,则执行步骤s407。

步骤s405:判断出当前匹配的子文件为dex文件。

具体地,当前匹配的子文件的文件特征与预先定义的dex文件的文件特征一致,即提取到的当前匹配的子文件的前四个字节的十六进制为6465780a(0x),则该子文件匹配dex文件的文件特征,判断出当前匹配的子文件为dex文件,并在确定当前匹配的子文件为dex文件之后,执行步骤s408。

可选地,该步骤中当前匹配的子文件也可以为odex文件,odex文件也是程序包apk中的可执行文件,是将dex文件进行优化后的可执行文件,odex文件的文件特征与dex文件的文件特征基本一致,因此确定方式与dex文件相同,在此不再赘述。

步骤s406:判断出当前匹配的子文件为压缩包文件。

具体地,当前匹配的子文件的文件特征与预先定义的压缩包文件的文件特征一致,即提取到的当前匹配的子文件的前四个字节的十六进制为6465780c(0x),则该子文件匹配压缩包文件的文件特征,判断出当前匹配的子文件为压缩包文件,并在确定当前匹配的子文件为压缩包文件之后,执行步骤s410。

步骤s407:判断出当前匹配的子文件为apk文件。

具体地,当前匹配的子文件的文件特征与预先定义的apk文件的文件特征一致,即提取到的当前匹配的子文件的前四个字节的十六进制为6465780e(0x),则该子文件匹配apk文件的文件特征,判断出当前匹配的子文件为apk文件,并在确定当前匹配的子文件为apk文件之后,执行步骤s411。

步骤s408:记录当前匹配的dex文件的文件特征信息。

具体地,dex文件的文件特征信息可以包括签名信息、资源文件信息、二进制资源文件信息以及应用程序的名字、版权等信息。

步骤s409:对当前匹配的dex文件进行反编译,利用反编译语句进行漏洞检测扫描。

具体地,使用apk编译工具将程序文件apk中的所有dex文件进行反编译,得到记录有dex文件的反编译语句的smali文件。通过反编译语句得到dex文件的控制流图;判断控制流图中记录的反编译语句中是否存在漏洞特征语句,若反编译语句中不存在漏洞特征语句,则表示该dex文件不存在漏洞,不需要进入漏洞查找状态;若从反编译语句中查找到漏洞特征语句,则进入漏洞查找状态,进一步在漏洞查找状态中查找漏洞。在漏洞查找状态中,若扫描到漏洞,则生成漏洞信息,该漏洞信息中可以包括漏洞名称、漏洞发生位置等信息。将生成的漏洞信息显示在终端屏幕上用于显示漏洞扫描系统的界面上。

步骤s410:提取出当前匹配的压缩包文件。

具体地,在提取出当前匹配的压缩包文件之后,返回步骤s401。

步骤s411:提取出当前匹配的apk文件。

具体地,在提取出当前匹配的apk文件之后,返回步骤s401。

在上述实施例中,利用漏洞扫描系统中的解压工具,将程序包apk进行解压,得到组成程序包apk的多个子文件,并遍历解压后的所有子文件;在遍历每个子文件的过程中,提取每个子文件的文件特征信息,如提取出每个子文件二进制的前四个字节的信息,并将该信息与预先定义的dex文件(即可执行文件)的文件特征进行匹配,若当前匹配的子文件与dex文件的文件特征一致,则确定该子文件为dex文件;在判断出多个子文件中的所有dex文件之后,并记录dex文件的文件特征信息,利用漏洞扫描系统对查找到的所有dex文件进行漏洞检测扫描;若当前匹配的子文件与dex文件的文件特征不一致,则判断提取到的当前匹配的子文件二进制的前四个字节的信息是否与预先定义的压缩文件的文件特征是否一致,若一致,则确定当前匹配的子文件为一个压缩文件,则需要对该压缩文件重新进行解压,若不一致,则判断出当期匹配的子文件为一个apk文件,并需要对该apk文件重新进行解压。

通过本申请的上述实施例,将待检测程序进行解压,得到待检测程序的多个子文件,利用漏洞扫描系统遍历并提取多个子文件的文件特征,并通过预先定义的文件特征判断每个子文件的类型,自动找到待检测程序中的所有可执行文件,包括隐藏的可执行文件,从而对所有可执行文件进行漏洞查找,以实现对待检测程序中可能存在的漏洞的全面扫描,使漏洞查找的效果最大化,解决了现有的漏洞检测精度低的问题。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术 人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请每个实施例所述的方法。

实施例2

根据本申请实施例,还提供了一种基于文件的漏洞检测装置的实施例,如图5所示,该装置可以包括:获取模块50、提取模块52、确定模块54和扫描模块56。

其中,获取模块50,用于获取待检测程序的程序文件,其中,程序文件包括多个子文件。

提取模块52,用于提取每个子文件的文件特征信息,其中,文件特征信息用于记录对应子文件的文件特征。

确定模块54,用于基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件。

扫描模块56,用于在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

采用本申请实施例,基于待检测程序中每个子文件的文件特征,查找待检测程序的程序文件中的可执行文件(如dex文件),并利用确定的所有可执行文件,对待检测程序进行漏洞扫描。通过上述实施例,可以查找到待检测程序的程序文件中所有可执行文件,包括主可执行文件和子可执行文件,并对所有可执行文件进行漏洞查找,以实现对待检测程序中可能存在的漏洞的全面扫描,使漏洞查找的效果最大化,从而解决了现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题。

上述的待检测程序的程序文件可以为apk,该待检测程序可以为即时通讯应用程序、定位程序,在待检测程序的程序文件中可以包括多个dex文件,dex文件为上述的可执行文件。对待检测程序进行漏洞查找时,可以通过apk编译工具将待检测程序的apk(该apk中可以包括源文件和资源文件)进行反编译,得到反编译语句(如通 过smali语法得到的smali文件中的语句),并利用反编译语句进行漏洞查找。

上述的可执行文件指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。如,在windows操作系统下,可执行文件可以是.exe文件,也可以是.sys文件;另外,可执行文件还可以是flash、bat、dex等格式,对应于安卓操作系统,可执行文件为dex文件。

上述实施例中的程序文件apk可以通过打包工具将dex文件(.dex格式的文件)、资源文件(.arsc格式的文件)以及应用全局配置文件(.xml格式的文件)打包得到,通过在终端中直接运行该apk以实现待检测程序的安装,可选地,可以使用终端上的android模拟器运行该apk。

其中,apk文件实际是一个zip格式的压缩包,但后缀名被修改为apk,可以通过解压工具(如unzip解压)对程序文件apk进行解压,在解压后,可以得到多个子文件,该多个子文件中可以包括dex文件,dex文件是dalvik字节码的可执行程序,每个程序文件apk中都包含一个或者多个dex文件。

上述的dex文件的文件结构可以包括meta-inf目录、res目录(存放资源文件的目录)、manifest.xml(程序全局配置文件)、classes.dex(dalvik字节码)、resourcs.arsc。其中,meta-inf目录下存放的是签名信息,用来保证程序包的完整性和系统的安全;res目录存放资源文件;manifest.xml用于描述应用程序的名字、版本、权限、引用的库文件等信息;classes.dex是java源代码编译后生成的java字节码文件;resourcs.arsc存放编译后的二进制资源文件。

上述的终端可以为移动终端,如智能手机、平板电脑等。

在上述实施例中,依次提取apk安装程序中的每个子文件的文件特征,每个子文件中的文件特征信息都用于标识文件特征,该文件特征信息可以使用文件的类型字段、版本字段标识该文件的类型。

根据本申请的上述实施例,通过安装在终端上的漏洞扫描系统对应用程序进行漏洞查找时,首先通过漏洞扫描系统中的解压工具解压应用程序的程序包,得到程序包中的多个子文件;其次通过漏洞扫描系统提取每个子文件的文件特征,并基于每个子文件的文件特征判断其是否为可执行文件,查找出多个子文件中的所有可执行文件,并对所有的可执行文件进行反编译,得到反编译语句,利用反编译语句对待检测程序进行漏洞扫描。

在本申请的上述实施例中,如图6所示,提取模块52包括:读取子模块521,用于按照预设方式打开每个子文件,并从打开的子文件的预定位置读取文件特征信息。

进一步地,预设方式包括二进制打开方式,预定位置包括打开的子文件的前n个字节,其中,n为自然数,可执行文件为终端操作系统的可执行文件。

上述的终端可以为移动终端,也可以为计算机终端。上述的终端上可以安装有操作系统,上述实施例中的操作系统可以为安卓操作系统、windows操作系统以及ios操作系统等。

可选地,上述的预设位置可以为打开的子文件二进制的前4个字节。

可选地,程序文件包含了应用程序(如上述的待检测程序)的二进制代码、资源文件以及应用全局配置文件等。在得到程序文件的多个子文件时,可以通过二进制打开方式打开子文件,子文件的特征信息则使用二进制代码的格式表示。举例说明,每个子文件的特征信息可以用16个字节的信息表示,选用16个字节的前4个字节表示子文件的标识符字段,即通过前4个字节标识子文件的类型。如,提取到的四个字节的信息为01100100011001010111100000001010,该二进制信息表示为16进制的信息为6465780a(0x),而dex文件的文件特征为6465780a(0x),则该子文件为dex文件;提取到的四个字节的信息为01100100011001010111100000001100,该二进制信息表示为16进制的信息为6465780c(0x),而dex文件的文件特征为6465780c(0x),则该子文件为压缩包文件;提取到的四个字节的信息为01100100011001010111100000001110,该二进制信息表示为16进制的信息为6465780e(0x),而dex文件的文件特征为6465780e(0x),则该子文件为apk文件。

在上述实施例中,采用二进制的打开方式打开程序包的子文件,并通过二进制代码信息标识子文件的类型,以判断出每个子文件的类型,该方案采用二进制代码,信息标识方式简洁明了,且容易识别。

在本申请的上述实施例中,如图7所示,确定模块54包括:匹配子模块541,用于依次按照每个子文件的文件特征与预定特征进行匹配;确定子模块543,用于若当前匹配的子文件的文件特征与预定特征一致,则确定当前匹配的子文件为可执行文件。

进一步地,如图8所示,上述装置还可以包括:判断模块81,用于在依次按照每个子文件的文件特征与预定特征进行匹配之后,若当前匹配的子文件的文件特征与预定特征不一致,则判断当前匹配的子文件的文件特征是否与压缩文件的文件特征一致;处理模块83,用于若当前匹配的子文件的文件特征与压缩文件的文件特征一致,则判断出当前匹配的子文件为压缩文件,并重新提取每个子文件的文件特征信息。

在上述实施例中,利用漏洞扫描系统中的解压工具,将程序包apk进行解压,得到组成程序包apk的多个子文件,并遍历解压后的所有子文件;在遍历每个子文件的 过程中,提取每个子文件的文件特征信息,如提取出每个子文件二进制的前四个字节的信息,并将该信息与预先定义的dex文件(即可执行文件)的文件特征进行匹配,若当前匹配的子文件与dex文件的文件特征一致,则确定该子文件为dex文件;在判断出多个子文件中的所有dex文件之后,并记录dex文件的文件特征信息,利用漏洞扫描系统对查找到的所有dex文件进行漏洞检测扫描;若当前匹配的子文件与dex文件的文件特征不一致,则判断提取到的当前匹配的子文件二进制的前四个字节的信息是否与预先定义的压缩文件的文件特征是否一致,若一致,则确定当前匹配的子文件为一个压缩文件,则需要对该压缩文件重新进行解压,若不一致,则判断出当期匹配的子文件为一个apk文件,并需要对该apk文件重新进行解压。

通过上述实施例,由于采用文件特征对比的方式,可以遍历所有的子文件,并在提取每个子文件的文件特征信息之后,可以根据文件特征判断出多个子文件中的所有可执行文件,并对不是可执行文件的每个文件,重新进行解压,因此通过上述方案,可以遍历所有的子文件,得到所有的可执行文件,不会发生漏掉可执行文件的情况,从而可以找出应用程序中包括隐藏的所有可执行文件,使漏洞查找的效果最大化。

如图9所示,获取模块50包括:获取子模块501,用于获取待检测程序的安装程序包;解压子模块503,用于对安装程序包进行解压缩,得到程序文件。

具体地,利用漏洞扫描系统中的解压工具,将待检测程序的安装程序包进行解压缩,解压后的程序文件包括了组成待检测程序的所有文件,即程序文件包括多个子文件,这些子文件可以为可执行文件格式(如.dex格式的文件),也可以为压缩文件格式(如.exe格式的文件或者.apk格式的文件)。

通过上述实施例,利用解压工具,将待检测程序进行解压,可以得到漏洞扫描系统能够进行漏洞查找的可编译文件,即可执行文件,从而通过得到的可执行文件,以方便对待检测程序进行漏洞查找。

在本申请的上述实施例中,扫描模块包括:反编译子模块,用于对子文件进行反编译,得到反编译语句;扫描子模块,用于利用反编译语句对待检测程序进行漏洞扫描。

具体地,对提取的每个子文件的文件特征进行匹配之后,得到匹配的多个子文件中的所有可执行文件。利用安装在终端上的漏洞扫描系统中的反编译工具,将可执行文件的源文件和资源文件进行反编译,如通过smali语法,经过反编译后,得到反编译语句smali语句。

在一种可选的实施例中,通过反编译语句得到可执行文件的控制流图;判断控制 流图中记录的反编译语句中是否存在漏洞特征语句,若反编译语句中不存在漏洞特征语句,则表示该可执行文件不存在漏洞,不需要进入漏洞查找状态;若从反编译语句中查找到漏洞特征语句,则进入漏洞查找状态,进一步在漏洞查找状态中查找漏洞。在漏洞查找状态中,若扫描到漏洞,则生成漏洞信息,该漏洞信息中可以包括漏洞名称、漏洞发生位置等信息。将生成的漏洞信息显示在终端屏幕上用于显示漏洞扫描系统的界面上。

通过上述实施例,对查找到的所有的可执行文件进行漏洞检测扫描,从而可以实现对待检测程序的全面扫描,以提高漏洞检测的精度。

实施例3

本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。

可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。

在本实施例中,上述计算机终端可以执行基于文件的漏洞检测方法中以下步骤的程序代码:获取待检测程序的程序文件,其中,程序文件包括多个子文件;提取每个子文件的文件特征信息,其中,文件特征信息用于记录对应子文件的文件特征;基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件;在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

可选地,图10是根据本申请实施例的一种计算机终端的结构框图。如图10所示,该计算机终端a可以包括:一个或多个(图中仅示出一个)处理器101、存储器103、以及传输装置105。

其中,存储器可用于存储软件程序以及模块,如本申请实施例中的基于文件的漏洞检测方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的基于文件的漏洞检测方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端a。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取待检测程序的程序文件,其中,程序文件包括多个子文件;提取每个子文件的文 件特征信息,其中,文件特征信息用于记录对应子文件的文件特征;基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件;在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

可选的,上述处理器还可以执行如下步骤的程序代码:提取每个子文件的文件特征信息包括:按照预设方式打开每个子文件,并从打开的子文件的预定位置读取文件特征信息。

可选的,上述处理器还可以执行如下步骤的程序代码:预设方式包括二进制打开方式,预定位置包括打开的子文件的前n个字节,其中,n为自然数,可执行文件为终端操作系统的可执行文件。

可选的,上述处理器还可以执行如下步骤的程序代码:基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件包括:依次按照每个子文件的文件特征与预定特征进行匹配;若当前匹配的子文件的文件特征与预定特征一致,则确定当前匹配的子文件为可执行文件。

可选的,上述处理器还可以执行如下步骤的程序代码:在依次按照每个子文件的文件特征与预定特征进行匹配之后,方法还包括:若当前匹配的子文件的文件特征与预定特征不一致,则判断当前匹配的子文件的文件特征是否与压缩文件的文件特征一致;若当前匹配的子文件的文件特征与压缩文件的文件特征一致,则判断出当前匹配的子文件为压缩文件,并重新提取每个子文件的文件特征信息。

可选的,上述处理器还可以执行如下步骤的程序代码:获取待检测程序的程序文件包括:获取待检测程序的安装程序包;对安装程序包进行解压缩,得到程序文件。

可选的,上述处理器还可以执行如下步骤的程序代码:利用子文件对待检测程序进行漏洞扫描包括:对子文件进行反编译,得到反编译语句;利用反编译语句对待检测程序进行漏洞扫描。

采用本申请实施例,基于待检测程序中每个子文件的文件特征,查找待检测程序的程序文件中的可执行文件(如dex文件),并利用确定的所有可执行文件,对待检测程序进行漏洞扫描。通过上述实施例,可以查找到待检测程序的程序文件中所有可执行文件,包括主可执行文件和子可执行文件,并对所有可执行文件进行漏洞查找,以实现对待检测程序中可能存在的漏洞的全面扫描,使漏洞查找的效果最大化,从而解决了现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题。

本领域普通技术人员可以理解,图10所示的结构仅为示意,计算机终端也可以是智能手机(如android手机、ios手机等)、平板电脑、掌声电脑以及移动互联网设备 (mobileinternetdevices,mid)、pad等终端设备。图10其并不对上述电子装置的结构造成限定。例如,计算机终端a还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

实施例4

本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的基于文件的漏洞检测方法所执行的程序代码。

可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取待检测程序的程序文件,其中,程序文件包括多个子文件;提取每个子文件的文件特征信息,其中,文件特征信息用于记录对应子文件的文件特征;基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件;在确定子文件为可执行文件的情况下,利用子文件对待检测程序进行漏洞扫描。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:提取每个子文件的文件特征信息包括:按照预设方式打开每个子文件,并从打开的子文件的预定位置读取文件特征信息。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:预设方式包括二进制打开方式,预定位置包括打开的子文件的前n个字节,其中,n为自然数,可执行文件为终端操作系统的可执行文件。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:基于文件特征信息所记录的文件特征,确定子文件是否为可执行文件包括:依次按照每个子文件的文件特征与预定特征进行匹配;若当前匹配的子文件的文件特征与预定特征一致,则确定当前匹配的子文件为可执行文件。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:在依次按照每个子文件的文件特征与预定特征进行匹配之后,方法还包括:若当前匹配的子文件的文件特征与预定特征不一致,则判断当前匹配的子文件的文件特征是否与压缩文件的 文件特征一致;若当前匹配的子文件的文件特征与压缩文件的文件特征一致,则判断出当前匹配的子文件为压缩文件,并重新提取每个子文件的文件特征信息。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:获取待检测程序的程序文件包括:获取待检测程序的安装程序包;对安装程序包进行解压缩,得到程序文件。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:利用子文件对待检测程序进行漏洞扫描包括:对子文件进行反编译,得到反编译语句;利用反编译语句对待检测程序进行漏洞扫描。

采用本申请实施例,基于待检测程序中每个子文件的文件特征,查找待检测程序的程序文件中的可执行文件(如dex文件),并利用确定的所有可执行文件,对待检测程序进行漏洞扫描。通过上述实施例,可以查找到待检测程序的程序文件中所有可执行文件,包括主可执行文件和子可执行文件,并对所有可执行文件进行漏洞查找,以实现对待检测程序中可能存在的漏洞的全面扫描,使漏洞查找的效果最大化,从而解决了现有的漏洞扫描时不检测子dex文件,导致漏洞漏报的问题。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1