徐亮
(四川大学 电子信息学院,四川 成都 610065)
手机已经成为当今人们日常生活中不可或缺的一部分。普通手机很难满足人们的要求,随着科技的进步和人们生活质量的提高,手机不断更新换代,变得更加智能化,产生了智能手机。智能手机在越来越被大众所接受的同时,智能手机也伴生新的安全隐患。目前,手机上的应用因为手机的发展日渐丰富,移动互联网领域出现越来越多的信息安全问题,甚至已经成为新的安全威胁[1]。由此,可以看一下现有智能手机安全软件的情况,目前针对智能手机的安全软件大概分两种,一种是硬安全用以杀毒;另一种软安全用以恶意通信拦截和隐私保护,还有就是两者的功能结合体。手机的安全问题现在成为被社会各界普遍关注的热点。
Google在2007年11月5日公布了Android手机系统平台之后,Android很快进入人们的视线。因为作为移动设备综合平台它达到了真正意义上的开放性,拥有移动电话工作所需的全部软件。基于Android平台的可开发性和免费等特点,既能在Android平台上开发第三方软件,从而促进技术创新;有助于降低开发成本,方便创造特色化产品[2]。这无疑使之成为智能手机操作系统的首选。
目前手机应用中还是以电话通信和短信通信应用最为广泛,而电话骚扰与短信广告骚扰日益严重,针对此现象,人们纷纷采取了应用措施,其中,一些手机平台相继开发出了电话防火墙和短信防火墙。比如,塞班手机平台的信安易卫士,Android手机平台下的SecrityGuarder等。文中针对上述问题,设计和实现了一种基于Android手机平台的通信安防应用,基本实现了拦截骚扰电话和短信[3]。
Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
1)开放性。
2)挣脱运营商束缚。
3)丰富的硬件选择。
4)不受任何限制的开发商。
5)无缝结合的Google应用。
1)安全和隐私。
2)首先开卖Android手机的不是最大运营商。
3)运营商任能够影响Android手机。
4)同类机型用户减少。
5)过分依赖开发商缺少标准配置。
1.3.1 应用程序
Android会同一系列核心应用程序包一起发布,应用程序包包括Email客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有的应用程序都是使用JAVA语言编写的[4]。
1.3.2 应用程序框架
开发人员直接调用的API。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)[4]。同样,该应用程序重用机制也使用户可以方便的替换程序组件。
1.3.3 程序库
Android包含一些C/C++库,这些库是底层的,能被Android系统中应用程序框架的组件使用。
1.3.4 Android运行库
Android包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每个Android程序都在Dalvik虚拟机中运行,拥有独立的实例。Dalvik是基于寄存器的,可以高效运行的虚拟系统。Dalvik虚拟机执行(.dex)的 Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的“dx”工具转化成.dex格式由虚拟机执行[4]。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
1.3.5 Linux Kernel
Android的核心系统服务依赖于Linux 2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型[4]。Linux内核也同时作为硬件和软件栈之间的抽象层。
2.1.1 白名单
用户如果只想接收特定号码的短信则点击白名单选框后,进入白名单设置界面,在白名单里添加号码,则除了输入白名单的号码能够接入本机,其他号码用户被自动默认为黑名单被屏蔽,同时被保存在查看短信历史记录里面,手机不会触发短信接收的反映,在手机短信箱里也不会出现该短信。用户可以通过查看短信历史记录,对接入的被屏蔽了的短信进行查看。
2.1.2 黑名单
用户如果想屏蔽特定号码电话的短信则点击黑名单选框后,进入黑名单设置界面,在黑名单里添加号码,当其短信进入时则被屏蔽,同时被保存在短信历史记录里面,手机不会触发短信接收的反映,在手机短信箱里也不会出现该短信。用户可以通过查看拦截历史记录,对接入的被屏蔽了的短信进行查看。
2.2.1 白名单
用户如果只想接听特定号码的电话则点击白名单选框后,进入白名单设置界面,在白名单里添加号码,则除了输入白名单的号码能够接入本机,其他号码用户被自动默认为黑名单被屏蔽,同时被保存在拦截历史记录里面,同时被屏蔽的号码用户听到电话提示对方呼叫繁忙的效果,从而无法接通。用户可以通过查看拦截历史记录,对接入的被屏蔽了的电话进行查看。
2.2.2 黑名单
用户如果想屏蔽特定号码电话的接入则点击黑名单选框后,进入黑名单设置界面,在黑名单里添加号码,当其接入时则被屏蔽,同时被保存在拦截历史记录里面,同时被屏蔽的号码用户听到电话提示对方呼叫繁忙的效果,从而无法接通。用户可以通过查看拦截历史记录,对接入的被屏蔽了的电话进行查看。
通过设置开始时间和停止时间从而让应用自动在此时间断内开启,超过时间后自动关闭。
如图1所示为通信拦截系统的功能流程。
图1 功能流程框图Fig.1 Structure diagram of the function
由于Android中本身没有关于拦截来电和过滤短信的API,因此,在技术实现上需要采用了一些非常规的做法,难度相对较大。以下将介绍关于电话拦截和短信拦截技术。
主要分为C/C++与Java两层:
1)C/C++层:Rild,守护进程,电话底层驱动管理,GSM/GPRS modem,AI命令接口管理[5]。
2)JAVA层:RIL.Java文件进行电话短信服务线程通过Socket与Rild进程通信;在java的服务线程池里面有telephy的服务接口;提供处理电话的功能接口。
固有短信的收取是通过底层框架的rild,解析之后,通过发送有序的广播,对有序的广播进行中断,通过设置广播获取的最高级别的权限属性挂载程序,达到短信拦截的目的。BroadcastReceiver广播类接收系统发出的短信广播,获取短信内容过滤,使用abortBroadcast()方法中断广播避免短信到达SMS的应用。
关键代码:
Manifest.xml
public class SMSReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
abortBroadcast();}}
基于Android框架的电话服务,通过该服务可以获取到电话的大体功能,通过内部源码,提供的隐藏电话服务功能的API()函数,获取到对电话处理的内部方法调用AIDL接口ITelephy.aidl提供了endcall()方法,以此调用来拦截电话[6]。电话来电信号从底层回调会发送一个无序的来电广播和回调PhoneStateListener的接口,通过获取广播中的信息或者接口中的信息拦截电话。
关键代码:
class MyPhoneStateListener extends PhoneStateListener{
public void onCallStateChanged (int state, String incomingNumber){
switch (state) {
case
TelephonyManager.CALL_STATE_RINGING:
endCall(incomingNumber);
Log.i(“MyPhoneStateListener”, incoming Number);
break;
case
TelephonyManager.CALL_STATE_IDLE:
m_audioManager.setRingerMode (AudioManager.RINGER_MODE_NORMAL);
break;
case
TelephonyManager.CALL_STATE_OFFHOOK:
break;
default:
break;}}}
通信安防系统工作原理流程如图2所示。
图2 工作原理流程框图Fig.2 Structure diagram of the working principle
1)本应用开发后的.app应用程序。
2)用于运行此程序的基于android2.36系统的三星S5830手机。
3)用于对测试手机进行电话通信和短信发送的两部手机,号码为 15883673262,18202866062。
4.2.1 白名单测试
首先打开通信安防软件,点击打开拦截开关。然后进入白名单,输入电话号码15883673262,表示除了此号外,其他电话的通话和短信都会被拦截。
图3 打开拦截开关图Fig.3 Diagram of the open switch
图4 白名单中输入号码图Fig.4 Diagram of the inputing in the write list
接着用号码为18202866062的电话接入本机,并且发送内容为“你好”的短信,在本机通信安防软件里面分别点击查看来电历史和查看短信历史看到如下图效果。
图5 查看拦截历史图Fig.5 Diagram of the intercept history
图6 查看来电拦截历史图Fig.6 Diagram of the phone intercept history
图7 查看短信拦截历史Fig.7 Diagram of the SMS intercept history
测试成功,号码为18202866062的电话对本机进行的来电和短信都被成功拦截。
4.2.2 黑名单测试
在删除上例中白名单中输入的15883673262号码后,进入黑名单中输入电话号码15883673262,表示此号码对本机进行的通话和短信都会被拦截。
图8 黑名单选框图Fig.8 Diagram of the black list
图9 黑名单中输入号码Fig.9 Diagram of the inputing in the black list
接着用号码为15883673262的电话接入本机,并且发送内容为“你好啊”的短信,在本机通信安防软件里面分别点击查看来电历史和查看短信历史看到如图10、图11所示效果。
图10 来电拦截历史图Fig.10 Diagram of the intercept history
图11 短信拦截历史图Fig.11 Diagram of the SMS intercept history
文中详细介绍了基于Android平台的来电拦截和短信拦截的实现原理以及测试效果,可看出它能较好的实现来电拦截和短信拦截的功能。但由于研究时间有限,设计还不尽完善,来电拦截技术上还有待改进。如来电拦截,经过多次试验,其效果并没达到所期望的那么好,当有来电接入时,如果是在原号码前面加上86或者17951的前号则应用程序视为不同的电话号码处理。还有因为Android是一个开放的平台,会给许多居心不良者提供方面,利用此技术来做一些恶意拦截电话短信的软件,从而会给广大用户代码不必要的麻烦。后面还应该需要在节能方面进行改进,不使用service来维护后台工作,而使用broadcastRecever来维护后台,可以节省Android大量的电量。
同时对于日新月异发展的Android技术[7-8],希望在不久的将来google公司完善源码中电话和短信安全控制,能脱离对Android通信安防应用软件的需求。
[1]勒岩,姚尚朗.Android入门开发与实践[M].北京:人民邮件出版社,2009.
[2]傅志红,陈兴璐.深入浅出Google Android[M].北京:人民邮件出版社,2009.
[3]韩超,梁泉.Android系统原理及开发要点详解[M].北京:电子工业出版社,2009.
[4]孟小华,陈传凯.Android平台手机来电及短信防火墙关键技术研究[EB/OL].(2012).http://wenku.baidu.com/view/040 49e140b4e767f5acfce49.html.
[5]Enck W,Ongtang M,McDaniel P.Understanding Android security[J].IEEE Security&Privacy Magazine,2009,7(1):10-17.
[6]Avik Chaudhuri.Language-Based Security on Android[M].University of Maryland at College Park, ACM,2009.
[7]张光耀,郭永清,陈炀.基于Android系统的H.264视频压缩技术实现[J].电子科技,2011(9):117-120.ZHANG Guang-yao,GUO Yong-qing,CHEN Yang.Design of H.264 video compressing based on Android system[J].Electronic Science and Technology,2011(9):117-120.
[8]马建红,姬莉霞,卫权岗.基于Android平台的移动个人助手设计与实现[J].现代电子技术,2012(2):24-26.MA jian-hong,JI li-xia,WEI quan-gang.Design and implementation of mobile personal assistant based on Android[J].Modern Electronics Technique,2012(2):24-26.