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对象,然后再调用
然而你会说,它反射调用还不是要暴露一个获取短信发送函数所在类的字符串,通过那个字符串的检索也能命中发短信的行为啊
然而人家字符串编码加密了,傻逼了吧