Android短信发送相关的恶意行为

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, text, null, null);

先说几个发短信相关的API

  • ArrayList<String> divideMessage(String text)

    这个方法把一个消息文本分成几个片段,最大不能大于短信大小

  • static SmsManager getDefault()

    这个方法被用来获取 SmsManager 的默认实例

  • void sendDataMessage(String destinationAddress, String scAddress, short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent)

    这个方法被用来发送一个基于数据 SMS 到特定的应用程序的端口

  • void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents)

    发送一个基于多部分文本短信

  • void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)

    发送基于文本的短信

还有一个通过Intent的方式发送:

protected void sendSMS() {
    Log.i("Send SMS", "");

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setData(Uri.parse("smsto:"));
    smsIntent.setType("vnd.android-dir/mms-sms");

    smsIntent.putExtra("address"  , new String ("0123456789"));
    smsIntent.putExtra("sms_body"  , "Test SMS to Angilla");
    try {
       startActivity(smsIntent);
       finish();
       Log.i("Finished sending SMS...", "");
    } catch (android.content.ActivityNotFoundException ex) {
       Toast.makeText(MainActivity.this, 
       "SMS faild, please try again later.", Toast.LENGTH_SHORT).show();
    }
}
  • 通过Intent的方式启动短信发送界面的Activity,并填写好发送内容,这种方式一般恶意代码很少使用
  • 恶意代码中多数喜欢使用“静默发送”,即用户无法感知的场景下发送出去
  • 分析恶意代码中可以特别关注sendDataMessage()和sendTextMessage()这两个方法,然后向上回溯调用堆栈,确定是否是恶意发送行为

有种更风骚的发送短信的方法,就是尼玛反射调用
反射获取发送短信的Method对象,然后再调用
然而你会说,它反射调用还不是要暴露一个获取短信发送函数所在类的字符串,通过那个字符串的检索也能命中发短信的行为啊
然而人家字符串编码加密了,傻逼了吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值