目前中国市场,骚扰电话大量的充斥手机用户的生活,因此手机安全软件的电话拦截功能受到广泛关注和使用。但第三方应用级电话拦截功能的效果并不理想,比如拦截电话时已经响了一声、或出现短暂的来电界面,多款安全软件同时存在时可能发生冲突等,其本质原因是目前的第三方应用无法及时的、快速的判断出来电事件,拦截不及时造成的。现在@安卓安全小分队就分析其中的原理,并给出我们自己的解决方案。
一、原理分析
1、Android来电流程
上图中间框图中给出的是Android系统来电流程。方框的上部分(包括蓝色方框)是App层,下部分(粉色方框)为framework层。当有incomingcall发生时,RIL层会将incomingcall事件向上报给CallTracker。在CallTracker中,incomingcall事件将会通过两条路向上层走。
i)上图方框中黄色箭头所示路线。通过PhoneNotifier->TelephonyRegistry将PHONE_STATE_CHANGED通知上去。第三方应用通过SDKAPI注册listener(PhoneStateListener),监听framework层TelephonyRegistry发出的PHONE_STATE_CHANGED通知。若callstate从CALL_STATE_IDLE变成CALL_STATE_RINGING,则说明有电话打入,且打入的电话号码会包含在广播出来的intent中。
第三方安全软件的拦截功能就是通过这一原理检测到有来电以及该来电的号码(其拦截点为图中灰色方框所示)。若号码为黑名单号码,则将来电hangup。
ii)上图方框中红色箭头所示路线。通过PhoneBase->CallManager->CallNotifier->InCallScreen,即从framework->PhoneApp,将NewRingingConnection通知上去。
2、第三方应用级方案缺点
i)黑名单打入电话时,可能会有来电界面。
这是由于第三方应用只能通过左边黄色流程的PHONE_STATE_CHANGED来判断是否有来电并拦截,其拦截点比较晚,可能会出现右边红色路线已经走到InCallScreen,即来电界面已出现,左边的第三方应用才将电话hangup,用户体验不好。
ii)手机上同时存在多款安全软件时可能存在冲突。
若各个安全软件的黑名单各不相同时,若一个号码N是安全软件A的黑名单,但不是安全软件B的黑名单。由于拦截时机晚,当号码N打入时,B也会检测到有来电且无需拦截,就有可能做一系列的操作而导致此时N有可能会被接通。因此,多款安全软件的情况下,不能杜绝每个黑名单中的号码一定会被拦截掉。
二、优化和改进
针对第三方应用级方案拦截优先级低、时间延迟严重的情况,我们可以从系统入手,通过在底层拦截来提前拦截时间、提高拦截优先级,使用户根本无法感知拦截过程,在手机屏幕上不会有任何变化。
我们从底层对两条路线都做“拦截”(如上图左右两个绿色方框所示):
1、针对上图右边红色箭头所示流程,在底层PhoneBase中进行hook,每当有来电发生时,通知到我们自己的service(如上图右边绿色service方框所示),PhoneBase根据service的返回结果进行处理。具体如下:
1.1)在framework中添加一个service(上图右边绿色Service绿色方框所示),并授予它root权限。该service起来之后,等待client端的请求。并对client端暴露了一套SDKAPI接口(上图右边SecuritySDKAPI绿色方框所示):
接口:ITelephonyListener
booleanonIncomingCall(StringphoneNumber,intsimId);//callback
booleanregisterTelephonyListener(ITelephonyListenerlistener,intevents)//注册监听器
1.2)app实现并注册电话listener,当来电发生时,PhoneBase通知listener,listener返回是否需要拦截,PhoneBase根据返回值处理。
2、针对上图左边黄色所示流程,在PhoneNotifier中进行拦截,当有黑名单来电发生时根据一定的规则,阻止phonestate向上通知。
根据以上分析可知,我们的拦截在incomingcall流程的底层“静默”进行拦截,时机早,优先级高,上层用户无法感知拦截过程。并且若手机上有多个安全软件同时存在时,我们的拦截可以杜绝其他安全软件检测到来电,防止了手机上多个安全软件的冲突问题。
更多内容请关注http://blog.sina.com.cn/u/3194858670以及sina微博@安卓安全小分队
相关推荐
在Android平台上,短信和电话拦截是一项重要的功能,它允许开发者创建应用程序来管理用户接收到的通信。本项目涉及的是一个已经编写完成的Android应用,它能够实现短信和电话的拦截功能,用户导入到Eclipse IDE中...
其次,拦截电话与短信的功能需要访问Android的通话和消息服务,这需要申请相应的权限。在AndroidManifest.xml文件中,我们需要添加`<uses-permission>`标签来声明权限,如`READ_PHONE_STATE`和`WRITE_SMS`。对于拦截...
在Android系统中,短信和电话拦截是一项重要的功能,它允许用户筛选不想要的来电和短信,提高生活和工作的效率,避免骚扰。Menutable Service则是一个与Android系统菜单相关的服务,可能涉及用户界面和系统级别的...
在Android平台上,开发一款能够拦截电话的应用涉及到多个关键知识点,这些知识点主要集中在以下几个方面:数据库管理、广播接收器、碎片通信以及系统事件监听。以下是对这些核心概念的详细阐述: **1. 数据库管理**...
《Android软件安全与逆向分析》是一本深入探讨Android应用安全和逆向工程的书籍,带书签功能方便读者查阅和学习。在Android平台上,软件安全与逆向分析是极其重要的话题,因为随着移动设备的普及,恶意软件和隐私...
在Android平台上进行应用程序开发时,有时我们需要实现特定的功能,例如本例中的“拦截史迪仔电话”。这个项目是一个实战教程,旨在帮助初学者理解和掌握Android Studio的使用以及Android移动开发的基础知识。通过...
在本Android项目实战中,我们将深入探讨如何实现手机卫士的核心功能——拦截黑名单及处理响一声电话的问题。手机卫士是一种常见的应用,旨在提供安全防护,帮助用户管理来电和短信,尤其是那些来自未知或不受欢迎...
本例中是使用aidl Android Interface Definition Language 实现两种方式拦截来电 使用广播监听拦截(其中有动态广播注册和静态广播注册)和phoneManager类监听手机状态拦截
在Android平台上,来电拦截是一种常见的功能,主要用于定制化手机体验,比如防止骚扰电话或在特殊情况下自动处理来电。本文将详细解析如何实现Android来电拦截以及拦截后播放自定义提示音的源码技术。 首先,来电...
这个压缩包"Android应用源码之拦截软件,拦截电话,短信.zip"很可能包含了实现这些功能的源代码,为学习和理解Android系统级别的交互提供了宝贵的参考。 1. **权限管理**:在Android中,为了实现电话和短信的拦截,...
在本案例中,"android电话拦截aidl文件"涉及到的是利用AIDL来拦截和处理Android系统的电话相关事件。 首先,我们来看两个关键的AIDL文件: 1. **IPackageStatsObserver.aidl**:这个文件定义了一个接口,用于观察...
android 10.0禁止系统拨打电话功能,屏蔽掉系统拨打电话的功能
在实现这些功能时,Android手机安全卫士会广泛使用到Android API,如ContentProvider用于访问系统数据,BroadcastReceiver用于接收系统广播,Service用于后台运行任务,以及Intent用于组件间的通信。同时,源码还会...
在Android平台上,对电话状态的监听和拦截是一个需要特别权限和精确实现的敏感操作,这涉及到Android的权限管理、广播接收器(BroadcastReceiver)、事件监听机制以及电话状态的处理。以下知识点将详细介绍如何实现这...
这份名为"Android应用源码之拦截软件,拦截电话,短信.rar"的压缩包内容可能包含了一个完整的Android应用项目,用于演示如何实现电话和短信的拦截功能。通过分析源码,我们可以深入理解Android系统的权限管理、广播...
在Android平台上,实现短信和电话拦截是一项常见的功能,主要用于安全应用、防骚扰软件以及系统级的权限管理。本文将深入探讨如何在Android中利用广播接收器(BroadcastReceiver)、服务(Service)以及菜单(Menu)...
在Android平台上,开发人员有时需要实现特定的功能,例如电话拦截,这通常是出于安全或特定业务需求。本示例"Android-使用反射和aidl实现的电话拦截功能的demo"提供了一个利用反射和Android Interface Definition ...
在Android平台上,电话拦截功能是通过使用特定的API和组件来实现的,这对于开发者来说是一项基本但又重要的技能。下面将详细讲解如何实现这个功能,以及涉及到的关键知识点。 首先,我们要理解电话拦截的核心机制。...