可以使用RECEIVE_SMS权限来拦截SMS消息吗?


13

我注意到很多应用程序都要求获得RECEIVE_SMS许可。我在这里有两件事很清楚:

  • RECEIVE_SMS 使应用程序可以“捕捉”传入的短信
  • READ_SMS 仅适用于已存储的短信

正如某些应用程序只是在询问RECEIVE_SMS,但不是在请求时READ_SMS,我很好奇:这似乎意味着RECEIVE_SMS不仅针对接收部分,而且该应用程序还可以对接收到的消息进行所需的操作,例如阅读,然后静静地丢弃它(因此用户甚至都不会注意到有SMS,这可能是TAN Trojan采取的行动来捕捉在线银行交易的标识符的方式)。

但是,这样的应用也可能会“拦截”消息,即接收消息,读取消息(并以任何方式处理其内容,例如通过其他方式(例如,通过IP转发),然后将其作为如果什么都没发生?换句话说:它可以以此方式监视用户吗?

Answers:


13

是的,它可以,但仅适用于Android 4.3及更低版本。例如,这在Whatsapp中使用。当您激活应用程序时,Whatsapp会将SMS发送到您报告的号码,然后该应用程序悄悄地拦截它,并向服务器报告它已收到该SMS。这就是帐户与您的电话号码绑定的方式。

当然,这也可以在有害的应用程序中使用。如果某个应用程序注册为具有最高优先级的SMS接收器,则该应用程序可以侦听传入的SMS,对其进行处理并在不通知用户的情况下将其关闭,或者转发给具有第二高优先级的下一个SMS侦听器。

在Android 4.4中已重做此操作,如果我理解正确,则只有默认的SMS应用程序有权访问所有传入的SMS(SMS_DELIVER_ACTION),而其他具有正确权限的应用程序将仅收到传入消息的通知(SMS_RECEIVED_ACTION)。此外,该SMS_RECEIVED意图是不可逾越的,无法停止。我认为在Android 4.4中,这样做是为了允许用户在默认应用中查看所有传入的SMS消息。

编辑:在Android开发者博客上找到了一些更有用的信息。我将对此进行进一步测试,但是我目前唯一的Android手机仅支持WiFi,因此没有SMS:/


非常感谢您的见解,onik!不知道那些KitKat的变化。有了这些功能后,我是否正确理解例如WhatsApp现在也需要READ_SMS权限才能访问其“激活代码” –或现在要做具有RECEIVE_SMS“接收副本”权限的应用程序(默认的SMS应用程序除外,它将“收到原件”)?
伊兹

@Izzy我对此也有疑问。现在,用户现在可以直接在其默认应用程序中看到这些控制文本吗?还是可以看到“已用完”的文本但实际上不显示在常规文本应用程序中的选项?
Cruncher 2014年

1
@Izzy如果我正确理解,未设置为默认SMS应用程序的应用程序可以访问只读提供程序,这意味着它们不需要READ_SMS权限,但无法编辑SMS(将其标记为已读,删除等)。 )。
onik 2014年

1
@Cruncher消息应该显示在默认的SMS应用程序中,因为只有该应用程序才能写入SMSProvider才能删除消息。
onik 2014年

1
“是的,它可以”。但仅适用于Android 4.3及更低版本。从4.4开始,SMS_RECEIVED是不可中止的Intent。请补充这一重要事实。另请参见stackoverflow.com/questions/20021492/...
流量

10

就目前情况而言

  1. 没有环聊应用的Android 4.3及以下版本:任何具有SMS_RECEIVE权限的应用都可以读取/中止收到的短信(ala Whatsapp)
  2. 具有环聊功能的Android 4.3及更低版本(已启用短信功能):任何具有SMS_RECEIVE权限的应用都可以读取但不会中止收到的短信
  3. Android 4.4及更高版本:具有SMS_RECEIVE权限的任何应用都可以读取但不能中止传入的SMS

在这三种情况下,READ_SMS都将授予该应用程序读取所有SMS的权限,而不仅仅是读取新传入的SMS。

正如onik所提到的,Android 4.4发生了很大变化


1
感谢您指出环聊对于Android <4.4可能有所不同!猜猜与某个应用指向的onik相对应的注册为具有最高优先级的SMS接收器,而环聊正是这样做的(因此没有其他应用可以超越它)?
伊兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.