一种Intent调用风险检测方法及装置与流程

文档序号:17490655发布日期:2019-04-23 20:27阅读:201来源:国知局
一种Intent调用风险检测方法及装置与流程

本申请涉及应用安全技术领域,尤其涉及一种intent调用风险检测方法及装置。



背景技术:

随着android(安卓)操作系统的不断发展和普及,越来越多的用户使用android操作系统上的应用程序(简称android应用程序),随之各种各样的android应用程序也越来越丰富。与此同时,android应用程序的开发者和使用者所面临的信息安全问题也日益增多。

intent(意图)通常作为android应用程序组件(包括activity、service和broadcastreceiver)之间进行信息传递的“桥梁”。如附图1所示为android应用程序运行过程中,组件之间通过intent进行信息传递的示意图。在该过程中先调用一个intent,并向该intent中写入activity1组件所要传递的信息。然后android应用程序会根据intent的信息传递规则匹配出符合条件的activityx组件,activityx组件在获取该intent后,能够通过对该intent进行解析,从而获取activity1组件所要传递的信息。

然而在实际应用中,当组件之间通过intent进行信息传递时,由于activityx组件可能是未知的第三方android应用程序组件,因此可能会出现intent所传递的信息被该未知的第三方android应用程序组件获取的情况,从而造成用户的隐私数据泄漏。因此,检测android应用程序是否存在intent调用的风险,是本申请所要解决的技术问题。



技术实现要素:

本申请实施例中提供了一种intent调用风险检测方法及装置,用以解决现有技术中的问题。

为了解决上述技术问题,本申请是这样实现的:

第一方面,本申请提供了一种intent调用风险检测方法,该方法包括:

获取android应用程序安装包中的smali文件;

判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令;

根据判断结果,确定所述android应用程序是否存在intent调用的风险。

优选地,所述获取android应用程序安装包中的smali文件,具体包括:

通过对android应用程序安装包进行解压,获取classes.dex文件;

通过对所述classes.dex文件进行反编译,获取smali文件。

优选地,判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令,具体包括:

确定所述smali文件的文件内容中是否包含组件声明指令;

若是,则判断所述组件声明指令中是否包含未指向目标组件的intent调用指令。

优选地,所述判断所述组件声明指令中是否包含未指向目标组件的intent调用指令,具体包括:

通过操作系统的关键字搜索命令搜索所述组件声明指令中是否包含未指向目标组件的intent调用指令;

若搜索出未指向目标组件的intent调用指令,则判断所述组件声明指令中包含未指向目标组件的intent调用指令;

若没有搜索出未指向目标组件的intent调用指令,则判断所述组件声明指令中不包含未指向目标组件的intent调用指令。

优选地,所述确定所述smali文件的文件内容中是否包含组件声明指令,具体包括:

通过操作系统的关键字搜索命令对所述smali文件的文件内容进行搜索,确定所述smali文件的文件内容中是否包含组件声明指令。

优选地,所述根据判断结果,确定所述android应用程序是否存在intent调用的风险,具体包括:

若判断结果为所述smali文件的文件内容中不包含未指向目标组件的intent调用指令,则确定所述android应用程序不存在intent调用的风险;

若判断结果为所述smali文件的文件内容中包含未指向目标组件的intent调用指令,则确定所述android应用程序存在intent调用的风险。

第二方面,本申请提供了一种intent调用风险检测装置,该装置包括:

文件获取单元,用于获取android应用程序安装包中的smali文件;

指令判断单元,用于判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令;

风险确定单元,用于根据判断结果,确定所述android应用程序是否存在intent调用的风险。

采用本申请实施例中提供的上述至少一个技术方案,可以达到如下效果:

当android应用程序安装包中smali文件的文件内容里包含未指向目标组件的intent调用指令时,说明android应用程序没有明确启动哪个目标组件,也就说明android应用程序存在intent调用的风险。因此,采用本申请所提供的该方法,通过判断smali文件的文件内容中是否包含未指向目标组件的intent调用指令,来确定android应用程序是否存在intent调用的风险,可以解决现有技术中如何检测android应用程序是否存在intent调用的风险的问题。

附图说明

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

图1为现有技术中组件之间通过intent进行信息传递的过程示意图;

图2为本申请的一个实施例中提供的一种intent调用风险检测方法的流程示意图;

图3为本申请的一个实施例中提供的一种intent调用风险检测装置的结构示意图。

具体实施方式

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

以下结合附图,详细说明本申请各实施例中提供的技术方案。

实施例1

为解决现有技术中如何检测android应用程序是否存在intent调用的风险的问题,本申请实施例1提供了一种intent调用风险检测方法。

由于android应用程序能够通过调用intent来启动组件,若intent的对象中没有明确设定启动哪个组件,则android应用程序会根据intent的信息传递规则匹配出符合条件的android应用程序组件并启动该组件,那么在这种情况下,如果该组件为未知的第三方android应用程序组件的话,可能会导致android应用程序通过intent所传递的信息被未知的第三方android应用程序组件获取,从而造成用户的隐私数据泄露。因此,可以通过检测android应用程序安装包中smali文件的文件内容里是否包含未指向目标组件的intent调用指令,来确定android应用程序是否存在intent调用的风险,从而解决现有技术中的问题。

该intent调用风险检测方法的执行主体,可以是用于检测android应用程序的服务器或服务器上所运行的检测系统(或检测程序);又或者,该android应用程序的intent调用风险检测方法的执行主体可以是用于检测android应用程序的客户端(或用户端)等。

为便于描述本申请实施例1,以下详细说明均以该intent调用风险检测方法的执行主体为检测android应用程序的服务器上所运行的检测系统(以下简称为检测系统)为例,对该intent调用风险检测方法进行介绍。

请参见说明书附图2,图2为本申请实施例1提供的一种intent调用风险检测方法的流程示意图,该流程具体包括如下步骤:

步骤11:获取android应用程序安装包中的smali文件。

本申请实施例1中,在一种实施方式中,所述android应用程序安装包,是指待检测的android(安卓)操作系统上应用程序(application,简称app)的安装包,比如可以是已载入应用市场或者即将载入应用市场的需要检测的android操作系统上各应用程序的安装包。

本申请实施例1中,在一种实施方式中,所述安装包是指android安装包,即apk文件(androidpackage)。该apk文件中包含了一个android应用程序的所有内容。

本申请实施例1中,在一种实施方式中,所述apk文件可以理解为android应用程序的程序文件所压缩成的一个压缩包,但是该apk文件是以.apk作为文件的后缀名。比如可以是:xxx.apk,其中,所述xxx是android应用程序的开发者所命名的文件名。

本申请实施例1中,在一种实施方式中,所述apk文件经过解压后所包含的文件及文件夹如下述所示,主要分别是:

androidmanifest.xml文件、classes.dex文件、resources.arsc文件,以及assets文件夹、lib文件夹、meta-inf文件夹、res文件夹。

其中,所述androidmanifest.xml文件是每个apk文件中都必须包含的一类文件,该文件用于描述应用程序的名字、版本、权限、引用的库文件等信息,可以用于查找组件;

所述classes.dex文件是java源码编译后所生成的java字节码文件,是虚拟机davilk所执行的文件;

所述resources.arsc文件是编译后的二进制资源文件;

所述assets文件夹用于存放一些原始的配置文件;

所述lib文件夹用于存放所有的so库文件,这些so库文件供其它程序进行调用;

所述meta-inf文件夹下存放的是签名、信息描述等,该文件夹是apk文件进行签名的时候签名证书所存放的位置;

所述res文件夹下存放的是图标、图片、javascript文件等多种类型的工程资源文件。

需要说明的是,由于各应用程序的开发者不同,所以各apk文件解压后包含的文件除了上述特定文件外,还可以包括images文件夹、org文件夹等,这些文件夹不是特定的。

其中,对上述apk文件进行解压所用的工具,比如可以是winrar解压软件、winzip解压软件、7-zip解压软件等解压缩工具。

需要说明的是,在对android应用程序的安装包进行检测时,并不需要对解压后的全部文件进行检测,依靠其中的指定部分即可完成本申请实施例1的检测。因此,本申请实施例1中,所述其中的指定部分,具体包括:classes.dex文件。

但是,由于classes.dex文件无法直接被读取相关的文件信息,因此,需要通过反编译工具将apk文件解压出来的classes.dex文件反编译成smali文件,才能直接读取并分析相关的文件信息。

其中,所述反编译工具,比如可以是apktool反编译工具、baksmali反编译工具等。

本申请实施例1中,在一种实施方式中,所述反编译后的smali文件中包含了android应用程序的所有指令,这些指令为一个或多个davilk指令,这些指令主要用于描述其对应的java文件。

其中,所述指令,是指采用c语言等编程语言所创建的程序代码。

本申请实施例1中,在一种实施方式中,所述程序代码,具体包括:android应用程序进行相关函数调用的程序代码,其以字符串的形式呈现。

其中,所述字符串,是指多个可打印字符的任意序列,以换行符或空字符结束。

基于上述说明,考虑到apk文件解压出来的classes.dex文件无法直接被读取相关的文件信息,则,本申请实施例1中,在一种实施方式中,所述获取android应用程序安装包中的smali文件,具体包括:

通过对android应用程序安装包进行解压,获取classes.dex文件;

通过对所述classes.dex文件进行反编译,获取smali文件。

需要说明的是,若对android应用程序的安装包进行解压和反编译后没有获取到smali文件,则检测系统无法解析smali文件中的文件内容,即在没有获取到smali文件的这种情况下不能够执行后文所说的判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令这一步骤。因此,步骤11获取android应用程序安装包中的smali文件,是步骤12判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令的前提条件。

步骤12:判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令。

考虑到android应用程序启动组件时需要先声明启动组件的功能,因此,本申请实施例1中,在一种实施方式中,所述判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令,具体包括:

确定所述smali文件的文件内容中是否包含组件声明指令;

若是,则判断所述组件声明指令中是否包含未指向目标组件的intent调用指令。

本申请实施例1中,在一种实施方式中,所述组件,具体包括:android应用程序的activity(活动)组件、service(服务)组件和broadcastreceiver(广播接收器)组件。

本申请实施例1中,在一种实施方式中,所述组件声明指令,具体包括:包含用于声明各个组件启动的指令的指令集。所述用于声明各个组件启动的指令,具体如下述所示:

->startactivity(landroid/content/intent);

或者->startservice(landroid/content/intent);

或者->sendbroadcast(landroid/content/intent).

本申请实施例1中,在一种实施方式中,所述确定所述smali文件的文件内容中是否包含组件声明指令,具体包括:

通过操作系统的关键字搜索命令对所述smali文件的文件内容进行搜索,确定所述smali文件的文件内容中是否包含组件声明指令。

本申请实施例1中,在一种实施方式中,所述操作系统,具体包括:linux操作系统,其用于运行一些工具软件、应用程序等。

本申请实施例1中,在一种实施方式中,所述关键字搜索命令,具体包括:linux操作系统中的grep命令。

本申请实施例1中,在一种实施方式中,所述grep命令,是一种文本搜索工具,其全称为globalregularexpressionprint,它的主要功能是进行关键字符串的对比,即使用正则表达式搜索文本,并把关键字符串匹配的行打印出来。

其中,因为grep命令在数据中查找出一个关键字符串时,是以一整行为单位来进行数据选取的,所以匹配后打印出的是该关键字符串对应的一整行字符串。

本申请实施例1中,在一种实施方式中,所述grep命令的正则表达式的格式如下述所示:

#grep[-acinv][--color=auto]'待搜寻的字符串'filename。

其中,各选项与参数的意义,具体如下述所示:

-a:将binary文件以text文件的方式搜寻数据;

-c:计算找到'待搜寻的字符串'的次数;

-i:忽略大小写的不同,所以大小写视为相同;

-n:顺便输出行号;

-v:反向选择,亦即显示出没有'待搜寻的字符串'内容的那一行;

--color=auto:可以将找到的关键字符串部分加上颜色的显示;

filename:需要进行关键字符串搜寻的文本的文件名。

本申请实施例1中,在一种实施方式中,所述通过操作系统的关键字搜索命令对所述smali文件的文件内容进行搜索,确定所述smali文件的文件内容中是否包含组件声明指令,具体判断过程如下述所示:

将上述三条组件声明指令中的每一条指令作为一个关键字符串,也就是作为grep命令正则表达式中的'待搜寻的字符串',然后执行linux操作系统的grep命令在smali文件的所有文件内容中进行搜寻匹配,最后返回包含上述'待搜寻的字符串'的指令或者返回“无匹配字符”的字样。

需要说明的是,确定所述smali文件的文件内容中是否包含组件声明指令,可以是确定所述smali文件的文件内容中是否包含上述三条指令中的任意一条指令。若smali文件的文件内容中包含上述三条指令中的任意一条指令,则判断所述组件声明指令中是否包含未指向目标组件的intent调用指令。

本申请实施例1中,在一种实施方式中,所述intent(意图),是指一个用于android应用程序三大组件之前进行信息传递的媒介,它可以用于启动活动、开启服务、发送广播。

本申请实施例1中,在一种实施方式中,所述intent调用指令,具体包括:表征用于android应用程序调用intent的指令。

其中,所述调用intent,具体包括:调用intent方法。所述intent方法具体如下述所示:

intent()、intent.setclass()、intent.setclassname()、intent.setcomponent()、intent.setpackage()、intent.setaction()。其中,括号内的内容为intent方法的对象。

本申请实施例1中,在一种实施方式中,所述intent方法的对象具体包括以下内容:componentname(组件)、action(动作)、data(数据)、category(类别)、extras(拓展信息)、flags(标志位)。

考虑到intent方法的对象中action的设定可以用于决定android应用程序会启动哪个组件,则,本申请实施例1中,在一种实施方式中,所述未指向目标组件的intent调用指令,具体指令如下述所示:

-landroid/content/intent;->setaction().

本申请实施例1中,在一种实施方式中,所述判断所述组件声明指令中是否包含未指向目标组件的intent调用指令,具体包括:

通过操作系统的关键字搜索命令搜索所述组件声明指令中是否包含未指向目标组件的intent调用指令,判断所述组件声明指令中是否包含未指向目标组件的intent调用指令。

具体结果如下述所示:

若搜索出未指向目标组件的intent调用指令,则判断所述组件声明指令中包含未指向目标组件的intent调用指令;

若没有搜索出未指向目标组件的intent调用指令,则判断所述组件声明指令中不包含未指向目标组件的intent调用指令。

本申请实施例1中,在一种实施方式中,所述通过操作系统的关键字搜索命令搜索所述组件声明指令中是否包含未指向目标组件的intent调用指令,判断所述组件声明指令中是否包含未指向目标组件的intent调用指令,具体判断过程如下述所示:

将上述未指向目标组件的intent函数调用指令的指令作为一个关键字符串,也就是作为grep命令正则表达式中的'待搜寻的字符串',然后执行linux操作系统的grep命令在组件声明指令中进行搜寻匹配,最后返回包含上述'待搜寻的字符串'的指令或者返回“无匹配字符”的字样。

需要说明的是,若所述组件声明指令中包含未指向目标组件的intent调用指令,则说明android应用程序没有明确启动哪个目标组件,从而不存在intent调用的风险。因此,步骤12判断所述smali文件的文件内容中是否包含未指向目标组件的intent数调用指令,是步骤13根据判断结果,确定所述android应用程序是否存在intent调用的风险的重要前提条件。

步骤13:根据判断结果,确定所述android应用程序是否存在intent调用的风险。

本申请实施例1中,在一种实施方式中,所述intent调用的风险,具体包括:intent方法的对象中未明确指定目标组件名的风险,也就是intent被未知的第三方android应用程序组件调用,即该intent所传递的信息被未知的第三方android应用程序组件获取,从而可能导致用户的隐私数据泄漏的风险。

本申请实施例1中,在一种实施方式中,所述根据判断结果,确定所述android应用程序是否存在intent调用的风险,具体包括:

根据所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令的判断结果,确定所述android应用程序是否存在intent调用的风险。

则,所述根据所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令的判断结果,确定所述android应用程序是否存在intent调用的风险,具体确定过程及结果如下述所示:

若判断结果为所述smali文件的文件内容中不包含未指向目标组件的intent调用指令,说明intent方法的对象中明确了android应用程序具体启动哪个目标组件,那么在这种情况下,android应用程序通过intent所传递的信息只会传递给指定的组件,因而不会造成用户的隐私数据泄露,即确定所述android应用程序不存在intent调用的风险;

若判断结果为所述smali文件的文件内容中包含未指向目标组件的intent调用指令,说明intent方法的对象中没有明确android应用程序具体启动哪个目标组件,android应用程序需要根据intent的信息传递规则匹配出符合条件的android应用程序组件并启动该组件,那么在这种情况下,如果该组件为未知的第三方android应用程序组件的话,android应用程序通过intent所传递的信息可能会被该未知的第三方android应用程序组件获取,这样可能会造成用户的隐私数据泄露,即确定所述android应用程序存在intent调用的风险。

采用本申请实施例1提供的方案,当android应用程序安装包中smali文件的文件内容里包含未指向目标组件的intent调用指令时,说明android应用程序没有明确启动哪个目标组件,也就说明android应用程序存在intent调用的风险。因此,采用本申请所提供的该方法,通过判断smali文件的文件内容中是否包含未指向目标组件的intent调用指令,来确定android应用程序是否存在intent调用的风险,可以解决现有技术中如何检测android应用程序是否存在intent调用的风险的问题。

实施例2

为解决现有技术中如何检测android应用程序是否存在intent调用的风险的问题,本申请实施例2提供了一种intent调用风险检测装置20。

请参见说明书附图2,图2为本申请实施例2提供的一种intent调用风险检测装置的结构示意图,该装置具体包括:文件获取单元21,指令判断单元22,风险确定单元23。

以下具体介绍下各单元的功能:

文件获取单元21,用于获取android应用程序安装包中的smali文件;

指令判断单元22,用于判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令;

风险确定单元23,用于根据判断结果,确定所述android应用程序是否存在intent调用的风险。

本申请实施例2中,在一种实施方式中,所述文件获取单元21,具体包括:

通过对android应用程序安装包进行解压,获取classes.dex文件;

通过对所述classes.dex文件进行反编译,获取smali文件。

本申请实施例2中,在一种实施方式中,所述指令判断单元22,具体包括:

确定所述smali文件的文件内容中是否包含组件声明指令;

若是,则判断所述smali文件的文件内容中是否包含未指向目标组件的intent调用指令。

本申请实施例2中,在一种实施方式中,所述确定所述smali文件的文件内容中是否包含组件声明指令,具体包括:

通过操作系统的关键字搜索命令对所述smali文件的文件内容进行搜索,确定所述smali文件的文件内容中是否包含组件声明指令。

本申请实施例2中,在一种实施方式中,所述判断所述smali文件的文件内容中是否包含组件声明指令,具体包括:

通过操作系统的关键字搜索命令搜索所述组件声明指令中是否包含未指向目标组件的intent调用指令;

若搜索出未指向目标组件的intent调用指令,则判断所述组件声明指令中包含未指向目标组件的intent调用指令;

若没有搜索出未指向目标组件的intent调用指令,则判断所述组件声明指令中不包含未指向目标组件的intent调用指令。

本申请实施例2中,在一种实施方式中,所述风险确定单元23,具体包括:

若判断结果为所述smali文件的文件内容中不包含未指向目标组件的intent调用指令,说明android应用程序明确了启动哪个目标组件,则确定所述android应用程序不存在intent调用的风险;

若判断结果为所述smali文件的文件内容中包含未指向目标组件的intent调用指令,说明android应用程序没有明确启动哪个目标组件,则确定所述android应用程序存在intent调用的风险。

采用本申请实施例2提供的方案,当android应用程序安装包中smali文件的文件内容里包含未指向目标组件的intent调用指令时,说明android应用程序没有明确启动哪个目标组件,也就说明android应用程序存在intent调用的风险。因此,采用本申请所提供的该方法,通过判断smali文件的文件内容中是否包含未指向目标组件的intent调用指令,来确定android应用程序是否存在intent调用的风险,可以解决现有技术中如何检测android应用程序是否存在intent调用的风险的问题。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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