一种Android应用程序的安全检测方法与流程

文档序号:17741639发布日期:2019-05-24 20:10阅读:867来源:国知局
一种Android应用程序的安全检测方法与流程

本发明属于信息安全领域,尤其涉及一种android应用程序的安全检测方法。

技术背景

随着科学技术的不断进步,网络技术日益发达,智能手机已经成为人们生活中不可或缺的一部分,其中android操作系统占据了主导地位。

android平台的应用软件使用java语言编写,但java语言的特性导致android应用软件容易被逆向和破解,同时,android平台允许应用程序的开发者使用自己的证书对安装包进行签名,也允许系统从第三方应用市场中安装应用,因此,当android应用软件被逆向后,可以修改其代码与资源等文件,重新签名生成新的安装包,发布到第三方应用市场供用户安装使用。很多恶意软件与广告软件开发者利用这种方法,将正常软件中植入恶意代码或者广告代码,以达到更加广泛的传播并欺骗用户安装使用的目的,从而获取更多的利益。

但是,为保证原应用软件的正常使用,恶意软件通常不会对原应用软件做大量修改,且恶意代码与广告代码通常是相对独立的模块,因此如何利用这一特性对已经植入恶意代码或者广告代码的软件进行检测是目前急需解决的问题。申请号为201210221959.9的专利提出了一种android应用程序的安全检测方法及系统,虽然能够利用安全应用与木马应用之间的差异检测出apk的安全性,但其因检测维度较少导致检测结果不准确,且检测结果不能展示待检测apk与库中apk的相似关系,因此,如何解决上述问题是目前亟需解决的问题。



技术实现要素:

本发明提供了一种android应用程序的安全检测方法,旨在解决上述问题。

本发明提供一种android应用程序的安全检测方法,所述方法包括:通过解析和反编译提取android应用程序安装包(androidpackage,简称apk)的特征信息,所述特征信息是存在所述apk中的用于做安全检测的特征信息,其中包括签名权限信息、目录信息、文件信息、内容信息和时间戳信息;将待检测apk与预设的标准apk库中的多个目标应用作关于所述apk特征信息的相似性检测;将根据预设排序规则得到的相似度序列与预设的安全阈值做比较,判断待检测apk是否是安全应用。

优选地,首先通过解压android应用程序安装包(简称apk)得到编译后的代码文件、资源文件和布局文件,其次通过反编译过程从上述已编译的文件获得相应的未编译的文件,最后得到apk的签名权限信息、目录信息、文件信息、内容信息和时间戳等特征信息,其中每个apk只提取一个距离当前时间最近的时间戳。

优选地,待检测apk与标准apk库中的目标应用按照预设得分规则分别从签名权限信息、目录信息、文件信息和内容信息四个维度作相似性检测,并根据预设统计算法利用检测结果得到待检测apk与该目标应用的相似度。

优选地,待检测apk与标准库中的apk分别做相似性检测后得到多个相似度,按照预设排序规则将得到的多个相似度排序,得到排序后的相似度序列,最后将相似度序列与预设的安全阈值作比较,若某一相似度不小于安全阈值,则判定待检测apk与该相似度代表的目标apk的属性相同。

上述本发明提供了一种android应用程序的安全检测方法,本申请首先利用预设得分规则从多个维度做待检测apk与预设标准库中apk的相似性检测,并根据预设统计算法得到待检测apk与预设标准库中apk的相似度,可有效提高相似性检测的准确性;其次按照预设排序规则将得到的相似度排序,得到相似度序列;最后通过预设安全阈值与相似度序列依次比较,判断待检测apk是否是安全应用,并得出待检测apk与预设标准库中apk的相似关系,以达到快速检测出android应用程序安全性以及发现更多应用之间共同点的目的。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明第一实施例提供的一种android应用程序的安全检测方法的流程图;

图2为本发明第二实施例提供的一种android应用程序的安全检测方法的流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,是本发明第一实施例提供的一种android应用程序的安全检测方法的流程图,下面将对图1所示的具体流程图进行详细阐述。

步骤101,提取apk特征信息;

其中,通过对apk进行解包和反编译操作,获得该apk的特征信息。

其中,所述解包过程为解压apk得到编译后的代码文件、资源文件和布局文件;所述反编译过程为从上述已编译的文件中获得相应的未编译文件。

作为一种实施方式,将通过解包操作得到的文件命名为解压文件,将通过反编译操作得到的文件命名为源码文件。

其中,所述apk特征信息是存在apk未编译文件中的用于做安全检测的特征信息,其中包括签名权限信息、目录信息、文件信息、内容信息和时间戳信息。

其中,所述签名权限信息指签名信息和权限信息,签名用于标识应用程序的作者和其开发的应用程序之间的关系,通过签名机制能够判断apk的开发者,签名信息存在于解压后apk的meta-lnf目录下的.rsa文件中;权限信息指应用程序所需要的权限,存在于解压后apk的布局文件androidmanifest.xml中,根据权限的具体行为,将权限信息分为普通权限信息和危险权限信息,作为一种实施方式,这里权限信息可以指读取联系人信息权限、读取短信权限、发送短信权限和上网权限等,其中上网权限为普通权限信息,读取联系人信息权限、读取短信权限和发送短信权限为危险权限信息。

其中,所述目录信息指由该目录及其所包含指定文件所生成的唯一md5值,具体生成md5的规则为,对于非嵌套目录,即该目录不再包含目录级,首先分别计算该目录包含的所有文件(其中不包含配置文件、.dex文件和签名文件)的md5值,然后排序后串联组成一个字符串,并在末尾添加该目录名,最后利用得到的字符串重新生成新的md5,即为该非嵌套目录的目录信息;对于嵌套目录,即该目录下包含目录级,首先计算该目录所包含目录的目录信息和文件信息,然后将得到的md5进行排序并串联组成一个字符串,在末尾添加该嵌套目录名,最后利用得到的字符串重新生成新的唯一md5,该md5即为该嵌套目录的目录信息,其中目录信息用于识别广告库和公共开发库。

其中,所述文件信息分为解压文件信息和源码文件信息,其中解压文件信息指apk解压后得到dex文件、so文件、jar文件和shell脚本,将其分别转化为唯一md5值,构成的md5集合;源码文件信息指将上述dex文件反编译得到多个代码文件,将代码文件分别转化为md5值,构成的md5集合,其中解压文件信息检测先于源码文件信息检测。

其中,所述内容信息分为代码内容信息和文本内容信息,其中代码内容信息指通过反编译过程从apk代码文件中获取该apk的具体行为,作为一种实施方式,代码内容信息可能包括该apk关联到的电话、ip、email、url、域名和敏感api信息;文本内容信息指通过反编译过程从apk的xml文件中获取该apk的具体行为,作为一种实施方式,文本内容信息可能包括该apk关联到的电话、ip、email、url和域名信息,需要注意的是,文本内容信息中没有敏感api信息。

其中,所述时间戳信息指提取apk中距离当前时间最近的文件更新时间,一个apk只提取一个距离当前时间最近的时间戳信息。

步骤102,待检测apk与预设标准库中apk做相似性检测,如图2所示。

其中,所述预设标准库是指在作安全检测之前,预先建立标准apk库,其中包含安全应用和木马应用,以及这些应用的关于做安全检测的特征信息,即就是标准库中安全应用和木马应用的签名权限信息、目录信息、文件信息、内容信息和时间戳信息。

其中,所述相似性检测指待检测apk与标准库中apk按照预设得分规则分别从签名权限信息、目录信息、文件信息和内容信息四个维度做相似性检测,并根据预设统计算法得到待检测apk与库中apk的相似度。其中预设得分规则包括签名权限得分规则、目录信息得分规则、文件信息得分规则和内容信息得分规则。

其中,所述签名权限得分规则具体为,设应用程序a和b,其中a为待检测apk,b为标准库中apk,a和b做签名权限信息的相似性检测时,先做签名信息的相似性检测,再做权限信息的相似性检测,其中权限信息的相似性检测又分为普通权限信息和危险权限信息的相似性检测,应用程序a和b做签名权限信息的相似性检测的得分公式为:

其中

其中,y1为签名信息做相似性检测的第一参数,y2为权限信息做相似性检测的第二参数,其中y1+y2=1,且y1和y2均大于0;t1为签名权限信息做相似性检测的预设满分值,其中t1可以为1,也可以为其他数值,此处不做具体限定;为权限信息做相似性检测后的得分,y21为权限信息中危险权限做相似性检测的第三参数,n1和m1分别为从应用程序a和b的androidmanifest.xml文件中提取的危险权限总个数,s1为应用程序a和b包含相同的危险权限个数,其中n1、m1均为正整数,s1可为0,也可为正整数;y22为权限信息中普通权限做相似性检测的第四参数,n2和m2分别为从应用程序a和b的androidmanifest.xml文件中提取的普通权限总个数,s2为应用程序a和b包含相同的普通权限个数,其中n2、m2均为正整数,s2可为0,也可为正整数,其中y21和y22满足y21+y22=1,且均大于0。

作为一种实施方式,在对待检测应用程序a做签名权限信息做相似性检测时,签名信息做相似性检测的第一参数y1往往大于权限信息做相似性检测的第二参数y2。

作为一种实施方式,在对待检测应用程序a做权限信息的相似性检测时,危险权限信息做相似性检测的第三参数y21往往大于普通权限信息做相似性检测的第四参数y22。

作为一种实施方式,现有应用程序a和b,其中a为待检测apk,b为标准库中apk,设签名权限信息做相似性检测的预设满分值t1为1,第一参数y1为0.6,第二参数y2为0.4,第三参数y21为0.7,第四参数y22为0.3,应用程序a和b的签名信息相同,应用程序a的androidmanifest.xml文件中包含危险权限个数n1为10个,普通权限个数n2为20个,应用程序b的androidmanifest.xml文件中包含危险权限个数m1为8个,普通权限个数m2为15个,并且应用程序a和b包含相同的危险权限个数s1为5个,相同的普通权限个数s2为10个,则根据签名权限信息做相似性检测的得分公式,得到应用程序a和b的签名权限信息相似性检测得分为:

其中,所述目录信息得分规则具体为,设应用程序a和b,其中a为待检测apk,b为标准库中apk,a和b做目录信息的相似性检测时,从根目录开始检测,然后依次向下检测每层的目录信息,应用程序a和b做目录信息相似性检测的得分公式为:

其中,i为当前相似性检测的目录层数(i为正整数),当检测根目录时i=1,下层目录i=2,依次类推;p为待检测apk的目录结构总层数(p为正整数);t2为目录信息做相似性检测的预设满分值,其中t2可以为1,也可以是其他数值,此处不做具体限定;ni为应用程序a中第i层的目录个数,si为应用程序a和b在第i层做相似性检测时具有相同目录信息的个数,此时ni和si需要满足,当应用程序a和b在第i-1(i≠1)层做目录信息检测时,若ae与bf的目录信息相同,则ae与bf目录下所有层数的目录不再做相似性检测,且当统计第i层到第p层的ni与si值时,ae与bf目录下所有层数的目录不参与统计,ni、si≥0。

作为一种实施方式,现有应用程序a和b,若a和b的根目录信息相同,则代表a和b的目录结构完全相同,无需再对a和b根目录下所有层数的目录做相似性检测,此时a和b做目录信息相似性检测的得分为预设满分值t2。

作为一种实施方式,现有待检测应用程序a和标准库中应用程序b,设目录信息做相似性检测的预设满分值t2为1,p取3,若两个apk的根目录信息a1和b1不相同,则比较下层a2和b2目录。在比较应用程序a和b的a2和b2目录信息是否相同之前,统计应用程序a的a2层目录包含的目录个数n2为3,依次编号a21、a22、a23,统计应用程序b的b2层目录包含的目录个数为4,依次编号b21、b22、b23、b24,应用程序a的a2层中的所有目录依次与应用程序b的b2层中的所有目录作比较,统计目录信息相同的目录个数s2,设s2为2,其中a21=b21,a22=b22,这时a21、a22、b21和b22的以下所有层数的目录不在做相似性检测,且不参与后续sj与nj的统计,其中j≥3;继续比较应用程序a和b的a3和b3目录,其中应用程序a的a23目录下包含一个目录a31,即n3为1,应用程序b的b23、b24目录下包含3个目录,分别为b31、b32、b33,其中a31=b32,即s3为1,根据目录信息做相似性检测的得分公式,得到应用程序a和b的目录信息相似性检测得分为:

作为一种实施方式,在对待检测应用程序a做目录信息的相似性检测时,目前仅需对应用程序a的前三层目录做相似性检测,即仅需要对a1、a2和a3层的所有目录进行相似性检测。

其中,所述文件信息得分规则具体为,设应用程序a和b,其中a为待检测apk,b为标准库中apk,a和b做文件信息的相似性检测时,先做解压文件信息(包括由dex文件、so文件、jar文件和shell脚本分别转化生成的md5值)的相似性检测,再做源码文件信息(包括将上述dex文件反编译得到的多个代码文件分别转化生成的md5值)的相似性检测,若应用程序a和b解压文件中dex文件相同,则无需做a和b源码文件信息的相似性检测,应用程序a和b做文件信息相似性检测的得分公式为:

其中

其中,y1和y2满足以下条件:

其中,y1为解压文件信息做相似性检测时的第一参数,y2为源码文件信息做相似性检测时的第二参数;t3为文件信息做相似性检测的预设满分值,其中t3可以为1,也可以为其他值,此处不做具体限定;n1和m1分别为应用程序a和b中包含所述解压文件的个数,s1为应用程序a和b包含相同解压文件的个数,其中n1、m1均为正整数,s1可为0,也可为正整数;z为协调因子,应用程序a和b做解压文件信息的相似性检测时,当所述解压文件中dex文件相同时,则z取值为0,即应用程序a和b无需做源码文件信息的相似性检测,反之,z取1;为源码文件信息做相似性检测后的得分,其中n2和m2分别为应用程序a和b中包含所述源码文件的个数,s2为应用程序a和b包含相同源码文件的个数,其中n2、m2均为正整数,s2可为0,也可为正整数。

作为一种实施方式,在对待检测应用程序a做文件信息的相似性检测时,解压文件信息做相似性检测的第一参数y1往往大于源码文件信息做相似性检测的第二参数y2。

作为一种实施方式,现有应用程序a和b,其中a为待检测apk,b为标准库中apk,若应用程序a和b的解压文件中dex文件不相同,y1、y2>0,z取1,此时应用程序a和b做源码文件信息的相似性检测,根据n2、m2和s2的值将检测结果分为三种情况,其中n2和m2分别为应用程序a和b中包含所述源码文件的个数,s2为应用程序a和b包含相同源码文件的个数,其中n2、m2均为正整数,s2可为0,也可为正整数。具体为:

(1)当s2=n2=m2时,应用程序a和b的源码文件信息完全相同,此时a和b为相等关系,a和b做源码文件信息相似性检测的得分为预设满分值t3。

(2)当s2=n2<m2或者s2=m2<n2时,应用程序a和b为包含关系,其中当s2=n2<m2时,应用程序a包含于b;当s2=m2<n2时,应用程序b包含于a,此时a和b做源码文件信息相似性检测的得分为预设满分值t3。

(3)当s2≠n2且s2≠m2时,应用程序a和b为相交关系,此时a和b做源码文件信息相似性检测的得分公式为

其中,所述内容信息得分规则具体为,设应用程序a和b,其中a为待检测apk,b为标准库中apk,内容信息的相似性检测分为代码内容信息相似性检测和文本内容信息相似性检测,应用程序a和b做内容信息的相似性检测的得分公式为:

其中,y1为代码内容信息做相似性检测时的第一参数,y2为文本内容信息做相似性检测时的第二参数,i表示应用程序a和b的代码文件中共同包含的关键字的序号,每个关键字只有一个序号;p表示应用程序a和b的代码文件中共同包含的关键字总个数,统计p时消除重复的关键字;n表示应用程序a的代码文件中包含关键字的总个数,统计n时不消除重复的关键字;ni表示序号为i的关键字在应用程序a的代码文件中出现的总次数,统计ni时不消除重复的关键字;fi表示序号为i的关键字在应用程序b的代码文件中出现的总次数,统计fi时不消除重复的关键字;m表示应用程序b的代码文件的文件总数;mi表示序号为i的关键字在应用程序b的所有代码文件中出现的文件数;所述关键字可以是电话、ip、email、url、域名和敏感api信息等。

其中,j表示应用程序a和b的xml文件中共同包含的关键字的序号,每个关键字只有一个序号;q表示应用程序a和b的xml文件中共同包含的关键字总个数,统计q时消除重复的关键字;e表示应用程序a的xml文件中包含关键字的总个数,统计e时不消除重复的关键字;ej表示序号为j的关键字在应用程序a的xml文件中出现的总次数,统计ej时不消除重复的关键字;gi表示序号为j的关键字在应用程序b的xml文件中出现的总次数,统计gj时不消除重复的关键字;h表示应用程序b的xml文件的文件总数;hj表示序号为j的关键字在应用程序b的所有xml文件中出现的文件数;所述关键字可以是电话、ip、email、url、域名等,需要注意的是,在做文本内容检测时,关键字中没有敏感api。

作为一种实施方式,在对待检测应用程序做内容信息的相似性检测时,代码内容信息做相似性检测时的第一参数y1往往大于文本内容信息做相似性检测时的第二参数y2。

作为一种实施方式,第一参数y1为0.6,第二参数y2为0.4,现有应用程序a和b,其中a为待检测apk,b为标准库中apk,设应用程序a和b的代码文件中共同包含的关键字的总个数p为2,应用程序a的代码文件中包含关键字的总个数n为10,序号为1的关键字在a中代码文件出现的总次数n1为14,在b中代码文件出现的总次数f1为4,应用程序b的代码文件总数m为400,序号为1的关键字在应用程序b的所有代码文件中出现的文件数m1为4;序号为2的关键字在a中代码文件出现的总次数n2为5,在b中代码文件出现的总次数f2为50,应用程序b的代码文件总数m为400,序号为2的关键字在应用程序b的所有代码文件中出现的文件数m2为40;设应用程序a和b的xml文件中中共同包含的关键字的总个数q为1,应用程序a的xml文件中包含关键字的总个数e为5,关键字在a中xml文件出现的总次数e1为4,在b中xml文件中出现的总次数g1为6,应用程序b的xml文件总数h为100,关键字在应用程序b的所有xml文件中出现的文件数h1为10,则根据内容信息的相似性检测的得分公式,得到应用程序a和b做内容信息的相似性检测的得分为:

其中,所述根据预设统计算法得到相似度具体为,设应用程序a和b,阈值n1、n2、n3、n4分别代表a和b统计相似度时签名权限信息、目录信息、文件信息和内容信息的权重,其中n1+n2+n3+n4=1且n1、n2、n3、n4均大于0,d1、d2、d3和d4分别为应用程序a和b从签名权限信息、目录信息、文件信息和内容信息做相似性检测后得到的分数,因此,应用程序a和b的相似度为:

s=n1*d1+n2*d2+n3*d3+n4*d4

步骤103,判断待检测apk是否为安全应用。

其中,在进行判断待检测apk是否为安全应用之前,还需要将待检测apk与标准库中多个apk进行相似性检测后得到的相似度按照预设排序规则进行排序。

其中,所述预设排序规则为,首先将多个相似度按照从大到小排序,若存在相同大小的相似度,则按照该相似度代表的标准apk的时间戳信息排序,将距离当前时间最近的时间戳信息所代表的标准apk的相似度排在前列,得到按照预设规则排序的相似度序列。

其中,相似度序列的值依次与预设安全阈值进行比较,若某一相似度不小于预设安全阈值,则待检测apk的属性与该相似度代表的标准apk的属性相同。

其中,所述标准apk属性是指该标准apk是安全应用或者木马应用。

其中,所述预设安全阈值是通过对不同应用进行大量测试后计算得到的。

综上所述,本发明提供一种android应用程序的安全检测方法,本申请首先获取待检测apk的特征信息,其次利用预设得分规则从多个维度对待检测apk进行相似性检测,然后根据预设统计算法和预设排序规则得到相似度序列,最后通过相似度序列与预设安全阈值进行比较判断待检测apk的安全性,并得出待检测apk与预设标准库中apk的相似关系,有效提高相似性检测的准确率和效率,并解决了现有技术中无法发现更多应用之间共同点的缺陷。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

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