关于Android平台上短、彩信的拦截,网上已经有不少介绍性的文章。那些文章大多是介绍具体的实现方法,其提供的方法并不一定能够成功拦截。今天我们就来详深入地介绍一下拦截短、彩信的内部原理,并分析一下拦截方法的优劣。
Android接收短、彩信的原理
正常的短信在到达手机后,会根据不同的制式(GSM、CDMA等)被解析并封装成SmsMessage对象。该对象会被SMSDispatcher进一步解析并分发。系统会将短信的“format”、“pdu”放到action为“android.provider.Telephony.SMS_RECEIVED”的Intent中。之后系统会将Intent以有序广播(Orderd Broadcast)的形式发出去。监听这两个广播的app收到广播后,通过对pdu的解析,就可以得到短信的具体内容。
彩信的情况与短信类似,只不过运营商首先会发一条WapPush短信。这类短信不包含彩信的具体内容,而是包含一条指向真实内容的URL地址。系统会将WapPush短信解析,提取“pduType”、“header”、“pdu”、“format”等信息放到action为“android.provider.Telephony.WAP_PUSH_RECEIVED”的Intent中。同样,系统会以有序广播的形式将Intent发出去。收到广播的app将intent解析,并提取其中的URL。之后访问该URL地址并下载实际的彩信内容。
有序广播的原理
经过以上的分析,拦截短、彩信的关键就是拦截action为“android.provider.Telephony.SMS_RECEIVED”和“android.provider.Telephony.WAP_PUSH_RECEIVED”的广播。由于该广播是有序广播,所有Receiver 是按照顺序接受广播的。先收到广播的Receiver有权利终止该广播的传播。因此只要一个Receiver能够第一个收到广播并终止继续传播,那么就可以实现短、彩信的拦截。
这里简单介绍一下有序广播的传播方式。BroadcastReceiver 有静态和动态两种方式注册。
1. 静态注册:
静态注册是指在AndroidManifest.xml 中注册。方法如下:
<receiver android:name=“.XXXMessageReceiver”>
<intent-filter android:priority=“1000”>
<action android:name=“android.provider.Telephony.SMS_RECEIVED” />
</intent-filter>
</receiver>
2. 动态注册:
动态注册是通过调用Context类的register方法来注册。方法如下:
registerReceiver(BroadcastReceiver receiver,
IntentFilter filter);
registerReceiver(BroadcastReceiver receiver,
String broadcastPermission,
Handler scheduler);
注意,动态注册Receiver 的优先级是通过IntentFilter.setPriority(int)方法来设置的。当一个广播发生时,系统会将静态和动态的Receiver 按优先级(priority)进行排序,优先级越高越早处理。对于优先级相同的Receiver ,先处理动态的。
第三方解决方案
网上的通常解决方案是采用静态注册的方式注册BroadcastReceiver ,并设置一个较高的优先级,例如,1000、9999等。经过以上对于广播原理的分析,可以看出,这种方式其实并不能够保证接受者会第一时间被触发。比较好的实现方法需要注意两点:
1. 采用动态方式而非静态方式注册。监听系统开机广播,系统启动之后采用动态方式注册BroadcastReceiver 。这样可以保证在第一时间将需要的BroadcastReceiver注册成功;
2. 并将优先级设为最高。注意,系统的最高优先级不是网上所说的1000、9999,而是2147483647。这是int类型能够表示的最大数值。
做到这两点可以大大增加拦截的成功率。由于第三方app本身的局限性,即使采用优化过的方法,第三方app还是不能够保证拦截的成功率。例如,如果有两个app都采用动态注册的方式,都设置其优先级为最高。那么其中一个就会被另一个拦截。
系统级拦截方案
拦截短、彩信的根本方法还是需要在系统层面来解决。需要在系统提供一个专用的Service(类似于ActivityManagerService、PackageManagerService),用于判断收到的短信是否需要拦截。接口如下:
boolean needToBlockMsg(Intent intent);
系统在收到短信后,将短信内容组装到需要广播的Intent中。然后调用该接口判断是否需要拦截。如果需要拦截,则抛弃该短信,或者将其保存到特定的数据库中;如果不需要拦截,那么就照常发送广播。这样可以一劳永逸地解决短、彩信的拦截问题。
由于需要修改“/system/framework/framework.jar”之类的系统文件,第三方app是无法实现的,因此需要设备生产厂商的支持。
更多内容请关注http://blog.sina.com.cn/u/3194858670以及sina微博@安卓安全小分队
相关推荐
该资源主要实现了短信以及彩信的拦截,并且让拦截后的短信和彩信存储在自己定义的数据库中,而且有短信的互动,也就是收发短信的功能,同事实现了彩信和短信的显示,不足之处在于接受彩信时,一定要开启数据流量,...
本文将深入探讨“安卓短信彩信相关”主题,特别关注“拦截短信”的概念,这通常涉及到Android系统的权限管理和应用开发。 首先,我们要明白在Android系统中,短信的处理是由系统级的服务来完成的,而应用可以通过...
本文将深入探讨基于安卓平台的短信拦截应用程序的开发与实现,主要通过分析给出的源码进行学习和研究。短信拦截应用程序是一种能够控制和管理手机接收到的短信的应用,它可以阻止特定号码或所有号码的短信在用户手机...
在IT领域,短彩信(Short Message Service, SMS 和 Multimedia Messaging Service, MMS)是通信服务的重要组成部分,特别是在移动设备上。短彩信数据表结构是数据库设计的一部分,用于存储和管理短信和彩信的相关...
"安卓拦截马360免杀.rar" 是一个针对这种安全问题的研究资料,主要关注的是如何防止或绕过360安全卫士等安全软件的检测,实现恶意短信和彩信的拦截。 首先,我们需要了解什么是“拦截马”。在信息技术领域,"拦截马...
中国移动垃圾短信和骚扰电话拦截方案的核心在于有效管理和减少垃圾短信及骚扰电话的干扰,保障用户通信体验,维护网络环境的健康。以下是对该方案的重要知识点的深入解析: ### 项目实施背景与意义 #### 实施背景 ...
最简单的android彩信发送代码。适合学习彩信发送流程。 事实上android中的Mms模块中,对这个流程进行了很少的封装,这里就是将其简化,帮助初学者了解流程。
彩信模拟器 可用来模拟发送彩信
【Android短信彩信拦截功能详解】 在Android系统中,短信和彩信的处理是通过系统的Message Provider进行的,开发者可以通过ContentProvider接口与之交互。在Android 4.2.2版本中,我们可以实现短信和彩信的拦截功能...
本资源专注于实现对短信的拦截和显示,以及彩信的拦截和保存。同时,它还包含了短信的发送功能,确保用户能够全面地控制和管理自己的消息交互。下面我们将深入探讨这些知识点: 1. **短信拦截与显示**: - 在...
彩信的交互过程、PDU 及编码 彩信的交互过程是指彩信客户端与 MMS Proxy-Relay 之间的交互和彩信接收方与 MMS Proxy-Relay 之间的交互。该过程包括发送过程、通知过程、彩信接收、彩信回执和彩信阅读回执五个部分。...
在IT行业中,短彩信和通讯录是移动设备上的核心功能,它们对于用户与他人保持联系至关重要。"短彩信 通讯录"这个标题暗示我们可能在讨论一个整合短信(Short Message Service, SMS)和彩信(Multimedia Messaging ...
【中国电信短彩信培训资料】是一份详细的文档集合,涵盖了中国电信C网业务SP(Service Provider)接入短信和彩信服务的核心技术与操作指南。这些文档旨在帮助SP开发者和运维人员理解如何有效地接入和测试相关业务。 ...
一、概述 电力的供应,力的安全已经成为社会一个严重的问题,解决这个问题已经成为电力企业的利剑。据相关部门的统计,偷电,电力设施别盗直接造成经济损失超过上亿,能安全,稳定,可靠的供电电力公司和国家还...
\n\nFlash的应用范围非常广泛,不仅限于网络,如网站的片头动画、产品演示、广告设计,还包括电视节目、游戏、音乐视频(MTV)、手机屏保、彩信等。随着互联网和移动设备的普及,Flash动画的影响力越来越大,成为...
### 彩信终端测试规范知识点解析 #### 一、概述 **彩信终端测试规范**是一份由中国移动通信集团公司发布的标准文档,旨在规定彩信(Multimedia Messaging Service, MMS)终端的各项测试要求与方法。这份文档对于...
在IT行业中,彩信(Multimedia Messaging Service,MMS)是一种允许用户发送和接收多媒体内容,如图片、音频和视频片段的通信技术。相对于传统的文本短信(SMS),彩信提供了更丰富的信息传递方式。本文将深入探讨...
“绘声绘彩彩信中间件”,提供彩信的后台收发引擎,支持Access/MySQL/SQL Server/Oracle的数据库接口开发,可发送彩信、普通短信、长短信、OTA、WAP PUSH,适用于各种企业业务系统集成的彩信中间件。用户系统通过向...
中国移动的彩信协议,全称为Multimedia Messaging Service (MMS),是一种允许用户发送和接收多媒体内容,如图片、音频和视频片段,通过手机网络的技术。彩信协议是短信服务(SMS)的扩展,旨在提供更丰富的通信体验...
压缩包内的“短彩引擎v3.5.exe”文件很可能是这个彩信引擎的可执行程序,版本为3.5。这个程序可能是安装包,用于在用户的计算机或移动设备上安装彩信服务,或者是一个独立运行的工具,供开发者测试和调试彩信功能。 ...