Android后台监听实现机制浅析_蔡罗成
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全与通信保密 · 2010.6
39
0 引言
Android 由于具有较好的技术架构设计及其开源特性,加上Google 的强大号召力,正被越来越多的智能手机采用为软件基础平台。
但在其平台上如何进行安全软件的设计开发尚未有针对性的系统分析。
文中以理论结合实践的方式,从框架体系分析到对系统主要基础行为的具体实践,针对性地分析在Android 上进行安全增强的可行性,并给出实现技术路线,具有较强的实践指导意义。
1 问题的提出
Google 于2007年11月5日发布开源手机操作系统Android,该平台由操作系统、中间件、用户界面和应用软件组成,提供从操作系统到应用程序的完整软件解决方案。
Android 可免费使用,同时由于其开源性,可允许各厂家自行定制差异化,形成自己的竞争优势,因此对手机制造商具有强大的吸引力。
目前多个知名手机制造商已推出系列Android 手机,并获得了良好的市场反馈,多家制造商已明
确宣布将增加Android 手机在未来生产计划中的比例。
随着市场份额的上升,该平台的安全攻击及风险逐渐增加,安全防护问题也随之而来,需加以重视。
同时由于Android 平台的开源特性,相比其他手机操作系统,Android 平台的安全性更能得到保证,分析研究该平台上的安全防护实现技术具有良好的现实意义及广阔的市场预期。
不同于原来的专有手机,Android 智能手机拥有统一的软件架构设计及系统接口,具有良好的开放性,可运行于多个厂家、多个型号的手机上。
正是由于操作系统的统一性及开放性,同一项功能,可由多个程序予以实现,比如常用的拨号功能,可通过Android 自带的拨号程序进行,也可自编程序,调用Framework 提供的相关类及方法加以实现。
因此,Android 上的安全防护技术不能采用对某款手机的某个功能进行针对性保护的方式,而必须转变思路,分析所有这些实现方式的根本所在—Android 平台的相关机制及原理,不是考虑一个软件、一个功能之安全,而是从系统级考虑、设计安全防护软件,以后台监听系统消息的透明化处理方式,无论有多少个程序可实现拨打电话功能,只需监听系统的通话服务状态,即可做到对所有拨打电话程序的通
话过滤处理,以不变应万变,把握安全防范于系统之内。
同时,透明化的安全处理方式,使得安全软件的用户体验得以大大提升。
对用户而言,表面上“这里的黎明静悄悄”,
蔡罗成
(三零瑞通移动通信有限公司规划研究部,四川 成都 610041)
[摘 要] 在深入研究Android Framework 所提供架构的基础上,提出“安全软件透明化”的概念。
以后台监听系统行为、对需要进行安全处理的事件进行系统级截获的方式实现了Android 平台的安全增强。
并对Android 平台上主要的系统行为逐一进行探索性研究,分别分析对各系统行为进行安全增强的可行性,指出实现思路,具有较为普遍的理论及实践指导意义。
[关键词] Android;BroadcastReceiver;ContentObserver;后台;安全;透明
[中图分类号] TN929.5 [文献标识码] A [文章编号] 1009-8054(2010) 06-0039-03
Discussion on Mechanism for Backstage Monitors of Android
CAI Luo-cheng
(Plan Research Department of RTOM Mobile Communication Co.,Ltd.,Chengdu Sichuan 610041,China)
[Abstract] This article, based on Android Framework and through study on the provided construction foundation, proposes the concept of “security-software transparence”, in which, by the backstage monitoring system behaviors, the system-level interception is carried out on the event demanding safe processing, thus realizing the safety enhancement of the Android platform. This article explores one by one the main system behaviors on Android, analyzes respectively the security enhancement feasibility of various systems behaviors, points out their implementation ideas. All these have a fairly universal theoretical and practical guiding significance.[Keywords] Android;BroadcastReceiver;ContentObserver;backstage;security;transparent
Android 后台监听实现机制浅析
收稿日期:2010-04-06
作者简介:蔡罗成,1977年生,男,工程师,研究方向:移动通信安全。
通信技术
C ommunications T echnologies
实际上安全软件与用户一起:“不是一个人在战斗”。
2 现状分析
后台监听的实现在实际应用中,常需要程序循环等待系统抑或其他应用发出一道指令,为包括安全软件后台监听模块在内的应用“擦亮明灯,指明方向”。
而这种等待,在很多的平台上,都会需要付出不小的代价。
2.1 相关平台分析
在Symbian、Windows Mobile中,应用若需要等待一个来电消息,以便实现显示归属地之类的功能时,必须让自己的应用保证可被开机启动,进行诸如消除状态栏图标、隐藏任务项等处理,达到潜伏在后台运行的效果,监控相关事件,等待转瞬即逝的出手机会。
这是一件效率较为低下的实现方式,不但白白耗费了系统资源,还留了个流氓软件的骂名,属于卖力不讨好的典型。
2.2 Android平台分析
在Android平台中,充分考虑了广泛存在的这类需求,在Framework中设计有BroadcastReceiver,该组件与Activity、Service、ContentProvider一起作为整个Framework 的主要基类。
每个Broadcast Receiver都可以接收一种或若干种Intent作为触发事件,当发生这样事件的时候,系统会负责唤醒或传递消息到该Broadcast Receiver,任其处置。
在此之前和这以后,Broadcast Receiver是否在运行都变得不重要了,极其绿色环保。
也就是说,作为Receiver,不必保持后台运行状态,甚至无需运行。
当有需要监听的消息时,该Broadcast Receiver被即时触发,进行处理。
处理完毕后该Broadcast Receiver又即退出,也无需处于运行状态。
简而言之,Broadcast Receiver的运行方式是“无需启动、按需运行”。
显然,此种机制对系统资源,尤其是手机有限的资源来说是一种极好的解决方式,属于“召之即来、挥之则去”类型。
对安全软件而言,大大提升了程序运行时的隐蔽性。
BroadcastReceiver是消息传递、响应渠道,类似于设计模式中的Observer模式,提供了高度松耦合的消息、响应模型。
借助于Broadcast-Receiver模型,可实现对系统消息、应用自定义消息的接收处理,而发送的消息被谁接收、如何处理对消息发送者而言完全未知,也不必关心。
正是由于Android的这种架构设计,使得可在不改变既有模型情况下,截获系统广播消息进行增强处理,为后台监听的实现提供了框架保证[1]。
3 监听机制
Android的Broadcast-Receiver基于注册方式,Receiver将自身的特征描述并注册在系统中。
根据注册的时机,可分为两类,文中称之为“冷热插拔”。
所谓冷插拔,就是Broadcast Receiver的相关信息写在AndroidManifest. xml配置文件中,系统会负责在相关事件发生的时候及时通知到该Broadcast Receiver。
而热插拔,顾名思义,插拔这样的事情,都是由应用自己来处理的,通常是在OnResume 事件中通过RegisterReceiver进行注册,在OnPause等事件中反注册,通过这种方式使Receiver仅在工作状态下保持对相关事件的关注。
对安全软件而言,需要对整个系统的相关事件保持实时监听,故采用第一种注册方式。
除了接收消息的一方有多种模式,发送者也有很重要的选择权。
通常,发送者有两类,一个就是系统本身,我们称之为系统Broadcast消息。
除了系统,自定义的应用也可以放出Broadcast消息,发送消息使用的接口可以是Context. sendBroadcast,抑或是Context.sendOrderedBroadcast。
前者发出的称为普通广播(Normal Broadcast),所有关注该消息的Receiver,都有机会获得并进行处理;后者放出的称作有序广播(Ordered Broadcasts),顾名思义,系统按照Receiver声明的优先级(Intent-Filter元素的Android:Priority属性中),按顺序逐次执行。
对于有序广播,可使用AbortBroadcast控制是否将该条消息传递给下个Receiver,据此可进行基于策略的控制。
如拨打电话时系统发送的正是有序广播,因此我们可对监听到的拨打电话事件进行判断,若属于非法拨号,可阻止其继续拨号。
无论发送者以何种方式广播消息,对触发接收者而言原理均没有区别。
而无论是冷插拔还是热插拔,其区别仅为何时对何事保持关注的区别,而在关注期间,其原理均一致,均需Android对注册的Receiver进行管理,将过滤后的系统消息传递至Receiver实现类中,触发其中的onReceive 函数,并将发送方传递出的Intent对象传递至该函数。
消息发送者需要发出一个Intent对象,这个Intent对象说明了他的意图,将此Intent对象传送给Android。
而Android会根据此Intent对象中的叙述,与AndroidManifest.xml所叙述的各类条件相比较,找出与此Intent叙述相匹配的组件(Receiver),然后Android将该Intent对象递交给它,作为参数传递至该Receiver中的onReceive函数[2]。
当Broadcast Receiver接收到相关的消息,即可进行诸如产生一条Notification或Toast、一次响铃/震动,抑或是启动一个Activity来进行进一步的交互和处理。
对本次研究来说,主要是在其中进行包括基于策略的行为合法性判断等处理。
Broadcast-Receiver模型如下页图1 所示。
这种Broadcast-Receiver+Intent的沟通方式让不同开发者开发的Package中的类可以轻易达成沟通。
而整个逻辑极为清晰,同时足够有用和好用,可说是一次良好的设计模
通信技术
C ommunications T echnologies
40
信息安全与通信保密 · 2010.6
41
式实际运用体验。
4 实际验证
文中主要对Android 平台上使用最为频繁的电话、短信、数据联网3种基础行为分别进行实际分析,实地验证上述分析的可操作性。
(1) 监听通话
通话分两种行为:拨打电话及接听来电,对通话的监听也需分别进行分析,如下所述:
① 监听拨打去电:拨打电话时,系统将广播“android.intent.action.NEW_OUTGOING_CALL”消息,对该消息关联Receiver 即可截获到拨打电话事件。
相关的权限为“android.permission.PROCESS_OUTGOING_CALLS”;
② 监听来电:对来电的监听稍显复杂,需对“android.intent.action.PHONE_STATE”注册Receiver,在onReceive 中通过TelephonyManager 的getCallState 方法来获取当前状态以进行相应处理。
相关的权限为“android.permission.READ_PHONE_STATE”。
(2) 监听短信
短信同样分为两种行为:发送短信及接收短信,对短信监听也需分别进行分析,如下所述:
① 监听接收短信:接收到短信时,系统将广播“android.provider.Telephony.SMS_RECEIVED”消息,对该消息关联Receiver 即可截获到接收短信事件。
相关的权限为“android.permission.RECEIVE_SMS”;
② 监听发送短信[3]
:对发送短信的监听较为复杂,目前
Android 尚无一个系统消息可对短信发送行为进行监听,较为完善的解决方法为通过ContentObserver 方式,ContentObserver 类似Broadcast Receiver 模式,监听手机上短信表数据的变化事件,将事件广播至Observer 的onChange 函数中,从而达到对发送短信行为的监听目的。
文中仅使用ContentObserver 对短信表sms/inbox 中的数据进
行监测,实际上利用ContentObserver 可对手机上的几乎所有数据变化进行监测,从而可大大扩展安全软件进行后台监听的监测范围及实现可行性,属于重点运用技术手段。
发送短信后,系统的content ://sms/中的数据将发生改变,通过继承ContentObserver 类,发送短信行为将引起数据变化从而触发该类的onChange 方法,重写该方法,在其中即可进行对发送短信的额外处理。
文中对触发的事件仅进行日志记录处理,此时不涉及权限。
(3) 监听联网
联接网络时,系统将广播“.conn.CONNECTIVITY_ CHANGE”消息,对该消息关联Receiver 即可截获到网络联接状态变化事件。
相关的权限为“android.permission.ACCESS_NETWORK_STATE”。
5 结语
文中对在Android 上进行安全软件的设计开发进行了较为系统性的分析,并对Android 平台上3种主要功能的后台监听实现进行了框架式探讨及实现,可监测各个事件触发自定义的处理过程,对各处理过程进行了基础示意性处理,给出了安全增强的技术方向,可在所有基于Android 平台的智能手机上加以应用,具有较为普遍的理论及实践指导意义。
参考文献
[1] Google Android Team. Android SDK 1.5 r2 Reference[EB/OL].
(2009-06-30)[2010-1-17]. .[2] 余志龙,陈昱勋,郑名杰,等. Android SDK 开发范例大全[M].
北京:人民邮电出版社,2009.
[3] 高焕堂. OPhone 应用开发雕龙小技[EB/OL]. (2010-03-04)
[2010-03-15]. /cmdn/bbs/viewthread.php?tid=10567.
通信技术
C ommunications T echnologies
《信息安全与通信保密》杂志启用科技期刊学术不端文献检测系统
为了提高来稿质量,杜绝学术造假,促进《信息安全与通信保密》的健康发展,从2010年1月起,本刊编辑将正式启用科技期刊学术不端文献检测系统,对所有来稿进行检查。
对于检测出有不端行为的稿件,编辑部将直接退稿。
在此,希望广大作者在撰写论文时,一定要本着实事求是的科学精神,引用他人的研究成果时务必在参考文献中列出,并在正文中相应位置进行标注。
让我们共同努力,维护学术研究的诚信,杜绝学术不端行为,促进《信息安全与通信保密》的可持续发展,为广大作者搭建一个更好、更高、更权威的学术争鸣和技术交流的平台。
《信息安全与通信保密》杂志社
2010年1月1日。