CN110826074A - 一种应用漏洞检测方法、装置和计算机可读存储介质 - Google Patents
一种应用漏洞检测方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN110826074A CN110826074A CN201911077573.3A CN201911077573A CN110826074A CN 110826074 A CN110826074 A CN 110826074A CN 201911077573 A CN201911077573 A CN 201911077573A CN 110826074 A CN110826074 A CN 110826074A
- Authority
- CN
- China
- Prior art keywords
- file
- application
- target file
- index
- vulnerability
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 219
- 238000000034 method Methods 0.000 claims description 295
- 238000009434 installation Methods 0.000 claims description 39
- 238000004458 analytical method Methods 0.000 claims description 37
- 230000006837 decompression Effects 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 15
- 238000012360 testing method Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 101150035983 str1 gene Proteins 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 101100437998 Arabidopsis thaliana BZIP2 gene Proteins 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Abstract
本申请实施例公开了一种应用漏洞检测方法、装置和计算机可读存储介质,其中,本申请实施例可以获取应用文件集合,所述应用文件集合包括多个应用文件;读取所述应用文件,获取所述应用文件的文件头信息;基。所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件;读取所述目标文件,获取所述目标文件的索引信息集合;基于所述索引信息集合,在预设漏洞规则集合内进行漏洞匹配,得到漏洞检测结果。可以快速、全面地对应用文件集合进行漏洞检测。
Description
技术领域
本申请涉及通信技术领域,具体涉及一种应用漏洞检测方法、装置和计算机可读存储介质。
背景技术
近年来,随着Android(安卓)操作系统逐渐成为智能手机的主流操作系统,针对Android操作系统开发的应用也越多越多,Android应用的安全性也受到越来越多的关注。应用开发者编译完应用产品后,通常会对应用安装包进行漏洞检测。
目前,Android应用的漏洞检测方法主要包括以下两个步骤:首先反编译应用安装包,然后对编译后的代码进行漏洞检测。但是这种做法存在两个问题:首先,反编译需要耗费较长的时间,其次,反编译只能处理应用安装包内标准命名的dex文件,无法识别非标准命名的dex文件。
因此,现有的Android应用的漏洞检测方法耗费时间长,而且不能全面地检测应用文件。
发明内容
有鉴于此,本申请实施例提供了一种应用漏洞检测方法、装置和计算机可读存储介质,可以快速、全面地对应用文件进行漏洞检测。
第一方面,本申请实施例提供了一种应用漏洞检测方法,包括:
获取应用的应用文件集合,所述应用文件集合包括多个应用文件;
读取应用文件集合中所述应用文件的文件头信息;
基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;
解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;
基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;
基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
在一实施例中,基于所述应用文件的文件头信息,所述从所述应用文件集合中选取符合预设可执行文件格式的目标文件,包括:
获取文件头信息中的目标字节;
比较所述目标字节与预设可执行文件字节;
若所述目标字节与所述可执行字符串相等,则选取所述目标字节对应的应用文件作为目标文件。
在一实施例中,所述索引信息集合包括方法信息集合和字符串信息集合,所述目标文件内容包括方法名称;
基于所述索引信息集合,获取目标文件内容,包括:
从所述方法信息集合中,,获取方法名称索引,所述方法名称索引为所述目标文件调用的方法的方法名称在所述字符串信息集合中的索引;
基于所述方法名称索引,在所述字符串信息集合中获取所述方法名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法名称。
在一实施例中,所述索引信息集合还包括类型信息集合,所述目标文件内容还包括类名称;
基于所述索引信息集合,获取目标文件内容,还包括:
从所述方法信息集合中,获取所述目标文件调用的方法所属的类信息索引;
基于所述类信息索引,从所述类型信息集合中获取类索引;
基于所述类名称索引,从所述字符串信息集合中获取所述类名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述类名称。
在一实施例中,所述索引信息集合还包括方法原型信息集合,所述目标文件内容还包括方法的方法原型、方法中应用的参数的参数类型,以及方法的返回值的返回值类型;
基于所述索引信息集合,获取目标文件内容,还包括:
从所述方法信息集合中,获取所述目标文件调用的方法的方法原型信息索引;
基于所述方法原型信息索引,从所述方法原型信息集合中获取方法原型索引、参数类型索引和返回值类型索引;
基于所述方法原型索引、参数类型索引和返回值类型索引,从所述字符串信息集合中获取所述方法原型、参数类型和返回值类型在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法原型、参数类型和返回值类型。
在一实施例中,基于所述目标文件内容,在预设漏洞规则集合内进行漏洞匹配,得到漏洞检测结果,包括:
获取所述漏洞规则集合中漏洞规则的方法名称;
对比所述漏洞规则的方法名称,与所述目标文件的方法名称,得到方法名称匹配结果;
基于所述方法名称匹配结果,获取漏洞检测结果。
在一实施例中,所述目标文件内容还包括类名称,基于所述方法名称匹配结果,获取漏洞检测结果,包括:
若方法名称匹配,则获取所述漏洞规则的类名称;
对比所述漏洞规则的类名称与所述目标文件的类名称,得到类名称匹配结果;
基于所述类名称匹配结果,获取漏洞检测结果。
在一实施例中,所述目标文件内容还包括方法原型、参数类型和返回值类型,基于所述类名称匹配结果,获取漏洞检测结果,包括:
若类名称匹配,则获取所述漏洞规则的参数类;
对比所述漏洞规则的方法原型、参数类型和返回值类型与所述目标文件的方法原型、参数类型和返回值类型,得到方法原型匹配结果;
基于所述方法原型匹配结果,获取漏洞检测结果。
在一实施例中,基于所述方法原型匹配结果,获取漏洞检测结果,还包括:
若方法原型匹配,则获取漏洞规则的其他检测条件;
根据所述检测条件,返回执行所述获取所述漏洞规则的方法名称的步骤;
根据所述检测条件,获取漏洞检测结果。
在一实施例中,解析所述目标文件,获取所述目标文件的索引信息集合和内容信息集合,包括:
读取所述目标文件,获取目标文件头信息;
基于所述目标文件头信息,从所述目标文件中获取索引信息集合;
基于所述索引信息集合,确定所述目标文件中的内容信息集合。
在一实施例中,所述获取应用文件集合,所述应用文件集合包括多个应用文件,包括:
获取安装文件集合;
基于所述安装文件集合的文件名,检验所述安装文件集合是否符合预设检测类型;
若是,则基于所述安装文件集合的文件名从预设解压算法中,选取目标解压缩算法;
基于所述目标解压缩算法对所述安装文件集合进行解压缩,得到所述应用文件集合,所述应用文件集合包括多个应用文件。
第二方面,本申请的实施例提供了一种应用漏洞检测装置,包括:
获取单元,用于获取应用文件集合,所述应用文件集合包括多个应用文件;
读取单元,用于读取所述应用文件的文件头信息;
选取单元,用于基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件;
第一解析单元,用于解析所述目标文件,获取所述目标文件中的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;
第二解析单元,基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;
检测单元,用于基于所述索引信息集合,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
第三方面,本申请的实施例提供的计算机可读存储介质,其上存储有计算机程序,当计算机程序在计算机上运行时,使得计算机执行如本申请任一实施例提供的应用漏洞检测方法。
本申请实施例可以获取应用的应用文件集合,所述应用文件集合包括多个应用文件;读取应用文件集合中所述应用文件的文件头信息;基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。本发明实施例无需对应用文件进行反编译,可以提高检测效率,另外,通过文件头信息来选取可执行格式的文件,可以避免遗漏非标准命名的文件,从而可以快速、全面地对应用文件集合进行漏洞检测。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的应用漏洞检测方法的应用场景示意图。
图2a是本申请实施例提供的应用漏洞检测方法的一个流程示意图。
图2b是本申请实施例提供的应用漏洞检测方法的另一个流程示意图。
图3是本申请实施例提供的应用漏洞检测装置的结构示意图。
图4是本申请实施例提供的网络设备的示意图。
图5a是本申请实施例提供的dex文件的结构示意图。
图5b是本申请的一个实施例提供的获取应用文件集合的流程示意图。
图5c是本申请的一个实施例提供的选取目标文件的流程示意图。
图5d是本申请的一个实施例提供的获取索引信息集合和内容信息集合的流程示意图。
图5e是本申请实施例提供的漏洞检测的流程的示意图。
具体实施方式
下面将分组本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种应用漏洞检测方法、装置和计算机可读存储介质。
本发明的实施例提供了一种应用漏洞检测系统,包括本发明实施例任一提供的应用漏洞检测装置,该应用漏洞检测装置具体可集成在网络设备,比如,检测终端中,该检测终端可以包括:手机、平板电脑、笔记本电脑或个人计算机(PC,Personal Computer)等。
此外,该应用漏洞检测系统还可以包括其他设备,比如服务器和其他终端等。
例如,参考图1,应用漏洞检测系统,包括检测终端和服务器,检测终端与服务器通过网络链接。其中,网络中包括路由器、网关等网络实体。
检测终端可以获取应用文件集合,所述应用文件集合包括多个应用文件;读取应用文件集合中所述应用文件的文件头信息;基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;基于所述索引信息集合,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
上述图1的例子只是实现本发明实施例的一个系统架构实例,本发明实施例不限于上述图1所示的系统结构,基于该系统架构,提出本发明各个实施例。
以下分别进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。
参考图2a,本实施例将从应用漏洞检测装置的角度进行描述,以应用漏洞检测装置具体集成在检测终端中为例进行描述。
101、获取应用文件集合,所述应用文件集合包括多个应用文件。
其中,应用文件是应用开发人员编写的,用于软件安装的文件,应用文件集合是所有应用文件的集合。
其中,应用文件包括可执行文件,运行可执行文件,可以将此应用的所有应用文件释放到硬盘上,完成修改注册表、修改系统设置、创建快捷方式等工作。
其中,检测终端可以直接可以从本地存储中获取应用文件集合,在另一实施例中,检测终端还可以通过网络链接,从其他终端或者服务器中获取应用文件集合。比如,应用开发人员完成应用开发之后,将应用文件集合通过网络从其他终端发送给检测终端。
在一实施例中,为了方便传输,检测终端最初获取到的文件是安装文件集合,安装文件集合为软件安装包(Install pack)形式,在进行漏洞检测之前,需要对安装文件集合进行解压缩,得到应用文件集合。软件安装包是可自行解压缩文件的集合,其中包括软件安装的所有文件。运行这个安装包(可执行文件),可以将此软件的所有文件释放到硬盘上,完成修改注册表、修改系统设置、创建快捷方式等工作。将所述应用文件压缩并打包为安装包,然后进行传输,可以提高传输效率。其中,由于计算机处理的信息是以二进制数的形式表示的,因此压缩就是把二进制信息中相同的字符串以特殊字符标记。
在一实施例中,获取应用文件集合包括以下步骤:
获取安装文件集合;
基于所述安装文件集合的文件名,检验所述安装文件集合是否符合预设检测类型;
若是,则基于所述安装文件集合的文件名从预设解压算法中,选取目标解压缩算法;
基于所述目标解压缩算法对所述安装文件集合进行解压缩,得到所述应用文件集合,所述应用文件集合包括多个应用文件。
其中,安装文件集合为软件安装包,安装文件集合包括软件安装的所有文件。
其中,文件名一般包括主文件名和扩展名,其中,扩展名也称后缀名,是操作系统用来标记文件类的一种机制。
在一实施例中,为了检测所述安装文件集合是否符合预设检测类,可以通过识别文件名,来检测安装文件集合是否为应用程序包格式,如果安装文件集合是应用程序包格式,则认为所述安装文件集合是符合预设检测类的输入,可以进行漏洞检测,若安装文件集合不是应用程序包格式,则认为所述安装文件集合不符合本应用漏洞检测方法的要求,无法进行漏洞检测,可以在该检测终端页面中显示“不是合法输入”等提示信息,或者将该提示信息发送给其他终端,其中,其他终端是向检测终端发送该安装文件集合的终端。
检测终端中设置有多种预设解压缩算法,用不同算法压缩的文件具有不同的扩展名,可以根据文件名的扩展名,选择对应的目标解压缩算法进行还原。比如,用GZIP压缩的文件的扩展名是.GZ;用BZIP2压缩的文件的扩展名是.BZ2;用ZIP压缩的文件的扩展名是.ZIP。用GZIP压缩的文件可以使用GUNZIP解压;用BZIP2压缩的文件可以使用BUNZIP2解压;用ZIP压缩的文件可以使用UNZIP解压。
在一实施例中,应用文件集合包括安装文件集合解压得到的所有应用文件。
在另一实施例中,应用文件集合还包括应用文件列表,其中,应用文件列表包括应用文件标识和应用文件在所述检测终端中的存储路径。根据所述存储路径,可以获取应用文件标识对应的应用文件。
102、读取应用文件集合中所述应用文件的文件头信息。
其中,文件头是位于文件开头的一段承担一定任务的字符。
Android应用程序包括dex文件,目前由于插件化技术的普遍流行,基于插件框架设计的应用中包括非标准命名的dex文件,因此,无法仅通过读取文件名,来判断该应用文件是否是dex文件。
在本发明实施例中,可以用open方法打开应用文件,读取该应用文件中的文件头信息。其中,文件头的前四个字节可以用于表示文件格式。这样,可以全面地获取符合可执行文件特征的所有应用文件,避免遗漏。从而可以全面地对dex文件进行漏洞检测。
其中,open方法用于打开和创建文件,在磁盘上读写文件的功能都是由检测终端中的操作系统提供的,现代操作系统不予许普通的程序直接操作磁盘,所以,读写文件就是请求检测终端打开一个文件对象(通常称为文件扫描符),然后通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件(写文件)。
在一实施例中,应用文件集合包括应用文件,读取文件头信息的顺序包括多种,比如可以依次读取所述应用文件集合中的所有应用文件的文件头信息,再根据文件头信息,确定应用文件是否是目标文件;再比如,也可以先读取一个应用文件的文件头信息,然后根据文件头信息,确定该应用文件是否为目标文件,然后再读取下一个应用文件的文件头信息,重复上述步骤,直至将应用文件集合内的所有应用文件读取完毕。
在另一实施例中,应用文件集合还包括应用文件列表。可以根据所述应用文件列表,获取应用文件,并打开应用文件,读取文件头信息。此时读取应用文件集合内应用文件的顺序也可以包括多种,比如,可以根据应用文件列表中的应用文件顺序,根据存储路径依次打开所有的应用文件,并读取文件头信息;再比如,为了减少内存占用,可以根据应用文件列表中应用文件的顺序,根据存储路径打开一个应用文件,并读取文件头信息,根据文件头信息,确定该应用文件是否为目标文件,然后再根据文件列表打开该文件的下一个应用文件,重复上述步骤,直至将应用文件集合中的所有文件的文件头信息读取完毕。
103、基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合。
其中,可执行文件指的是可以由操作系统进行加载执行的文件。对于Android应用程序包,可执行文件指的是dex类的应用文件。
其中,目标文件是用于漏洞检测的应用文件,对于Android应用程序包,目标文件指的是dex类的应用文件。
在一实施例中,基于所述应用文件的文件头信息,所述从所述应用文件集合中选取符合预设可执行文件格式的目标文件,可以包括如下步骤:
获取文件头信息中的目标字节;
比较所述目标字节与预设可执行文件字节;
若所述目标字节与所述可执行字符串相等,则选取所述目标字节对应的应用文件作为目标文件。
其中,目标字节是用于判断应用文件是否符合可执行文件特征的字节。
其中,预设可执行文件字节是用于表示可执行文件的类的字节。
在一实施例中,当对Android应用进行漏洞检测时,目标字节是指应用文件的文件头前四个字节,预设可执行文件字节是dex\n。可以通过检查应用文件的文件头前四个字节是否与dex\n相等,来判断该应用文件是否是符合可执行文件特征的文件,若是,则选取该应用文件作为目标文件,将从应用文件集合中选取的所有目标文件组合后,得到目标文件集合。
在一实施例中,可以调用字符串比较方法strcmp,来比较应用文件的文件头前四个字节是否与dex\n相等。
其中,strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
在一实施例中,应用文件集合包括应用文件,从所述应用文件集合中选取所有目标文件的顺序包括多种,比如可以依次读取所述应用文件集合中的所有应用文件的文件头信息,再根据文件头信息,确定应用文件是否是目标文件;再比如,也可以先读取一个应用文件的文件头信息,然后根据文件头信息,确定该应用文件是否为目标文件,然后再读取下一个应用文件的文件头信息,重复上述步骤,直至将应用文件集合内的所有应用文件读取完毕。其中,目标文件集合包括选取的所有的目标文件。
在另一实施例中,应用文件集合除了包括应用文件列表。可以根据所述应用文件列表,获取应用文件,并打开应用文件,读取文件头信息。从所述应用文件集合中选取所有目标文件的顺序包括多种,参见上面的实施例,不再赘述。得到的目标文件集合除了包括所有的目标文件外,还包括目标文件列表,其中,目标文件列表包括目标文件标识和目标文件在检测终端中的存储路径。其中,目标文件标识可以是文件名,也可以是文件编号等标识信息。
104、解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引。
其中,对于Android应用来说,目标文件是dex(dalvik executable)格式的Dalvik字节码,参考图5a,一个dex文件分为3层,分别为文件头、索引区和数据区。解析内容是指,经过解析,确定了文件头、索引区、数据区之后,将目标文件根据信息类进行划分后,得到的多个不同的信息集合。其中,Dalvik是Android操作系统的一个虚拟机。Dalvik可以用来执行的是dex格式的文件。其中,索引信息集合包括存储在索引区的字节,内容信息集合包括存储在数据区的字符串。
Android系统中使用的应用程序一般是使用java来开发的,但是通过Dalvik字节码,无法直接看到原本的java逻辑代码,在现有技术中,在进行漏洞检测之前,通常需要将Dalvik字节码反编译为smali代码,反编译需要耗费大量的时间,因此漏洞检测效率较低。在本实施例中,不需要对所述目标文件进行反编译,不需要将Dalvik代码进行反编译,而是直接对所述目标文件进行解析,根据解析内容进行漏洞检测,从而可以提高漏洞检测的效率。
在一实施例中,解析所述目标文件,获取所述目标文件的解析内容,可以包括如下步骤:
读取所述目标文件,获取目标文件头信息;
基于所述目标文件头信息,从所述目标文件中获取索引信息集合;
基于所述索引信息集合,确定所述目标文件中的内容信息集合。
其中,所述解析内容包括索引信息集合和内容信息集合,所述索引信息是位于索引区,包括用于表征内容信息在文件中的位置的信息。其中,内容信息以字符串的形式保存在数据区。
参考图5a,以下将结合dex文件的结构,详细说明上述步骤:
根据文件中字节顺序,一个.dex文件主要分为3层:文件头、索引区、数据区(数据区也称data区)。文件头中存储了该目标文件的一些概要信息,比如文件大小、版本、校验信息、还有索引信息的数量,以及索引信息在目标文件中的位置等等。比如,包括string(字符串)的数量及string_ids(字符串标识)在目标文件中的位置。
在一实施例中,根据目标文件中的字节顺序,所述索引区可以依次被划分为string_ids区、type_ids区、proto_ids区、field_ids区、method_ids区和class_defs区,分别对应地存储有不同的索引信息集合。
其中,string_ids区存储有字符串信息集合,其中包括多条字符串信息,字符串信息的值即为文件内容在目标文件中的位置。在一实施例中,字符串信息是名称为string_data_off的一个uint类型值。
在一实施例中,获取字符串信息集合的步骤包括:打开目标文件,依次按字节读取目标文件,首先读取文件头,根据目标文件头信息,确定string_ids区在目标文件中的位置。当文件头读取完毕之后,即可读取string_ids区中的字符串信息集合。
其中,type_ids区存储有类型信息集合,其中包括本目标文件涉及的所有类型信息,其中每条类型信息包括一个方法的descriptor_idx或者一个字段的descriptor_idx,其中descriptor_idx值是类型字符串信息在string_ids区中的索引号,根据所述索引号,可以在string_ids区中找到类型字符串信息,从而确定类型字符串在数据区的存储位置,进而在数据区,找到类型字符串。其中,类型字符串是指用于描述类型的字符串,包括类类型(即class类型)、数组类型(array types)和基本类型(primitive types)。类型与目标文件中调用的方法是对应的,类型包括方法中应用的数据的类型,以及方法所属的类的类型(即class类型)。
在一实施例中,获取类型信息集合的步骤包括:打开目标文件,依次按字节读取目标文件,首先读取文件头,根据目标文件头信息,确定type_ids区在目标文件中的位置。当文件头读取完毕之后,先读取string_ids区中的字符串信息集合,随后即可读取type_ids区中的类型信息集合。
其中,proto_ids区中存储有方法原型信息集合,其中包括本目标文件调用的所有方法的方法原型信息,其中每条方法原型信息包括shorty_idx、return_type_idx和parameters_off,其中,shorty_idx的值是本方法原型字符串在string_ids区的索引号,return_type_idx的值是本方法返回值的类型在type_ids区的索引号,parameters_off是一个引用函数offset,用于指向本方法中应用的参数的参数列表。其中,方法原型包括方法中的应用的参数和返回值等信息。其中参数列表中包括参数的个数,以及参数类型字符串信息在type_ids区中的索引号。
在一实施例中,获取方法原型信息集合的步骤包括:打开目标文件,依次按字节读取目标文件,首先读取文件头,根据目标文件头信息,确定proto_ids区在目标文件中的位置。当文件头读取完毕之后,先读取string_ids区中的字符串信息集合,再读取type_ids区中的类型信息集合,然后即可读取proto_ids区中的方法原型信息集合。
其中,field_ids区存储有字段信息集合,其中字段信息集合包括本目标文件引用的所有字段信息,其中每一条字段信息包括本字段的class_idx、type_idx和name_idx,class_idx和type_idx的值都是type_ids区内的一个索引号,分别表示本字段所属的类类型,以及本字段包含的数据的类型;name_idx表示本字段的名称。其中,类(Class)用来封装一个对象和接口运行时的状态,当装载类的时候,类的对象自动创建。本字段就是本字段所属类的对象。
在一实施例中,获取字段信息集合的步骤包括:打开目标文件,依次按字节读取目标文件,首先读取文件头,根据目标文件头信息,确定proto_ids区在目标文件中的位置。当文件头读取完毕之后,先读取string_ids区中的字符串信息集合,再读取type_ids区中的类型信息集合,然后读取proto_ids区中的方法原型信息集合,再然后即可读取所述field_ids区中的字段信息集合。
其中,method_ids区存储有方法信息集合,其中方法信息集合包括本目标文件调用的所有方法的方法信息,一条方法信息包括class_idx、proto_idx和name_idx。其中class_idx的值是type_ids区的索引号,最终指向描述本方法所属的类的字符串。其中proto_idx的值是proto_ids区一个索引号,最终指向本方法的方法原型字符串。name_idx的值是string_ids区的一个索引号,最终指向本方法的方法名称字符串。其中,具体的指向过程参见上面的描述,不再赘述。
在一实施例中,获取方法信息集合的步骤包括:打开目标文件,依次按字节读取目标文件,首先读取文件头,根据目标文件头信息,确定proto_ids区在目标文件中的位置。当文件头读取完毕之后,依次读取string_ids区中的字符串信息集合、type_ids区中的类型信息集合、proto_ids区中的方法原型信息集合和所述field_ids区中的字段信息集合,然后集合读取method_ids区内的方法信息集合。
其中,class_defs区存储有类定义信息集合,类定义信息集合包括多条类定义信息,其中每条类定义信息(class definitions)包括class_idx、access_flags、supperclass_idx、interface_off、source_file_idx、annotion_off、class_data_off、static_value_off等。其中class_idx的值为type_ids区的索引号,最终指向一个用于描述类的字符串。其中access_flags用于描述类的访问类。supperclass_idx用于描述超级类的类,值为type_ids区的索引号。其中interface_off的值为数据区内的偏移地址,最终指向class的接口。source_file_idx的值是string_ids区的一个索引号,用来表示源代码文件的信息。annotion_off的值是数据区内的一个偏移地址,对应的内容是类的注释。class_data_off的值是数据区内的一个偏移地址,对应的内容是类使用到的数据。static_value_off是数据区内的一个偏移地址。
在一实施例中,获取类定义信息集合的步骤包括:打开目标文件,依次按字节读取目标文件,首先读取文件头,根据目标文件头信息,确定proto_ids区在目标文件中的位置。当文件头读取完毕之后,依次读取string_ids区中的字符串信息集合、type_ids区中的类型信息集合、proto_ids区中的方法原型信息集合、所述field_ids区中的字段信息集合、method_ids区内的方法信息集合,然后即可读取class_defs区内的类定义信息集合。
其中,数据区内存储有内容信息集合,内容信息集合包括方法指令程序,方法指令程序包括用来描述方法名称、类名称、方法原型、类型等的字符串。
105、基于所述索引信息集合,从所述内容信息集合中获取目标文件内容。
其中,索引信息集合是指存储在索引区内的所有信息。内容信息集合是指存储在数据区内的所有信息。
其中,目标文件内容是用于漏洞检测的内容信息。
在一实施例中,所述索引信息集合包括方法信息集合和字符串信息集合,所述目标文件内容包括方法名称;基于所述索引信息集合,获取目标文件内容,可以包括如下步骤:
从所述方法信息集合中,获取方法名称索引,所述方法名称索引为所述目标文件调用的方法的方法名称在所述字符串信息集合中的索引;
基于所述方法名称索引,在所述字符串信息集合中获取所述方法名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法名称。
在一实施例中,方法名称索引为method_ids区中存储的name_idx,name_idx的值为在string_ids区内的一个索引号,根据这个索引号,在字符串信息集合中找到该方法名称的string_data_off,string_data_off的即为描述该方法名称的字符串在数据区内的偏移地址。进而可以在数据区内找到描述方法名称的字符串。
在一实施例中,为了方便后续进行漏洞检测,可以将一个目标文件中所有的方法名称缓存至存储器中,并与该目标文件的目标文件标识建立映射关系。
其中,方法是目标文件中调用的函数。
在第二实施例中,所述索引信息集合还包括类型信息集合,所述目标文件内容还包括类名称;
基于所述索引信息集合,获取目标文件内容,还包括:
从所述方法信息集合中,获取类信息索引,所述类为所述目标文件调用的方法所属的类;
基于所述类信息索引,从所述类型信息集合中获取类名称索引;
基于所述类名称索引,从所述字符串信息集合中获取所述类名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述类名称。
其中,类(Class)用来封装一个对象和接口运行时的状态,当装载类的时候,类的对象自动创建。方法就是方法所属的类的对象。类名称实际是指类类型的名称。
其中,类型(Type)表示对象的类型,对于一个方法的类型(Type)来说,方法的类型(Type)包括方法中的数据的数据类型,还包括方法所属的类的类类型。
在一实施例中,类名称索引为method_ids区中存储的class_idx,class_idx的值为type_ids区的一个索引号,根据该索引号在所述type_ids区内找到描述该类的descriptor_idx,descriptor_idx值为在string_ids区内的一个索引号,根据这个索引号,在字符串信息集合中找到该类名称的string_data_off,string_data_off的即为描述该类名称的字符串在数据区内的偏移地址。进而可以在数据区内找到描述类名称的字符串。
在一实施例中,为了方便后续进行漏洞检测,可以将一个目标文件中所有的类名称缓存至存储器中,并与该目标文件的目标文件标识建立映射关系。
在第三实施例中,所述索引信息集合还包括方法原型信息集合,所述目标文件内容还包括方法的方法原型、方法中应用的参数的参数类型,以及方法的返回值的返回值类型;
基于所述索引信息集合,获取目标文件内容,还包括:
从所述方法信息集合中,获取所述目标文件调用的方法的方法原型信息索引;
基于所述方法原型信息索引,从所述方法原型信息集合中获取方法原型索引、参数类型索引和返回值类型索引;
基于所述方法原型索引、参数类型索引和返回值类型索引,从所述字符串信息集合中获取所述方法原型、参数类型和返回值类型在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法原型、参数类型和返回值类型。
在一实施例中,方法原型索引为method_ids区中存储的proto_idx,proto_idx的值为proto_ids区的一个索引号,根据该索引号在所述proto_ids区内找到描述该方法原型的方法原型信息,该方法原型信息包括shorty_idx、return_type_idx和parameters_off,方法原型信息的值为在string_ids区内的索引号,根据这个索引号,在字符串信息集合中找到该类名称的string_data_off,string_data_off的即为描述该方法的方法原型、返回值类型、参数类型的字符串在数据区内的偏移地址。进而可以在数据区内找到描述类名称的字符串。
在一实施例中,为了方便后续进行漏洞检测,可以将一个目标文件中所有的类名称缓存至存储器中,并与该目标文件的目标文件标识建立映射关系。
106、基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
其中,漏洞规则集合是由安全专家分析积累起来的漏洞规则的集合。
在一实施例中,漏洞规则可以表现为漏洞检测向量,漏洞检测向量主要是由安全专家基于大量Android应用安全漏洞经验知识库进行人工总结、提取的,并经过不断更新,覆盖了所有常见的Android应用安全漏洞,可以保证漏洞检测向量的全面性和时效性。漏洞检测向量主要分为两类:1.不涉及函数调用的一般配置错误类漏洞;2.涉及一个或多个函数调用的漏洞。漏洞检测向量主要包含以下信息:漏洞标题、危险等级;漏洞描述、修复建议;漏洞特征:漏洞的函数调用、参数设置、配置信息。其中,函数指的是本申请中的“方法”。
在一实施例中,目标文件内容包括方法名称,基于所述目标文件内容,在预设漏洞规则集合内进行漏洞匹配,得到漏洞检测结果,包括:
获取所述漏洞规则集合中漏洞规则的方法名称;
对比所述漏洞规则的方法名称,与所述目标文件的方法名称,得到方法名称匹配结果;
基于所述方法名称匹配结果,获取漏洞检测结果。
在一实施例中,可以采用strcmp字符串比较方法,对比所述漏洞规则的方法名称,与所述目标文件的方法名称,将对比结果,作为方法名称匹配结果。方法名称匹配结果可以记为“匹配”或者“不匹配”。
在一实施例中,若方法名称匹配,可以确定漏洞检测结果为该应用具有漏洞。
在另一实施例中,若方法名称匹配,还需要继续对比类名称,所述目标文件内容还包括类名称,基于所述方法名称匹配结果,获取漏洞检测结果,包括:
若方法名称匹配,则获取所述漏洞规则的类名称;
对比所述漏洞规则的类名称与所述目标文件的类名称,得到类名称匹配结果;
基于所述类名称匹配结果,获取漏洞检测结果。
在一实施例中,可以采用strcmp字符串比较方法,对比所述漏洞规则的类名称,与所述目标文件的类名称,将对比结果,作为类名称匹配结果。类名称匹配结果可以记为“匹配”或者“不匹配”。
在一实施例中,若方法名称和类名称匹配,可以确定漏洞检测结果为该应用具有漏洞。
在另一实施例中,若方法名称和类名称匹配,还需要继续对比方法原型,所述目标文件内容还包括方法原型、参数类型和返回值类型,基于所述方法原型匹配结果,获取漏洞检测结果,包括:
若类名称匹配,则获取所述漏洞规则的方法原型、参数类型和返回值类型;
对比所述漏洞规则的方法原型、参数类型和返回值类型与所述目标文件的方法原型、参数类型和返回值类型,得到方法原型匹配结果;
基于所述方法原型匹配结果,获取漏洞检测结果。
在一实施例中,可以采用strcmp字符串比较方法,对比所述漏洞规则的方法原型、参数类型和返回值类型与所述目标文件的方法原型、参数类型和返回值类型,将对比结果,作为方法原型匹配结果。方法原型、参数类型和返回值类型全部不匹配时,匹配结果可以记为“不匹配”,否则即为“匹配”。
在一实施例中,若方法名称、类名称和方法原型均匹配,可以确定漏洞检测结果为该应用具有漏洞。
在另一实施例中,若方法名称、类名称和方法原型均匹配,还需要继续检测该漏洞规则,是否具有其他检测条件,基于所述方法原型匹配结果,获取漏洞检测结果,还包括:
若方法原型匹配,则获取漏洞规则的其他检测条件;
根据所述检测条件,返回执行所述获取所述漏洞规则的方法名称的步骤;
根据所述检测条件,获取漏洞检测结果。
为了方便描述,当一个目标文件的方法名称、方法原型、类名称都与一个漏洞规则匹配时,可以记为该目标文件与该漏洞规则匹配。
在一些实施例中,漏洞规则的检测条件要求一个应用中只要有一个目标文件与漏洞规则匹配时,就认为应用具有漏洞。在另一些实施例中,漏洞规则还具有其他检测条件,比如一个应用中有预设数量的目标文件与漏洞规则匹配时,才认为应用具有漏洞。漏洞规则与漏洞规则的检测条件相对应地存储在漏洞规则集合中。
经过前四个实施例中的检测步骤,确定一个目标文件的方法名称、方法原型、类名称都与一个漏洞规则匹配后,还需要继续检测漏洞规则是否具有其他检测条件。若其他检测条件要求一个应用中有预设数量的目标文件与漏洞规则匹配时,才认为应用具有漏洞,那么可以选取下一个目标文件对应的目标文件内容,重复执行上面的实施例中的步骤,直至将该应用包含的所有目标文件与该漏洞规则对比完毕,若有预设数量的目标文件与该漏洞规则匹配,则确定该应用有漏洞。否则确定该应用不具有该漏洞规则对应的漏洞。
若方法名称、类名称和方法原型均匹配,且该漏洞规则不具有其他检测条件,可以确定漏洞检测结果为应用具有漏洞。
若方法名称、类名称和方法原型均匹配,且该漏洞规则具有其他检测条件,则还需要满足其他检测条件,才可以确定漏洞检测结果为应用具有漏洞。
若该应用不具有该漏洞规则对应的漏洞,那么可以从漏洞规则集合中获取下一个漏洞规则,重复上述步骤,直至将所述漏洞规则集合中所有的漏洞规则与该应用的所有目标文件均对比完毕,若存在一个满足检测条件的漏洞规则,则可以确定该应用具有漏洞,否则,可以确定该应用无漏洞。
在一实施例中,为了方便检测人员对漏洞检测结果进行下一步分析,并根据漏洞检测结果,修复漏洞,完善应用,所述应用漏洞检测方法还可以包括如下步骤:
当目标文件与漏洞规则匹配时,获取所述目标文件的目标文件标识,以及所述漏洞规则的漏洞标识;
基于所述漏洞检测结果、所述文件标识和所述漏洞标识,获取结果集合。
其中,漏洞标识是用来分辨不同漏洞规则的标识,可以表现为漏洞规则编号或者漏洞名称等。
其中,目标文件标识是用来分辨不同漏洞规则的标识,可以表现为目标文件编号或者目标文件名等。
在一实施例中,可以将所述结果集合,通过网络发送给使用其他终端的应用开发人员,在其他终端的页面中展示结果集合中的信息。在另一实施例中,可以基于所述结果集合,显示结果展示页面。从而检测终端用户或者应用开发人员可以直观地了解出现漏洞的原因,并进行相应的修复。
由上可知,本发明实施例可以获取应用的应用文件集合,所述应用文件集合包括多个应用文件;读取应用文件集合中所述应用文件的文件头信息;基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。本发明实施例无需对应用文件进行反编译,可以提高检测效率,另外,通过文件头信息来选取可执行格式的文件,可以避免遗漏非标准命名的文件,从而可以快速、全面地对应用文件集合进行漏洞检测。
根据前面实施例所描述的方法,以下将以该应用漏洞检测装置具体集成在检测终端举例作进一步详细说明。
参考图2b,本发明实施例的应用漏洞检测方法的具体流程如下:
201、检测终端可以获取应用的应用文件集合。
参考图5b,在本实施例中,应用本应用检测方法检测Android应用漏洞时,检测终端需要获取Android应用程序包,其中,Android应用程序包(英语:Android applicationpackage,APK)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。Android应用程序包文件名的扩展名是.APK,检测终端可以识别获取到的安装文件集合的文件名的扩展名是否是.APK,如果是.APK,则说明认为获取到的安装文件集合符合要求,可以进行漏洞检测,否则,则显示或向其他终端发送“不是合法输入”等提示信息。
在本实施例中,Android应用程序包实际是一种ZIP压缩包,只是扩展名被修改为了.APK,可以调用UNZIP命令进行解压。
Android应用程序包括两种格式的应用文件,第一种是dex文件(是指Android系统的可执行文件),第二种是XML文件,其中,xml文件包括应用清单,应用清单包含了应用的配置信息,Android系统需要根据应用清单的内容运行应用代码,显示应用界面。应用清单的文件名为AndroidManifest.xml。其中,配置信息包括该应用的包名、版本号、组件、权限等信息。
在Android应用程序包中AndroidManifest.xml为二进制文件,可通过AXMLPrinter2工具进行解码,将解码后的应用清单作为应用文件,加入所述应用文件集合。
202、检测终端从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合。
在本实施例中,参考图5c,可以先从应用文件集合中选取一个应用文件,然后用open方法打开该应用文件,读取该应用文件中的文件头信息。其中,文件头的前四个字节可以用于表示文件格式。这样,可以全面地获取符合可执行文件特征的所有应用文件,避免遗漏。从而可以全面地对dex文件进行漏洞检测。
在一个具体的实施例中,参考图5c,可以从应用文件集合中选择一个应用文件,打开后,调用stacmp方法检查应用文件的文件头前四个字节是否与dex\n相等,若相等,则说明该应用文件为由Android操作系统进行加载执行的文件,将其作为目标文件,并加入目标文件集合,然后从所述应用文件集合中选取下一个应用文件,重复上述步骤;若该应用文件文件头的前四个字节与dex\n不相等,则直接从所述应用文件集合中选取下一个应用文件。直至将所述应用文件集合中的所有应用文件均检查完毕,将选取的目标文件组合后,得到目标文件集合。
203、检测终端解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引。
参考图5d,打开目标文件,依次按字节读取整个文件内容,然后一一解析出文件内容的不同部分,文件内容开始的112字节是文件头。文件头描述了索引信息的分布,包括字符串信息集合、类信息集合、方法信息集合、类引用信息集合等。首先读取文件内容第60个字节,获取字符串信息集合在目标文件中的偏移位置,第56个字节处是字符串信息集合的大小,其中,字符串信息集合的大小指字符串信息集合包含的字节数。将open方法(打开)的文件指针调整到字符串信息集合偏移位置处,读取字符串集合大小的字节数,也就获取了字符串信息集合。
根据文件头中的字节,依次获取字符串信息集合、类型信息集合、方法原型信息集合、字段信息集合、方法信息集合、类定义信息集合和内容信息集合。
204、检测终端基于所述解析内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
在本实施例中,参考图5e,检测终端可以先从所述漏洞规则集合中获取一个漏洞规则,然后对比该漏洞规则与一个目标文件的方法名称、若方法名称匹配,则继续对比类名称,若类名称匹配,则继续对比方法原型,若方法原型匹配,则获取该漏洞规则的其他检测条件,若无其他检测条件,则可以确定该应用具有漏洞,否则,则从目标文件集合中选取下一个目标文件,重复上述步骤,若满足其他检测条件,则确定该应用具有漏洞。
205、检测终端基于所述漏洞检测结果,生成漏洞检测报告。
在本实施例中,漏洞检测报告包括相互匹配的目标文件的目标文件标识和漏洞规则的漏洞标识,还包括匹配的字符串(包括用于方法名称、类名称、方法原型的字符串)。
检测终端可以在页面中显示漏洞检测报告,或者通过网络将所述漏洞检测报告发送给其他终端。
为了更好地实施以上方法,本发明实施例还提供一种应用漏洞检测装置,该应用漏洞检测装置具体可以集成在电子设备中,该电子设备可以为检测终端、服务器、个人电脑等设备。
比如,在本实施例中,将以应用漏洞检测装置集成在检测终端中为例,对本发明实施例地方法进行详细说明。
比如,如图3所示,该应用漏洞检测装置可以包括获取单元301、读取单元302、选取单元303、第一解析单元304、第二解析单元305和检测单元306。如下:
(1)获取单元301,用于获取应用文件集合,所述应用文件集合包括多个应用文件。
在一实施例中,获取单元301具体可以用于:
获取安装文件集合;
基于所述安装文件集合的文件名,检验所述安装文件集合是否符合预设检测类型;
若是,则基于所述安装文件集合的文件名从预设解压算法中,选取目标解压缩算法;
基于所述目标解压缩算法对所述安装文件集合进行解压缩,得到所述应用文件集合,所述应用文件集合包括多个应用文件。
(2)读取单元302,用于读取所述应用文件的文件头信息.
(3)选取单元303,用于基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件。
在一实施例中,所述选取单元303具体可以用于:
获取文件头信息中的目标字节;
比较所述目标字节与预设可执行文件字节;
若所述目标字节与所述可执行字符串相等,则选取所述目标字节对应的应用文件作为目标文件。
(4)第一解析单元304,用于解析所述目标文件,获取所述目标文件中的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引。
在一实施例中,所述第一解析单元304具体可以用于:
读取所述目标文件,获取目标文件头信息;
基于所述目标文件头信息,从所述目标文件中获取索引信息集合;
基于所述索引信息集合,确定所述目标文件中的内容信息集合。
(5)第二解析单元305,基于所述索引信息集合,从所述内容信息集合中获取目标文件内容。
在一实施例中,所述索引信息集合包括方法信息集合和字符串信息集合,所述目标文件内容包括方法名称,第二解析单元305具体可以用于:
基于所述索引信息集合,获取目标文件内容,包括:
从所述方法信息集合中,,获取方法名称索引,所述方法名称索引为所述目标文件调用的方法的方法名称在所述字符串信息集合中的索引;
基于所述方法名称索引,在所述字符串信息集合中获取所述方法名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法名称。
在一实施例中,所述索引信息集合还包括类型信息集合,所述目标文件内容还包括类名称,所述第二解析单元305还可以用于:
从所述方法信息集合中,获取所述目标文件调用的方法所属的类信息索引;
基于所述类信息索引,从所述类型信息集合中获取类索引;
基于所述类名称索引,从所述字符串信息集合中获取所述类名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述类名称。
在一实施例中,所述索引信息集合还包括方法原型信息集合,所述目标文件内容还包括方法的方法原型、方法中应用的参数的参数类型,以及方法的返回值的返回值类型,所述第二解析单元305还可以用于:
从所述方法信息集合中,获取所述目标文件调用的方法的方法原型信息索引;
基于所述方法原型信息索引,从所述方法原型信息集合中获取方法原型索引、参数类型索引和返回值类型索引;
基于所述方法原型索引、参数类型索引和返回值类型索引,从所述字符串信息集合中获取所述方法原型、参数类型和返回值类型在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法原型、参数类型和返回值类型。
(6)检测单元306,用于基于所述索引信息集合,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
在一实施例中,所述检测单元306具体可以用于:
获取所述漏洞规则集合中漏洞规则的方法名称;
对比所述漏洞规则的方法名称,与所述目标文件的方法名称,得到方法名称匹配结果;
基于所述方法名称匹配结果,获取漏洞检测结果。
在一实施例中,所述目标文件内容还包括类名称,所述检测单元306还可以用于:
若方法名称匹配,则获取所述漏洞规则的类名称;
对比所述漏洞规则的类名称与所述目标文件的类名称,得到类名称匹配结果;
基于所述类名称匹配结果,获取漏洞检测结果。
在一实施例中,所述目标文件内容还包括方法原型、参数类型和返回值类型,所述检测单元306还可以用于:
若类名称匹配,则获取所述漏洞规则的参数类;
对比所述漏洞规则的方法原型、参数类型和返回值类型与所述目标文件的方法原型、参数类型和返回值类型,得到方法原型匹配结果;
基于所述方法原型匹配结果,获取漏洞检测结果。
在一实施例中,所述检测单元306还可以用于:
若方法原型匹配,则获取漏洞规则的其他检测条件;
根据所述检测条件,返回执行所述获取所述漏洞规则的方法名称的步骤;
根据所述检测条件,获取漏洞检测结果。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由上可知,本实施例可以由获取单元获取应用文件集合,所述应用文件集合包括多个应用文件;由读取单元读取所述应用文件的文件头信息;由选取单元基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件;由第一解析单元解析所述目标文件,获取所述目标文件中的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;由第二解析单元基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;由检测单元基于所述索引信息集合,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。本发明无需对应用文件进行反编译,可以提高检测效率,另外,通过文件头信息来选取可执行格式的文件,可以避免遗漏非标准命名的文件,从而可以快速、全面地对应用文件集合进行漏洞检测。
本发明实施例还提供一种检测终端,该检测终端可以集成本发明实施例所提供的任一种应用漏洞检测装置,该检测终端可以是手机、平板电脑、微型处理盒子、无人机、或者图像采集设备等等。
例如,如图4所示,其示出了本发明实施例所涉及的检测终端的结构示意图,具体来讲:
该检测终端可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403以及输入模块404部件等部件。本领域技术人员可以理解,图4中示出的检测终端结构并不构成对检测终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该检测终端的控制中心,利用各种接口和线路连接整个检测终端的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行检测终端的各种功能和处理数据,从而对检测终端进行整体监控。在一些实施例中,处理器401可包括一个或多个处理核心;在一些实施例中,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据检测终端的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
检测终端还包括给各个部件供电的电源403,在一些实施例中,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该检测终端还可包括输入模块404,该输入模块404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,检测终端还可以包括显示单元等,在此不再赘述。具体在本实施例中,检测终端中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
获取应用的应用文件集合,所述应用文件集合包括多个应用文件;
读取应用文件集合中所述应用文件的文件头信息;
基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;
解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;
基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;
基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
以上各个操作的具体实施方式可参见前面的实施例,在此不再赘述。
由上可知,本实施例的检测终端可以获取应用的应用文件集合,所述应用文件集合包括多个应用文件;读取应用文件集合中所述应用文件的文件头信息;基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。本发明实施例无需对应用文件进行反编译,可以提高检测效率,另外,通过文件头信息来选取可执行格式的文件,可以避免遗漏非标准命名的文件,从而可以快速、全面地对应用文件集合进行漏洞检测。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种内容推荐方法中的步骤。例如,该指令可以执行如下步骤:
获取应用的应用文件集合,所述应用文件集合包括多个应用文件;
读取应用文件集合中所述应用文件的文件头信息;
基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;
解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;
基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;
基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种应用漏洞检测方法中的步骤,因此,可以实现本申请实施例所提供的任一种应用漏洞检测方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种应用漏洞检测方法、装置以及计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (13)
1.一种应用漏洞检测方法,其特征在于,包括:
获取应用的应用文件集合,所述应用文件集合包括多个应用文件;
读取应用文件集合中所述应用文件的文件头信息;
基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件,得到目标文件集合;
解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;
基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;
基于所述目标文件内容,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
2.如权利要求1所述的应用漏洞检测方法,其特征在于,基于所述应用文件的文件头信息,所述从所述应用文件集合中选取符合预设可执行文件格式的目标文件,包括:
获取文件头信息中的目标字节;
比较所述目标字节与预设可执行文件字节;
若所述目标字节与所述可执行字符串相等,则选取所述目标字节对应的应用文件作为目标文件。
3.如权利要求1所述的应用漏洞检测方法,其特征在于,所述索引信息集合包括方法信息集合和字符串信息集合,所述目标文件内容包括方法名称;
基于所述索引信息集合,获取目标文件内容,包括:
从所述方法信息集合中,,获取方法名称索引,所述方法名称索引为所述目标文件调用的方法的方法名称在所述字符串信息集合中的索引;
基于所述方法名称索引,在所述字符串信息集合中获取所述方法名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法名称。
4.如权利要求3所述的应用漏洞检测方法,其特征在于,所述索引信息集合还包括类型信息集合,所述目标文件内容还包括类名称;
基于所述索引信息集合,获取目标文件内容,还包括:
从所述方法信息集合中,获取所述目标文件调用的方法所属的类信息索引;
基于所述类信息索引,从所述类型信息集合中获取类索引;
基于所述类名称索引,从所述字符串信息集合中获取所述类名称在所述目标文件中的位置信息;
基于所述位置信息,获取所述类名称。
5.如权利要求4所述的应用漏洞检测方法,其特征在于,所述索引信息集合还包括方法原型信息集合,所述目标文件内容还包括方法的方法原型、方法中应用的参数的参数类型,以及方法的返回值的返回值类型;
基于所述索引信息集合,获取目标文件内容,还包括:
从所述方法信息集合中,获取所述目标文件调用的方法的方法原型信息索引;
基于所述方法原型信息索引,从所述方法原型信息集合中获取方法原型索引、参数类型索引和返回值类型索引;
基于所述方法原型索引、参数类型索引和返回值类型索引,从所述字符串信息集合中获取所述方法原型、参数类型和返回值类型在所述目标文件中的位置信息;
基于所述位置信息,获取所述方法原型、参数类型和返回值类型。
6.如权利要求3所述的应用漏洞检测方法,其特征在于,基于所述目标文件内容,在预设漏洞规则集合内进行漏洞匹配,得到漏洞检测结果,包括:
获取所述漏洞规则集合中漏洞规则的方法名称;
对比所述漏洞规则的方法名称,与所述目标文件的方法名称,得到方法名称匹配结果;
基于所述方法名称匹配结果,获取漏洞检测结果。
7.如权利要求6所述的应用漏洞检测方法,其特征在于,所述目标文件内容还包括类名称,基于所述方法名称匹配结果,获取漏洞检测结果,包括:
若方法名称匹配,则获取所述漏洞规则的类名称;
对比所述漏洞规则的类名称与所述目标文件的类名称,得到类名称匹配结果;
基于所述类名称匹配结果,获取漏洞检测结果。
8.如权利要求7所述的应用漏洞检测方法,其特征在于,所述目标文件内容还包括方法原型、参数类型和返回值类型,基于所述类名称匹配结果,获取漏洞检测结果,包括:
若类名称匹配,则获取所述漏洞规则的方法原型、参数类型和返回值类型;
对比所述漏洞规则的方法原型、参数类型和返回值类型与所述目标文件的方法原型、参数类型和返回值类型,得到方法原型匹配结果;
基于所述方法原型匹配结果,获取漏洞检测结果。
9.如权利要求8所述的应用漏洞检测方法,其特征在于,基于所述方法原型匹配结果,获取漏洞检测结果,还包括:
若方法原型匹配,则获取漏洞规则的其他检测条件;
根据所述检测条件,返回执行所述获取所述漏洞规则的方法名称的步骤;
根据所述检测条件,获取漏洞检测结果。
10.如权利要求1所述的应用漏洞检测方法,其特征在于,解析所述目标文件,获取所述目标文件的解析内容,所述解析内容包括索引信息集合和内容信息集合,包括:
读取所述目标文件,获取目标文件头信息;
基于所述目标文件头信息,从所述目标文件中获取索引信息集合;
基于所述索引信息集合,确定所述目标文件中的内容信息集合。
11.如权利要求1所述的应用漏洞检测方法,其特征在于,所述获取应用文件集合,所述应用文件集合包括多个应用文件,包括:
获取安装文件集合;
基于所述安装文件集合的文件名,检验所述安装文件集合是否符合预设检测类型;
若是,则基于所述安装文件集合的文件名从预设解压算法中,选取目标解压缩算法;
基于所述目标解压缩算法对所述安装文件集合进行解压缩,得到所述应用文件集合,所述应用文件集合包括多个应用文件。
12.一种应用漏洞检测装置,其特征在于,包括:
获取单元,用于获取应用文件集合,所述应用文件集合包括多个应用文件;
读取单元,用于读取所述应用文件的文件头信息;
选取单元,用于基于所述应用文件的文件头信息,从所述应用文件集合中选取符合预设可执行文件格式的目标文件;
第一解析单元,用于解析所述目标文件,获取所述目标文件中的解析内容,所述解析内容包括索引信息集合和内容信息集合,所述索引信息包括内容信息在所述目标文件中的索引;
第二解析单元,基于所述索引信息集合,从所述内容信息集合中获取目标文件内容;
检测单元,用于基于所述索引信息集合,在预设漏洞规则集合内进行漏洞检测,得到漏洞检测结果。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,当计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至11中任一项所述的应用漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911077573.3A CN110826074A (zh) | 2019-11-06 | 2019-11-06 | 一种应用漏洞检测方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911077573.3A CN110826074A (zh) | 2019-11-06 | 2019-11-06 | 一种应用漏洞检测方法、装置和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110826074A true CN110826074A (zh) | 2020-02-21 |
Family
ID=69552922
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911077573.3A Pending CN110826074A (zh) | 2019-11-06 | 2019-11-06 | 一种应用漏洞检测方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110826074A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113206849A (zh) * | 2021-04-29 | 2021-08-03 | 杭州安恒信息安全技术有限公司 | 一种基于ghidra的漏洞扫描方法、装置及相关设备 |
CN113839957A (zh) * | 2021-09-29 | 2021-12-24 | 杭州迪普科技股份有限公司 | 未授权漏洞的检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104318161A (zh) * | 2014-11-18 | 2015-01-28 | 北京奇虎科技有限公司 | 一种安卓样本的病毒检测方法及装置 |
CN106709335A (zh) * | 2015-11-17 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 漏洞检测方法和装置 |
CN106940771A (zh) * | 2016-01-04 | 2017-07-11 | 阿里巴巴集团控股有限公司 | 基于文件的漏洞检测方法和装置 |
-
2019
- 2019-11-06 CN CN201911077573.3A patent/CN110826074A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104318161A (zh) * | 2014-11-18 | 2015-01-28 | 北京奇虎科技有限公司 | 一种安卓样本的病毒检测方法及装置 |
CN106709335A (zh) * | 2015-11-17 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 漏洞检测方法和装置 |
CN106940771A (zh) * | 2016-01-04 | 2017-07-11 | 阿里巴巴集团控股有限公司 | 基于文件的漏洞检测方法和装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113206849A (zh) * | 2021-04-29 | 2021-08-03 | 杭州安恒信息安全技术有限公司 | 一种基于ghidra的漏洞扫描方法、装置及相关设备 |
CN113839957A (zh) * | 2021-09-29 | 2021-12-24 | 杭州迪普科技股份有限公司 | 未授权漏洞的检测方法及装置 |
CN113839957B (zh) * | 2021-09-29 | 2024-02-09 | 杭州迪普科技股份有限公司 | 未授权漏洞的检测方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105718289B (zh) | 一种组件关系建立方法及其设备 | |
US8984502B2 (en) | Systems and methods for composing or decomposing a composite image for firmware update images | |
US8381175B2 (en) | Low-level code rewriter verification | |
CN111158741B (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
US10514898B2 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
US20230036357A1 (en) | Method and apparatus for authority control, computer device and storage medium | |
CN110297776B (zh) | 检测报告生成、接收方法、装置、设备及存储介质 | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
CN114238948A (zh) | 一种应用程序检测方法、装置、电子设备及存储介质 | |
CN107798064A (zh) | 页面处理方法、电子设备及计算机可读存储介质 | |
CN113568839A (zh) | 软件测试和统计测试覆盖率的方法、装置、设备及介质 | |
CN110826074A (zh) | 一种应用漏洞检测方法、装置和计算机可读存储介质 | |
CN112527386B (zh) | 应用程序发布方法及装置 | |
CN110659022B (zh) | 一种基于Java自动调用Python脚本的方法 | |
US9442826B2 (en) | Kernel functionality checker | |
CN112559344A (zh) | 远程mock测试方法及系统 | |
CN111488144A (zh) | 一种数据处理方法以及设备 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN112953721B (zh) | 一种ipa文件的解析方法、装置、设备及存储介质 | |
CN115220873A (zh) | 一种在Android系统中运行Open Harmony应用的方法 | |
CN114417347A (zh) | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
CN114564413B (zh) | 一种同步设备测试方法及装置 | |
CN116032809B (zh) | 使用Wasm的网络协议分析方法及系统 | |
CN114595106B (zh) | 一种业务控制设备调测方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40021534 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |