android短信拦截

广播分2种,无序广播和有序广播。可以理解为散列和队列广播。

首先无序广播,不能中断,分发机制有点类似散列发送。这种广播的的发送为:context.sendBroadcast
这种广播是不能中断的,请看API说明。
其次为有序广播,可以中断。
这种广播,以我的理解可能存在很大的BUG,短信这块广播的发送BUG现在被QQ和360利用,可能在以后的版本中会修订。
它是一个按一种优先级顺序发送,即按某种messagequere队列发送,其中队列中的任何广播接收者都可以终端该广播,导致它之后的成员不能接收到广播。
我们首先看这个队列是怎么形成的:(以下是假想+测试验证,有待代码验证)
假设我们广播优先级别都设成:2147483647(注:最大int形整数)

首先动态注册优先级别最高
其次静态注册

在动态注册中
最早动态注册优先级别最高

在静态注册中
最早安装的程序,静态注册优先级别最高(注:安装APK会解析af.xml,把其加入队列)
注意这里安装
是指adb install xxx.apk或者手机上安装应用。
然后才是adb
push到其他目录的应用
可能的原因是手机查询应用的时候会先去特定目录解析应用,所以广播注册会出现这种差别。adb push
到system/app下会比安装的优先级高吗?这有待你的验证,我还没验证。

然后都是安装的应用中
首先安装的优先等级最高

OK
以上就是我分析的有序广播的优先级别问题。

反编译360源码会发现,他首先静态注册的广播接收器里面设置的优先数量级为2147483647,然后在广播中启动一个service,在service中注册了一个优先数量级为2147483647的同样的广播接收器。
就这么简单就实现了没有同种实现的应用的情况下拦截短信。

OK,我们现在以同样的方式来做一个实验:
首先写一个应用,注册一个开机完成广播接收者。


<receiver android:name=".MyBrocast" android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

然后在这个广播接收者接收到信息之后马上启动一个service

public void onReceive(Context context, Intent intent) {
Log.v("MyBrocast.onReceive", "testtttttttttttt");
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Intent service=new Intent(context, MyService.class);
context.startService(service);
}

然后在service重新注册一个接收短信的广播接收者,优先级2147483647


IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
localIntentFilter.setPriority(2147483647);
myService = new MyBrocast();
MyBrocast localMessageReceiver = myService;
Log.v("MyBrocast.onReceive", "onCreate");
Intent localIntent = registerReceiver(localMessageReceiver, localIntentFilter);

这种重启手机就OK了,你也可以让360,QQ郁闷的。

时间: 2024-11-09 20:01:30

android短信拦截的相关文章

Android 短信拦截

不废话说重点: AndroidManifest.xml文件代码如下: <uses-permission android:name="android.permission.RECEIVE_SMS"/> <!-- 拦截短信(就是接受短些的权限) --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 开机启动完成后

Android 短信拦截的2种方式

第一种是通过BroadcastReciver <uses-permission android:name="android.permission.RECEIVE_SMS"/> <!-- 拦截短信(就是接受短些的权限) -->   <receiver android:name="com.demo.artshell.broadcastreceiverdemo.InterceptReceiver">  <!-- 这里没有设置and

Android短信拦截和电话拦截

MainActivity: package com.wyl.bctest; import android.support.v7.app.ActionBarActivity; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; i

[android] 手机卫士黑名单功能(短信拦截)

前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭 在service包下定义一个类CallSmsSafeService继承系统的Service 重写onCreate()方法 获取BroadcastReceiver对象,new出来 调用registerReceiver()方法,注册广播,参数:BroadcastReceiver对象,IntentFillter对象 重写onDestory

转: 如何在Android 4.4上实现短信拦截

众所周知Android在4.4上增加了不少安全措施,除了把SELinux设置为enforce外,在短信方向也加强了限制. 4.4之后,新增了一个default sms的机制,详细的描述,可以参考我的另一篇文章<谈谈4.4中的新增功能对安全类软件的影响>.简而言之,就是如果要在4.4之后实现短信拦截功能,就必须成为default sms,把所有短信相关的功能都包揽了,然后再做短信拦截.但这种做法,适配性和兼容性的工作是非常巨大的,短信.wapush(多种).彩信.单双卡等等,相当于要求短信拦截类

Android——BroadcastReceiver 广播 短信拦截

/** * 如何去理解BroadcastReceiver(广播)?   * 其实可以这样想,首先我们要有一个发送广播的“媒体”,在这个例子中,我们暂且用activity组件作为这个媒体,当然以后 * 会用到service,或者随机启动方式来发送广播,这看业务需求来决定. * 在这个例子中,当点击按钮的时候,一条广播就发送了出去,同样用到了意图对象Intent. * 和启动activity和service一样,我们需要为意图对象设置“标记”和“包裹”,它就像个基站,向世界发送信号. * 而对于广播

Android应用源码安卓短信拦截木马项目源码

温馨提示:本资源由源码天堂整理提供下载转载时请留下链接说明:http://code.662p.com/view/9174.html安卓短信拦截木马源码主要功能就是开机后台启动,拦截本机收到的短信并且转发到指定号码,同时使原短信在手机上不显示,如果不慎安装了这玩意,什么支付宝安全什么财付通安全,只要是有手机短信验证的安全都不叫安全了.木马apk重新签名后手机360免杀,可能手机上的安全360还停留在核对apk的md5或者hash的阶段.也就是所谓的云查杀.但是360会默认提示短信权限.另外我百度了

短信拦截马黑产揭露 - 莫伸手,伸手必被抓

概述 从2013年5月至今,AVL移动安全团队持续监测到了一类高活跃高危害的短信拦截类型木马.短信拦截马,顾名思义是一种可以拦截他人短信木马,就是让被攻击者收不到短信,并将短信内容截取到攻击者手机上. 此类木马目前最常见的是通过钓鱼.诱骗.欺诈等方式诱导用户装上木马,然后通过拦截转发用户短信内容,以此获取各种用户重要的个人隐私信息,如用户姓名.身份证号码.银行卡账户.支付密码及各种登录账号和密码等,造成这些信息的泄露,再利用此信息从而达到窃取用户资金的目的,严重威胁用户的财产安全. 另外,此前流

短信监听+短信拦截

监听消息发送和消息是否被接收. import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.provider.Telephony.Sms; import android.telephony.SmsManager; i