Можно ли использовать разрешение RECEIVE_SMS для перехвата SMS-сообщений?

13

Я заметил довольно много приложений, запрашивающих RECEIVE_SMSразрешение . Здесь мне ясно две вещи:

  • RECEIVE_SMS позволяет приложению «привязывать» входящие SMS
  • READ_SMS относится только к уже сохраненным смс

Поскольку некоторые приложения просто просили RECEIVE_SMS, но не запрашивали READ_SMS, мне стало любопытно: это, по-видимому, подразумевает, что RECEIVE_SMSоно не только предназначено для принимающей части, но и приложение может делать то, что хочет, с полученным сообщением - например, прочитать его, затем выбрасывайте его молча (поэтому пользователь даже не замечает, что пришло SMS-сообщение - это может быть способом, которым троянцы TAN действуют, чтобы привязать идентификаторы для транзакций онлайн-банкинга).

Но было бы также возможно для такого приложения «перехватить» сообщение, т.е. принять его, прочитать его (и обработать его содержимое любым способом, например, переслать его другими средствами, такими как через IP), а затем передать его как если ничего не случилось? Другими словами: может ли он шпионить за пользователем таким образом?

Иззи
источник

Ответы:

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: /

Оник
источник
Большое спасибо за идеи, оник! Не знал о тех изменениях KitKat. Имея это в виду, правильно ли я понял, что, например, WhatsApp теперь также потребуется READ_SMSразрешение для доступа к его «коду активации» - или делать приложения с RECEIVE_SMSразрешением «получать копию» сейчас (за исключением приложения SMS по умолчанию, которое будет « получить оригинал ")?
Иззи
@ Иззи, у меня тоже есть вопрос по этому поводу. Будет ли теперь пользователь видеть эти контрольные тексты прямо в своем приложении по умолчанию? Или это был бы вариант, чтобы иметь возможность видеть «потребленные» тексты, но на самом деле не отображаются в вашем обычном текстовом приложении?
Cruncher
1
@ Izzy Если я правильно понял, приложения, которые не установлены в качестве приложения SMS по умолчанию, могут обращаться к поставщику только для чтения, то есть им не нужно READ_SMSразрешение, но они не могут редактировать SMS (пометить как прочитанные, удалить и т. Д.). ).
onik
1
@Cruncher Сообщения должны отображаться в вашем приложении SMS по умолчанию, так как только это приложение может записывать в SMSProvider для удаления сообщений.
onik
1
"Да, оно может". Но только на Android 4.3 и ниже. Начиная с 4.4 SMS_RECEIVED является не прерываемым намерением. Пожалуйста, добавьте этот важный факт. См. Также stackoverflow.com/questions/20021492/…
поток
10

Как обстоят дела

  1. Android 4.3 и ниже без приложения Hangouts. Любое приложение с разрешением SMS_RECEIVE может читать / прерывать входящие SMS (ala Whatsapp)
  2. Android 4.3 и ниже с Hangouts (режим SMS включен): любое приложение с разрешением SMS_RECEIVE может читать, но не прерывать входящие SMS
  3. Android 4.4 и выше: любое приложение с разрешением SMS_RECEIVE может читать, но не прерывать входящие SMS

Во всех трех случаях READ_SMS дает приложению разрешение на чтение всех SMS, а не только новых входящих SMS.

Как уже упоминалось, в Android 4.4 все изменилось

daamitt
источник
1
Спасибо за то, что вы указали, что Hangouts может иметь значение для Android <4.4! Угадайте, что соответствует тому, на что указывает onik в приложении, которое регистрируется как получатель SMS с наивысшим приоритетом , и Hangouts делает именно это (так что никакое другое приложение не может его превзойти )?
Иззи