一种安卓应用的广播的代理处理方法和装置与流程

文档序号:17539375发布日期:2019-04-29 14:23阅读:195来源:国知局
一种安卓应用的广播的代理处理方法和装置与流程

本发明涉及互联网技术领域,具体涉及一种安卓应用的广播得到代理处理方法和装置。



背景技术:

现有技术中大多具有安全监控功能的软件均是在指定时间对安卓应用的进行静态监控,如对安卓应用进行反编译,将反编译得到的代码结果与特征库进行比对,以判断安卓应用中是否存在恶意代码,该监控过程由于特征库的滞后而具有相当的判断失误率,且非动态的监控过程很容易被恶意安卓应用的开发者规避,因此,需要一种对安卓应用的动态行为过程进行监控的方案。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的安卓应用的广播得到代理处理方法和装置。

依据本发明的一个方面,提供了一种安卓应用的广播的代理处理方法,该方法包括:

获取指定安卓应用的安装包并保存至指定目录;

构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行;

对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

可选地,所述代理指定安卓应用接收和发送广播消息包括:

拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送;

创建第二广播接收器,向安卓系统注册该第二广播接收器,以该第二广播接收器作为指定安卓应用的第一广播接收器的代理广播接收器。

可选地,所述代理指定安卓应用接收和发送广播消息还包括:

通过第二广播接收器接收广播消息,判断该广播消息的消息内容是否符合第一预设条件,是则,将该广播消息发送至指定安卓应用的第一广播接收器,否则,阻止该广播消息的继续发送。

可选地,所述代理指定安卓应用接收和发送广播消息包括:

拦截指定安卓应用发送的广播消息,从该广播消息中获取消息内容和发送目标;

判断该广播消息的消息内容是否符合第二预设条件,是则,将该广播消息发送继续发送至该广播消息的发送目标;否则,阻止该广播消息的继续发送。

可选地,所述拦截指定安卓应用向安卓系统注册第一广播接收器的消息包括:

拦截指定安卓应用通过binder机制向安卓系统的activitymanagerservice服务注册第一广播接收器的消息。

可选地,在所述获取指定安卓应用的安装包并保存至指定目录之前,该方法进一步包括:通过免root方式获取安卓系统权限。

可选地,所述通过免root方式获取安卓系统权限包括:

获取补丁包;

通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限;

其中,所述补丁包中包括:所述将指定安卓应用的安装包保存至指定目录的步骤,所述构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行的步骤,以及,所述对指定安卓应用在运行过程中的行为进行监控的步骤的执行文件。

可选地,所述通过安装所述补丁包对特定系统漏洞进行修复,获取安卓系统权限包括:

以所述补丁包替换特定系统应用,实现安卓系统对所述补丁包中的执行文件的加载,使得所述补丁包中的执行文件获取安卓系统权限。

可选地,所述获取指定安卓应用的安装包并保存至指定目录包括:

当指定安卓应用是已安装应用时,从安卓系统的应用安装目录中查找指定安卓应用的安装包,将该安装包复制至指定目录,卸载指定安卓应用。

可选地,所述获取指定安卓应用的安装包并保存至指定目录包括:

当指定安卓应用是正在进行安装的应用时,通过注册默认安装器拦截指定安卓应用的安装广播信息,从该安装广播信息中获取指定安卓应用的安装包,将该安装包存放至指定目录。

可选地,所述构造指定安卓应用运行所需要的沙箱包括:

解析指定目录下的指定安卓应用的安装包,获取指定安卓应用的相关信息;

构造指定安卓应用运行所需的资源环境,以在指定安卓应用运行时调取相应的资源;

构造类加载器,以加载指定安卓应用的执行文件中的相应类文件;

构造主线程,以使该主线程执行指定安卓应用中的各组件的启动操作;

为指定安卓应用中的各组件分别构造一个加载安卓应用安装包对象。

可选地,构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行包括:

解析指定目录下的指定安卓应用的安装包,生成该指定安卓应用的镜像安装包;

在该镜像安装包的执行文件中注入指示调用钩子函数的代码;

修改该镜像安装包的配置文件的配置参数,用于加载指定安卓应用;

在安卓系统中安装并运行该镜像安装包;

其中,所述钩子函数用于对指定安卓应用的行为进行监控。

依据本发明的另一个方面,提供了一种安卓应用的广播的代理处理装置,其中,该装置包括:

获取单元,适于获取指定安卓应用的安装包并保存至指定目录;

构造单元,适于构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行;

监控单元,适于对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

可选地,所述监控单元,适于拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送;创建第二广播接收器,向安卓系统注册该第二广播接收器,以该第二广播接收器作为指定安卓应用的第一广播接收器的代理广播接收器。

可选地,所述监控单元,进一步适于通过第二广播接收器接收广播消息,判断该广播消息的消息内容是否符合第一预设条件,是则,将该广播消息发送至指定安卓应用的第一广播接收器,否则,阻止该广播消息的继续发送。

可选地,所述监控单元,适于拦截指定安卓应用发送的广播消息,从该广播消息中获取消息内容和发送目标;判断该广播消息的消息内容是否符合第二预设条件,是则,将该广播消息发送继续发送至该广播消息的发送目标;否则,阻止该广播消息的继续发送。

可选地,所述监控单元,适于拦截指定安卓应用通过binder机制向安卓系统的activitymanagerservice服务注册第一广播接收器的消息。

可选地,系统权限获取单元,适于在所述获取单元执行获取指定安卓应用的安装包并保存至指定目录的步骤之前,通过免root方式获取安卓系统权限。

可选地,所述系统权限获取单元,适于获取补丁包,通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限;

其中,所述获取单元、所述构造单元以及所述监控单元通过调用所述补丁包中的执行文件执行相应的步骤。

可选地,所述系统权限获取单元,适于以所述补丁包替换特定系统应用,实现安卓系统对所述补丁包中的执行文件的加载,使得所述补丁包中的执行文件获取安卓系统权限。

可选地,所述获取单元,适于当指定安卓应用是已安装应用时,从安卓系统的应用安装目录中查找指定安卓应用的安装包,将该安装包复制至指定目录,卸载指定安卓应用。

可选地,所述获取单元,适于当指定安卓应用是正在进行安装的应用时,通过注册默认安装器拦截指定安卓应用的安装广播信息,从该安装广播信息中获取指定安卓应用的安装包,将该安装包存放至指定目录。

可选地,所述构造单元,适于解析指定目录下的指定安卓应用的安装包,获取指定安卓应用的相关信息;构造指定安卓应用运行所需的资源环境,以在指定安卓应用运行时调取相应的资源;构造类加载器,以加载指定安卓应用的执行文件中的相应类文件;构造主线程,以使该主线程执行指定安卓应用中的各组件的启动操作;为指定安卓应用中的各组件分别构造一个加载安卓应用安装包对象。

可选地,所述构造单元,适于解析指定目录下的指定安卓应用的安装包,生成该指定安卓应用的镜像安装包;在该镜像安装包的执行文件中注入指示调用钩子函数的代码;修改该镜像安装包的配置文件的配置参数,用于加载指定安卓应用;在安卓系统中安装并运行该镜像安装包;

其中,所述钩子函数用于对指定安卓应用的行为进行监控。

有上述可知,根据本发明的技术方案,将指定安卓应用放入沙箱中运行,通过沙箱为指定安卓应用提供一个封闭的运行环境,以实现对指定安卓应用在运行过程中的行为进行监控,利用沙箱代理指定安卓应用接收和发送广播消息,进而实现对指定安卓应用的行为的管理控制。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的一种安卓应用的广播的代理处理方法的流程图;

图2示出了根据本发明一个实施例的一种安卓应用的广播的代理处理装置的示意图;

图3示出了根据本发明另一个实施例的一种安卓应用的广播的代理处理装置的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的一种安卓应用的广播的代理处理方法的流程图,如图1所示,该方法包括:

步骤s110,获取指定安卓应用的安装包并保存至指定目录。

步骤s120,构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行。

步骤s130,对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

可见,图1所示的方法将指定安卓应用放入沙箱中运行,通过沙箱为指定安卓应用提供一个封闭的运行环境,以实现对指定安卓应用在运行过程中的行为进行监控,利用沙箱代理指定安卓应用接收和发送广播消息,进而实现对指定安卓应用的行为的管理控制。

在安卓系统中,广播(broadcast)是广泛运用的在安卓应用之间传输信息的机制,而广播接收器(broadcastreceiver)是对发送出来的广播消息进行过滤接收并响应的一类组件,发送广播一方将要发送的信息和用于过滤的信息(如action、category)装入一个intent对象,然后通过调用context.sendbroadcast()、sendorderbroadcast()或sendstickybroadcast()方法,把intent对象以广播方式发送出去,则所有已注册的广播接收器会检查注册时的intentfilter是否与发送的intent相匹配,若匹配就会调用broadcastreceiver的onreceive()方法接收广播。由上述内容可知,安卓应用在向安卓系统注册广播接收器之后,才能够接收到其他组件、安卓应用或安卓系统发送的广播消息。

基于此原理,在本发明的一个实施例中,由于运行在沙箱中的指定安卓应用的输入和输出均需经过沙箱的接口,本实施例利用沙箱对指定安卓应用的输入和输出进行管理控制,即图1所示方法的步骤s130中代理指定安卓应用接收和发送广播消息包括:拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送;创建第二广播接收器,向安卓系统注册该第二广播接收器,以该第二广播接收器作为指定安卓应用的第一广播接收器的代理广播接收器。其中,所述拦截指定安卓应用向安卓系统注册第一广播接收器的消息的具体方式可以是:拦截指定安卓应用通过binder机制向安卓系统的activitymanagerservice服务注册第一广播接收器的消息。

本实施例从根本上阻止了指定安卓应用自身向安卓系统注册第一广播接收器的事件,向安卓系统注册第二广播接收器,该第二广播接收器不属于指定安卓应用,使得指定安卓应用自身无法接收到广播消息,而所注册的第二广播接收器可以代替指定安卓应用接收广播消息。

进一步地,在代替指定安卓应用向安卓系统注册第二广播接收器后,当其他组件、安卓应用或安卓系统发出广播消息时,通过第二广播接收器接收广播消息,判断该广播消息的消息内容是否符合第一预设条件,是则,将该广播消息发送至指定安卓应用的第一广播接收器,否则,阻止该广播消息的继续发送。例如,本方案拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送,从所拦截的消息中提取出第一广播接收器对应的第一过滤条件(intentfilter),创建第二广播接收器并向安卓系统注册该第二广播接收器,该第二广播接收器的配置信息中包含所提取出的第一过滤条件,当其他组件、安卓应用或安卓系统发出广播消息时,通过第二广播接收器接收该广播消息,先判断该广播消息是否符合第一过滤条件,如果是说明该广播消息本应当被指定安卓应用所接收,在本例中又增加了一次检测,则进一步判断该广播消息是否符合第一预设条件,如第一预设条件可以是“广播消息中描述的动作(action)是非可疑动作”或者“广播消息中描述的动作(action)与用户发生交互”,如果符合才将该广播消息发送至指定安卓应用,若非,则阻止该广播消息的继续发送。

可见,本实施例对于原本要发送给指定安卓应用的广播消息进行拦截以及检测,在明确该广播消息符合从安全、用户体验等方面考虑设置的第一预设条件时,才将该广播消息发送至指定安卓应用,实质上对于指定安卓应用与其他组件、安卓应用或安卓系统的交互过程进行了筛选,进而对指定安卓应用的行为进行了筛选,使之符合需求。

在本发明的一个实施例中,图1所示方法的步骤s130中代理指定安卓应用接收和发送广播消息包括:拦截指定安卓应用发送的广播消息,从该广播消息中获取消息内容和发送目标;判断该广播消息的消息内容是否符合第二预设条件,是则,将该广播消息发送继续发送至该广播消息的发送目标;否则,阻止该广播消息的继续发送。例如,指定安卓应用将消息内容和发送目标过滤信息装入一个intent对象中作为广播消息发出,利用沙箱拦截指定安卓应用发送的广播消息,从该广播消息中提取出消息内容,判断该消息内容是否符合第二预设条件,如果是则放行该广播消息,符合该广播消息的发送目标过滤信息的发送目标将接收此广播消息,如果否则阻止该广播消息的继续发送,阻止的方式可以是:从该广播消息中提取出发送目标过滤信息,将该发送目标过滤消息修改为过滤任何发送目标,再放行该广播消息,或者,直接终断该广播消息的发送。

可见,本实施例对于指定安卓应用发出的广播消息进行拦截以及检测,在明确该广播消息符合从安全、用户体验等方面考虑设置的第二预设条件时,才将该广播消息发送至相应的发送目标,实质上对于指定安卓应用与其他组件、安卓应用或安卓系统的交互过程进行了筛选,进而对接收指定安卓应用的广播消息安卓应用的行为进行了筛选,使之符合需求。

进一步地,也可以将指定安卓应用发送的广播消息中的发送目标过滤信息修改为不过滤某个特定的安卓应用,则放行该广播消息后所述特定的安卓应用将接收该广播消息并执行响应动作。

unix系的操作系统,以安卓系统为典型代表,广泛应用于各种移动通信终端中。安卓系统具有相对较为严格的权限管理机制,默认状态下,非系统应用的权限较低。要突破权限限制,需要将非系统应用的权限提高到最高级别,也即进行root授权。获得安卓系统权限的非系统应用即可对其他安卓应用的恶意行为进行拦截,对消耗系统资源的设置项进行修改,因此,多数情况下,市面上的安全软件需要在已经获得root授权的安卓移动终端上工作,才能达到其最优效果。但是,一般用户并不掌握较高的专业知识,未必能对其终端进行root授权,即使进行了root授权,在为安全软件开放更高权限的同时,也给了恶意程序以可乘之机。更为矛盾的是,在非root条件下,一部分恶意程序能工作,而传统的安全监控软件却会失去绝对优势。因此,在非root条件下解决对安卓系统中的安卓应用的安全监控需求,是业内一直以来的努力方向。

为此,在本发明的一个实施例中,在步骤s110获取指定安卓应用的安装包并保存至指定目录之前,该方法进一步包括:通过免root方式获取安卓系统权限。可见,为了对安卓系统上的系统应用以及第三方应用均能实现监控,图1所示的方法在将指定安卓应用放入沙箱运行、对指定安卓应用在运行过程中的行为进行监控之前,先要获取安卓系统权限,即获取安卓系统中的system文件夹的操作权限;现有技术中root方式是获取系统目录操作权限的最基本条件,然而,与现有技术不同的是,本方案不通过root方式获取系统目录操作权限,可以在那些无法root或者用户不愿意root的安卓设备上实施对安卓应用接收信息的事件的监控,不修改系统,无需对安卓设备进行刷机,不影响安卓设备的质保和升级,符合用户需求。

具体地,在本发明的一个实施例中,上述通过免root方式获取安卓系统权限的方案是:获取补丁包;通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限。本实施例通过为特定系统漏洞进行修复,借修复系统漏洞之机引入补丁包,将补丁包加载到安卓系统中,成为系统应用的一部分,以获取安卓系统权限。其中提到的特定系统漏洞是指:现有的安卓系统目前存在的系统漏洞。

上述通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限包括:在加载补丁包修复特定系统漏洞的过程中,以所述补丁包替换特定系统应用,实现安卓系统对所述补丁包中的执行文件的加载,使得所述补丁包中的执行文件获取安卓系统权限。在补丁包中的执行文件获取到安卓系统权限之后,可以对安卓系统中的system文件夹进行操作,即可以执行后续步骤s110-s130将指定安卓应用的安装包保存至指定目录、构造指定安卓应用运行所需要的沙箱并使得指定安卓应用在该沙箱中运行、对指定安卓应用的行为进行监控的过程;其中,所述补丁包的执行文件中包含指示执行上述步骤s110-s130的代码,则通过调用所述补丁包中的相应执行文件执行上述步骤s110-s130,步骤s110-s130的执行逻辑在上文中已有详细的描述。

以一个具体的例子来说明该实施例的实施过程:本例中特定系统漏洞为安卓系统中的masterkey漏洞,利用该漏洞可以在不修改签名的情况下修改安卓系统代码。基于此系统原生漏洞,本方案对该系统漏洞加以利用,一方面修复了该漏洞,另一方面利用该漏洞的修复过程获取了安卓系统权限,一举多得,符合实际需求,保障用户使用安卓设备的信息安全。具体地,本方案在检查到安卓系统中的materkey漏洞后将通知用户对该漏洞进行修复,修复过程中需要获取用于修复该漏洞的补丁包,安装该补丁包,以该补丁包应用替换安卓系统原有的系统应用settingstorage,或者,以该补丁包在安卓系统原有的系统应用settingstorage的基础上进行升级,由于系统应用settingstorage在安卓系统启动时即进行加载,则本方案获取的补丁包中的执行文件也在安卓系统启动时便进行加载,此时补丁包中的执行文件中的代码拥有了安卓系统最高权限,可以实现system文件访问、权限管理等操作。在获得了安卓系统权限之后,即可以执行获取指定安卓应用的安装包并保存至指定目录、构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行、对指定安卓应用在运行过程中的行为进行监控并代理指定安卓应用接收和发送广播消息的操作。

此外,本方案中修复特定系统漏洞的补丁包可以根据用户意愿随时卸载,卸载后无残留,符合用户需求。

上例中所述的特定系统漏洞masterkey漏洞以及特定系统应用settingstorage应用均为举例说明,可以根据实际需求进行选择,在此不做限制。

本发明在步骤s110中获取指定安卓应用的安装包并保存至指定目录,其中所称的指定目录,是指本发明处于文件组织、管理效率的考虑而为这些需要构建沙箱环境而提供的自定义默认目录,所有通过本方案在沙箱中运行的安卓应用的安装包,均可被移动或复制保存到该指定目录中,进一步还可以对其进行加密或隐藏,以确保其安全性;需要指出的是,这里的指定目录,还可以是安卓系统中已经存在的目录,既可以是单个目录,也可以是多个目录,概括而言,是为本发明所采用的用于存放由本方案构建沙箱环境的目标安卓应用的安装包的目录。

在本发明的一个实施例中,步骤s110中获取指定安卓应用的安装包并保存至指定目录包括:

方式一,当指定安卓应用是已安装应用时,从安卓系统的应用安装目录中查找指定安卓应用的安装包,将该安装包复制至指定目录,卸载指定安卓应用。

例如,众所周知地,安卓系统中,安卓应用的安装会涉及对如下目录的操作:data/app,安卓应用安装目录,安装时安卓系统先把安卓应用的安装包(androidpackage,apk)复制到此data/app目录;data/dalvik-cache,将apk解压后的代码文件(.dex文件)安装到该目录下;data/data,用于建立并存放安卓应用所需的资源数据。基于上述原理可知,安卓应用的apk文件即为其安装包,在data/app目录中可以找到该安装包。因此,对于已安装的指定安卓应用而言,可以从data/app目录中复制相应的apk文件到指定目录中,然后卸载该指定安卓应用,使得后续指定安卓应用在沙箱中运行而不在沙箱外运行,避免发生冲突。

方式二,当指定安卓应用是正在进行安装的应用时,通过注册默认安装器拦截指定安卓应用的安装广播信息,从该安装广播信息中获取指定安卓应用的安装包,将该安装包存放至指定目录。

例如,对于一个准备或正在进行安装的安卓应用而言,本发明可以通过将自身注册为默认安装器的形式,获取该安卓应用的安装广播信息,从该安装广播信息中获取该安卓应用的安装包所在位置,从该位置获取该安卓应用的安装包,将该安卓应用的安装包移动存放到指定目录。

在本发明的一个实施例中,步骤s120中构造指定安卓应用运行所需要的沙箱包括:解析指定目录下的指定安卓应用的安装包,获取指定安卓应用的相关信息;构造指定安卓应用运行所需的资源环境,以在指定安卓应用运行时调取相应的资源;构造类加载器,以加载指定安卓应用的执行文件中的相应类文件;构造主线程,以使该主线程执行指定安卓应用中的各组件的启动操作;为指定安卓应用中的各组件分别构造一个加载安卓应用安装包对象。

例如,步骤s120的具体执行过程可以是:

首先,解析指定目录下的指定安卓应用的安装包,获取指定安装包中包含的各组件,其中,安卓应用的组件分为四种类型,这四种类型分别为:活动(activity)组件、广播接收者(broadcastreceiver)组件、服务service组件和contentprovider组件。不是所有的安卓应用都必须包含所有这四种类型的组件,有的安卓应用可能由上述一种组件或多种组件组建。各组件都需要注册才能使用,即每一个组件都需要在安卓应用的安装包的配置文件androidmanifest.xml中进行配置。因此,指定安卓应用的安装包的配置文件androidmanifest.xml中有列出指定安卓应用所包含的所有组件。由此可知,本实施例可通过读取指定安卓应用的安装包中的androidmanifest.xml文件,来获取指定安卓应用的安装包中所包含的所有组件。这里需要说明的是:安卓系统中的应用程序管理服务(packagemanagerservice,pms)安装安卓应用的过程实质上就是解析安卓应用的安装包中的配置文件androidmanifest.xml的过程,并从里面得到安卓应用的相关信息,如得到安卓应用的activity组件、service组件、broadcastreceiver组件和contentprovider组件等信息,有了这些信息后,通过活动管理服务(activitymanagerservice,ams)就可以在安卓系统中正常地运行该应用程序了,与上述安卓系统安装安卓应用的过程类似,本方案也要先通过解析指定安卓应用的安装包来获取指定安卓应用的相关信息,具体地,可采用反射机制来获取指定安卓应用的安装包中包含的各组件;其中,本实施例中所采用的反射机制可以为java反射机制,java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象的方法的功能即为java语言的反射机制。不同语言都有其相对应的反射机制,例如,c语言和c++语言均有其对应的反射机制。

其次,指定安卓应用在被加载运行时所采用的上下文是沙箱的上下文,因此,本方案所构造的沙箱中不仅要能加载指定安卓应用中的各组件,还需构建指定安卓应用运行所需要的环境。

众所周知地,安卓应用在运行的过程中,是通过一个称为assetmanager资源管理器来读取打包在安卓应用的安装包里面的资源文件的;安卓应用的每一个activity组件都关联一个contextlmpl对象,这个contextlmpl对象就是用来描述activity组件的运行上下文环境的;调用这个contextimpl对象的成员函数init来执行初始化activity组件运行上下文环境的工作,其中就包括创建用来访问安卓应用资源的resources对象和assetmanager对象的工作。其中,contextimpl.init函数就定义在文件frameworks/base/core/java/android/app/contextimpl.java中;contextimpl.init函数中的参数packageinfo指向的是一个loadedapk对象,这个loadedapk对象描述的是当前正在启动组件所属的apk;用来访问应用程序资源的resources对象是通过调用参数packageinfo所指向的是一个loadedapk对象的成员函数getresources来创建的。由此可知,为了创建resources对象,以提取或访问安卓应用资源,本实施例还需分别为应用中的各组件构建一个loadedapk对象。

可见,本实施例需要为指定安卓应用构造其运行所需的资源环境,以在启动各所述组件时调取相应的资源。具体的,可采用如下方式实现:对资源resources类的构造函数中的成员变量massets进行修改,以在启动各所述组件时通过所述massets来调取相应的资源;和/或对资源管理器assetmanager中的assetpath函数进行修改,修改后的所述assetpath函数指向所述安卓应用的安装包中的资源文件,以在启动各所述组件时通过所述assetmanager调取所述assetpath函数来获取所述资源文件中的对应资源。其中,resources类的构造函数定义在文件frameworks/base/core/java/android/content/res/resources.java中。因为resources类的构造函数将参数assets所指向的一个assetmanager对象保存在成员变量massets中,即massets=assets,使得resources类的构造函数可以通过massets来访问应用程序的资源。因此,本实施例可通过对资源类的构造函数中的成员变量massets进行修改,来实现通过massets调取应用程序所需的资源。其中,上述实现方式可采用反射机制来实现。当然,本实施例还可对资源管理器assetmanager中的assetpath函数进行修改,如通过assetmanager对象的成员函数addassetpath来添加指定的应用程序资源文件路径(如:路径为/system/app/music.apk)到assetpath函数中。由于addassetpath是隐藏api我们无法直接调用,所以只能通过反射机制来实现。

再者,本实施例还需要为指定安卓应用构造类加载器,以加载各所述组件中的相应加载类。具体的,所述构造类加载器,可采用如下方式实现:将指定安卓应用的路径添加到类加载器中的路径列表pathlist中,构造根据所述应用程序路径查找加载类的类加载器;和/或,对类加载器中的mparent成员进行修改,构造首先用parent找加载类的类加载器。构造首先用parent找加载类的类加载器的目的是:系统在找一个加载类的时候,首先调的是findloadedclass()函数,紧接着就会去调用mparentfindclass()函数。如果本实施例直接将classloader构造为首先用parent找加载类的类加载器,这样系统在找这个类的时候,就直接调用mparentfindclass()函数去找了,省去了调用findloadedclass()函数找类的步骤。

接着,由于一个安卓应用的运行只有一个主进程activitythread,activitythread对象描述的是当前正在运行的安卓应用进程。因此,本实施例正在沙箱中需构造出指定安卓应用的activitythread,以使所述activitythread执行指定安卓应用中的各组件的启动操作。

最后,本步骤分别为各所述组件构造一个加载指定安卓应用的安装包loadedapk对象。具体的,可采用如下方式实现:通过反射机制反射activitythread里的packageinfo,以分别为各所述组件构造一个加载指定安卓应用的安装包loadedapk对象。

此外,若加载的所述组件为内容提供者contentprovider组件,则通过反射机制调用所述contentprovider组件。

由上述例子可知,本实施例提供的技术方案通过构造指定安卓应用运行所需的运行环境,以为应用程序提供同安装后的运行环境相同的沙箱环境,使得指定安卓应用在沙箱中运行,由于指定应用程序是在沙箱内部的运行环境内运行的,通过沙箱能有效的进行权限的拦截、安卓应用的行为的监控等,在一定程度上能解决因安卓系统上存在的诸多漏洞所带来的安全隐患问题。

在本发明的一个实施例中,步骤s120中构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行包括:解析指定目录下的指定安卓应用的安装包,生成该指定安卓应用的镜像安装包;在该镜像安装包的执行文件中注入指示调用钩子函数的代码;修改该镜像安装包的配置文件的配置参数,用于加载指定安卓应用;在安卓系统中安装并运行该镜像安装包;其中,所述钩子函数用于对指定安卓应用的行为进行监控。

众所周知,指定安卓应用的安装包为压缩文件,一种方式中,可以将指定安卓应用的安装包解压至一个临时工作目录以完成解压工作,解压后,即可对指定安卓应用的安装包中的各个文件进行解析;另一种方式中,也可以在内存中直接解析指定安卓应用的安装包。无论采取哪种方式对指定安卓应用的安装包进行解析,目的是为了获取相关参数和资源,以配置生成指定安卓应用的镜像安装包,该镜像可以是硬盘镜像也可以是内存镜像。由于指定安卓应用的安装包的构成文件中包含执行文件classes.dex,相应地,在指定安卓应用的镜像安装包中也包含执行文件classes.dex,本方案通过在镜像安装包中的执行文件中classes.dex注入指示调用钩子程序的代码;且指定安卓应用的安装包的构成文件中包含配置文件androidmanifest.xml,相应地,在指定安卓应用的镜像安装包中也包含配置文件androidmanifest.xml,对该配置文件进行修改,使得修改后的镜像安装包适于加载指定安卓应用,具体地,本方案利用java反射调用机制将loadapk与activitythread涉及的运行时配置信息用反射替换成指定目录中的指定安卓应用的安装包的类加载器classloader与资源,实现镜像安装包对应的应用在运行时对指定安卓应用的加载。至此,本实施例所构建的指定安装应用的镜像安装包对应的应用在运行时,先加载上述指示调用钩子程序的执行文件,再加载指定安卓应用,能够实现利用钩子程序对指定安卓应用在运行中发生的行为的监控捕获,具体地,对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

本实施例中,指定安卓应用被加载到所构建的指定安卓应用的镜像安装包对应的应用的内部环境中去运行,该指定安卓应用的镜像安装包对应的应用的内部环境实质上相当于是沙箱环境,将指定安卓应用在安卓系统中隔离开来,并通过在该沙箱环境中设置钩子程序来实现对指定安卓应用的行为的监控。

图2示出了根据本发明一个实施例的一种安卓应用的广播的代理处理装置的示意图。如图2所示,该安卓应用的广播的代理处理装置200包括:

获取单元210,适于获取指定安卓应用的安装包并保存至指定目录。

构造单元220,适于构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行。

监控单元230,适于对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

可见,图2所示的装置将指定安卓应用放入沙箱中运行,通过沙箱为指定安卓应用提供一个封闭的运行环境,以实现对指定安卓应用在运行过程中的行为进行监控,利用沙箱代理指定安卓应用接收和发送广播消息,进而实现对指定安卓应用的行为的管理控制。

在本发明的一个实施例中,所述监控单元230,适于拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送;创建第二广播接收器,向安卓系统注册该第二广播接收器,以该第二广播接收器作为指定安卓应用的第一广播接收器的代理广播接收器。

进一步地,所述监控单元230,进一步适于通过第二广播接收器接收广播消息,判断该广播消息的消息内容是否符合第一预设条件,是则,将该广播消息发送至指定安卓应用的第一广播接收器,否则,阻止该广播消息的继续发送。

具体地,所述监控单元230,适于拦截指定安卓应用通过binder机制向安卓系统的activitymanagerservice服务注册第一广播接收器的消息。

在本发明的一个实施例中,所述监控单元230,适于拦截指定安卓应用发送的广播消息,从该广播消息中获取消息内容和发送目标;判断该广播消息的消息内容是否符合第二预设条件,是则,将该广播消息发送继续发送至该广播消息的发送目标;否则,阻止该广播消息的继续发送。

在本发明的一个实施例中,所述获取单元210,适于当指定安卓应用是已安装应用时,从安卓系统的应用安装目录中查找指定安卓应用的安装包,将该安装包复制至指定目录,卸载指定安卓应用。

在本发明的一个实施例中,所述获取单元210,适于当指定安卓应用是正在进行安装的应用时,通过注册默认安装器拦截指定安卓应用的安装广播信息,从该安装广播信息中获取指定安卓应用的安装包,将该安装包存放至指定目录。

在本发明的一个实施例中,所述构造单元220,适于解析指定目录下的指定安卓应用的安装包,获取指定安卓应用的相关信息;构造指定安卓应用运行所需的资源环境,以在指定安卓应用运行时调取相应的资源;构造类加载器,以加载指定安卓应用的执行文件中的相应类文件;构造主线程,以使该主线程执行指定安卓应用中的各组件的启动操作;为指定安卓应用中的各组件分别构造一个加载安卓应用安装包对象。

在本发明的一个实施例中,所述构造单元220,适于解析指定目录下的指定安卓应用的安装包,生成该指定安卓应用的镜像安装包;在该镜像安装包的执行文件中注入指示调用钩子函数的代码;修改该镜像安装包的配置文件的配置参数,用于加载指定安卓应用;在安卓系统中安装并运行该镜像安装包;

其中,所述钩子函数用于对指定安卓应用的行为进行监控。

图3示出了根据本发明另一个实施例的一种安卓应用的广播的代理处理装置的示意图。如图3所示,该安卓应用的广播的代理处理装置300包括:获取单元310,构造单元320、监控单元330和系统权限获取单元340。

其中获取单元310,构造单元320、监控单元330和图2所示的获取单元210,构造单元220、监控单元230对应相同的功能,相同的部分在此不再赘述。

系统权限获取单元340,适于在所述获取单元执行获取指定安卓应用的安装包并保存至指定目录的步骤之前,通过免root方式获取安卓系统权限。

具体地,所述系统权限获取单元340,适于获取补丁包,通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限。

其中,所述获取单元310、所述构造单元320以及所述监控单元330通过调用所述补丁包中的执行文件执行相应的步骤。

进一步地,所述系统权限获取单元340,适于以所述补丁包替换特定系统应用,实现安卓系统对所述补丁包中的执行文件的加载,使得所述补丁包中的执行文件获取安卓系统权限。

需要说明的是,图2-图3所示装置的各实施例与图1所示方法的各实施例对应相同,上文已有详细说明,在此不再赘述。

综上所述,在本发明的技术方案中,通过免root方式获取安卓系统权限,在获取到安卓系统权限后,构造指定安卓应用运行所需的沙箱,使得指定安卓应用在沙箱中运行,利用沙箱对指定安卓应用在运行过程中的行为进行监控,以代理指定安卓应用进行广播消息的接收和发送。依据该方案,通过对广播消息的筛选对指定安卓应用的进行管理,对安卓用户进行保护,并且,通过加载补丁包而非免root方式获取安卓系统权限,不对安卓系统进行不可逆修改,不影响安卓系统的运行,不影响相应安卓设备的升级和质保,在需要时可以对获取安卓系统权限的补丁包进行卸载,过程简单、可逆、无危害,符合任何程度的用户需求。

需要说明的是:

在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的安卓应用的广播的代理处理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了a1、一种安卓应用的广播的代理处理方法,其中,该方法包括:

获取指定安卓应用的安装包并保存至指定目录;

构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行;

对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

a2、如a1所述的方法,其中,所述代理指定安卓应用接收和发送广播消息包括:

拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送;

创建第二广播接收器,向安卓系统注册该第二广播接收器,以该第二广播接收器作为指定安卓应用的第一广播接收器的代理广播接收器。

a3、如a2所述的方法,其中,所述代理指定安卓应用接收和发送广播消息还包括:

通过第二广播接收器接收广播消息,判断该广播消息的消息内容是否符合第一预设条件,是则,将该广播消息发送至指定安卓应用的第一广播接收器,否则,阻止该广播消息的继续发送。

a4、如a1所述的方法,其中,所述代理指定安卓应用接收和发送广播消息包括:

拦截指定安卓应用发送的广播消息,从该广播消息中获取消息内容和发送目标;

判断该广播消息的消息内容是否符合第二预设条件,是则,将该广播消息发送继续发送至该广播消息的发送目标;否则,阻止该广播消息的继续发送。

a5、如a2所述的方法,其中,所述拦截指定安卓应用向安卓系统注册第一广播接收器的消息包括:

拦截指定安卓应用通过binder机制向安卓系统的activitymanagerservice服务注册第一广播接收器的消息。

a6、如a1所述的方法,在所述获取指定安卓应用的安装包并保存至指定目录之前,该方法进一步包括:

通过免root方式获取安卓系统权限。

a7、如a6所述的方法,其中,所述通过免root方式获取安卓系统权限包括:

获取补丁包;

通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限;

其中,所述补丁包中包括:所述将指定安卓应用的安装包保存至指定目录的步骤,所述构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行的步骤,以及,所述对指定安卓应用在运行过程中的行为进行监控的步骤的执行文件。

a8、如a7所述的方法,其中,所述通过安装所述补丁包对特定系统漏洞进行修复,获取安卓系统权限包括:

以所述补丁包替换特定系统应用,实现安卓系统对所述补丁包中的执行文件的加载,使得所述补丁包中的执行文件获取安卓系统权限。

a9、如a1所述的方法,其中,所述获取指定安卓应用的安装包并保存至指定目录包括:

当指定安卓应用是已安装应用时,从安卓系统的应用安装目录中查找指定安卓应用的安装包,将该安装包复制至指定目录,卸载指定安卓应用。

a10、如a1所述的方法,其中,所述获取指定安卓应用的安装包并保存至指定目录包括:

当指定安卓应用是正在进行安装的应用时,通过注册默认安装器拦截指定安卓应用的安装广播信息,从该安装广播信息中获取指定安卓应用的安装包,将该安装包存放至指定目录。

a11、如a1所述的方法,其中,所述构造指定安卓应用运行所需要的沙箱包括:

解析指定目录下的指定安卓应用的安装包,获取指定安卓应用的相关信息;

构造指定安卓应用运行所需的资源环境,以在指定安卓应用运行时调取相应的资源;

构造类加载器,以加载指定安卓应用的执行文件中的相应类文件;

构造主线程,以使该主线程执行指定安卓应用中的各组件的启动操作;

为指定安卓应用中的各组件分别构造一个加载安卓应用安装包对象。

a12、如a1所述的方法,其中,构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行包括:

解析指定目录下的指定安卓应用的安装包,生成该指定安卓应用的镜像安装包;

在该镜像安装包的执行文件中注入指示调用钩子函数的代码;

修改该镜像安装包的配置文件的配置参数,用于加载指定安卓应用;

在安卓系统中安装并运行该镜像安装包;

其中,所述钩子函数用于对指定安卓应用的行为进行监控。

本发明还公开了b13、一种安卓应用的广播的代理处理装置,其中,该装置包括:

获取单元,适于获取指定安卓应用的安装包并保存至指定目录;

构造单元,适于构造指定安卓应用运行所需要的沙箱,使得指定安卓应用在该沙箱中运行;

监控单元,适于对指定安卓应用在运行过程中的行为进行监控,代理指定安卓应用接收和发送广播消息。

b14、如b13所述的装置,其中,

所述监控单元,适于拦截指定安卓应用向安卓系统注册第一广播接收器的消息,阻止该消息的继续发送;创建第二广播接收器,向安卓系统注册该第二广播接收器,以该第二广播接收器作为指定安卓应用的第一广播接收器的代理广播接收器。

b15、如b14所述的装置,其中,

所述监控单元,进一步适于通过第二广播接收器接收广播消息,判断该广播消息的消息内容是否符合第一预设条件,是则,将该广播消息发送至指定安卓应用的第一广播接收器,否则,阻止该广播消息的继续发送。

b16、如b13所述的装置,其中,

所述监控单元,适于拦截指定安卓应用发送的广播消息,从该广播消息中获取消息内容和发送目标;判断该广播消息的消息内容是否符合第二预设条件,是则,将该广播消息发送继续发送至该广播消息的发送目标;否则,阻止该广播消息的继续发送。

b17、如b14所述的装置,其中,

所述监控单元,适于拦截指定安卓应用通过binder机制向安卓系统的activitymanagerservice服务注册第一广播接收器的消息。

b18、如b13所述的装置,该装置进一步包括:

系统权限获取单元,适于在所述获取单元执行获取指定安卓应用的安装包并保存至指定目录的步骤之前,通过免root方式获取安卓系统权限。

b19、如b18所述的装置,其中,

所述系统权限获取单元,适于获取补丁包,通过加载所述补丁包对特定系统漏洞进行修复,获取安卓系统权限;

其中,所述获取单元、所述构造单元以及所述监控单元通过调用所述补丁包中的执行文件执行相应的步骤。

b20、如b19所述的装置,其中,

所述系统权限获取单元,适于以所述补丁包替换特定系统应用,实现安卓系统对所述补丁包中的执行文件的加载,使得所述补丁包中的执行文件获取安卓系统权限。

b21、如b13所述的装置,其中,

所述获取单元,适于当指定安卓应用是已安装应用时,从安卓系统的应用安装目录中查找指定安卓应用的安装包,将该安装包复制至指定目录,卸载指定安卓应用。

b22、如b13所述的装置,其中,

所述获取单元,适于当指定安卓应用是正在进行安装的应用时,通过注册默认安装器拦截指定安卓应用的安装广播信息,从该安装广播信息中获取指定安卓应用的安装包,将该安装包存放至指定目录。

b23、如b13所述的装置,其中,

所述构造单元,适于解析指定目录下的指定安卓应用的安装包,获取指定安卓应用的相关信息;构造指定安卓应用运行所需的资源环境,以在指定安卓应用运行时调取相应的资源;构造类加载器,以加载指定安卓应用的执行文件中的相应类文件;构造主线程,以使该主线程执行指定安卓应用中的各组件的启动操作;为指定安卓应用中的各组件分别构造一个加载安卓应用安装包对象。

b24、如b13所述的装置,其中,

所述构造单元,适于解析指定目录下的指定安卓应用的安装包,生成该指定安卓应用的镜像安装包;在该镜像安装包的执行文件中注入指示调用钩子函数的代码;修改该镜像安装包的配置文件的配置参数,用于加载指定安卓应用;在安卓系统中安装并运行该镜像安装包;

其中,所述钩子函数用于对指定安卓应用的行为进行监控。

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