如何在模拟器中监控Android应用发送的短信 适配恶意APK场景
Android恶意APK短信发送行为监控方案
完全可以实现对该恶意应用短信发送行为的监控,以下三种方案均适配应用需要获取默认短信权限才能运行的要求,不会触发应用闪退:
方案1:应用进程内Hook(最便捷,优先推荐)
基于Xposed/LSPosed框架实现,无需修改系统底层逻辑:
- 准备已获取Root权限的Android模拟器(推荐Android 8~10版本,兼容性最高),安装LSPosed框架
- 编写极简Xposed模块,Hook目标应用进程下
android.telephony.SmsManager类的所有短信发送相关方法,包括sendTextMessage、sendMultipartTextMessage、sendTextMessageWithoutPersisting等 - Hook逻辑不需要拦截短信发送,仅需在方法调用时打印入参中的收件人号码、短信内容、发送时间即可,完全不会干扰应用的正常运行与权限检测
- 注意不要直接监听系统短信广播:恶意应用作为默认短信应用拥有最高广播优先级,可调用
abortBroadcast()截断广播,直接监听系统广播会出现数据遗漏
核心Hook代码示例:
XposedHelpers.findAndHookMethod("android.telephony.SmsManager", lpparam.classLoader, "sendTextMessage", String.class, String.class, String.class, PendingIntent.class, PendingIntent.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) { String recipient = (String) param.args[0]; String content = (String) param.args[2]; XposedBridge.log("发送短信监控:收件人=" + recipient + ",内容=" + content + ",时间戳=" + System.currentTimeMillis()); } });
方案2:系统短信数据库监听(无注入,规避反Hook检测)
安卓所有短信操作最终都会落地到系统短信数据库,即使应用删除记录也能捕获到写入痕迹:
- 通过Root权限监听系统短信数据库路径
/data/data/com.android.providers.telephony/databases/telephony.db的写入操作 - 应用触发短信发送时,系统会先向库内
sms表插入一条类型为2(已发送)的完整记录,后续恶意应用执行删除操作前,你已经可以通过实时监听拿到所有数据 - 该方案不需要对目标应用做任何注入操作,完全规避应用的反调试、反Hook检测逻辑
方案3:RIL层底层监控(适配无Root场景)
如果使用无Root模拟器,可以修改系统无线接口层逻辑实现监控:
- 定制Android模拟器镜像,修改
rild(无线接口层守护进程)的处理逻辑,所有从框架层下发的短信发送请求都会经过该层处理 - 在
rild层新增日志打印逻辑,直接输出所有短信发送的收件人、内容参数,该层监控完全对上层应用透明,目标应用完全感知不到监控行为
测试注意事项
- 运行恶意应用前先备份模拟器快照,避免应用对环境造成不可逆修改
- 先按照应用要求授予默认短信应用权限,再启动监控逻辑,避免应用主动闪退
- 若应用存在反调试检测,可搭配Frida框架先Hook屏蔽反调试逻辑后再执行监控
内容的提问来源于stack exchange,提问作者dyofficial90
相关产品推荐
相关产品推荐

