能否通过ADB命令或伪短信APP插入短信以满足APP自动验证需求?
能否通过ADB或伪短信APP插入短信欺骗监听验证码的应用?
一、ADB命令实现方式
- Android 8.0(API 26)及以下版本:可以通过模拟系统短信广播的方式触发应用的监听逻辑,示例命令:
需注意PDU内容要正确编码对应短信发送方、验证码文本等信息,系统会广播adb shell am broadcast -a android.provider.Telephony.SMS_RECEIVED --es "pdus" "<编码后的PDU内容>" --es "format" "3gpp"sms_received事件,多数监听短信的应用会响应该广播。 - Android 8.0及以上版本:系统对静态广播接收器做了限制,仅动态注册的接收器能收到
SMS_RECEIVED广播。此时可通过ADB将短信写入系统收件箱数据库:
这种方式仅对读取系统短信数据库的应用有效,若应用直接监听广播则无法识别这条插入的短信。adb shell content insert --uri content://sms/inbox --bind address:s:"+8613xxxxxxxxx" --bind body:s:"【验证码】您的验证码是123456" --bind date:i:`date +%s000`
二、伪短信APP的可行性
- 伪短信APP的核心逻辑和ADB插入数据库类似,部分会额外模拟广播事件,但受系统权限限制:
- Android 10(API 29)及以上版本,系统仅允许默认短信应用拥有完整的短信读写权限,第三方伪短信APP无法直接写入系统短信数据库,只能通过自身UI展示“假短信”,无法被其他应用识别。
- 低版本系统中,若伪短信APP能获取
WRITE_SMS权限并模拟广播,对于读取数据库或监听广播的应用,可实现欺骗效果;但如果应用通过无障碍服务读取通知栏验证码,伪短信通常无法触发系统通知,也就无法被自动识别。
三、核心限制
- 系统权限管控:Android版本越高,对短信权限、广播机制的限制越严格,非默认短信应用的模拟操作成功率越低。
- 应用监听逻辑:不同应用获取验证码的方式差异极大,读数据库、监听广播、读取通知栏这几种逻辑,对伪短信的兼容性完全不同,没有通用的欺骗方案。
内容的提问来源于stack exchange,提问作者Esteban
相关产品推荐
相关产品推荐

