Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Android: чтение SMS без получения разрешений - это штатно?

#android #аутентификация #sms #проверка


Недавно установил официальное приложение из Маркета:
https://play.google.com/store/apps/details?id=com.aptekarsk.pz
Это онлайн-аптека.
В качестве идентификатора пользователя приложение использует номер телефона и требует
подтвердить номер с помощью проверочного кода, отправляемого по SMS. Всё стандартно.
На этапе ввода кода из SMS приложение само обработало полученное сообщение и вставило
цифры в поле ввода. Такое тоже часто встречается, например, в том же WhatsApp.
Но! Я не давал приложению разрешение на доступ к SMS. Более того, в списках разрешений
для него вообще нет такого пункта

.

В SMS, помимо проверочного кода подтверждения, есть ещё и служебный код 



, который каждый раз генерируется разный. Учитывая, что приложение официальное, есть
предположение, что для удобства обработки таких проверочных сообщений Google разрешает
перехватывать SMS, но только свои, на основе служебного кода.
Телефон на Android 7.0
Кто в курсе, поделитесь информацией: это баг или таки фича?
    


Ответы

Ответ 1



Судя по декомпилированному коду в приложении используется SMS Retriever API

Ответ 2



Читать SMS можно двумя способами: 1) Получить доступ к БД SMS - и читать ее как обычную SQLite БД - требуется пермишен 2) Перехватить получение SMS - через BroadcastReceiver: public class SMSReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle pudsBundle = intent.getExtras(); Object[] pdus = (Object[]) pudsBundle.get("pdus"); SmsMessage message =SmsMessage.createFromPdu((byte[]) pdus[0]); Log.i(TAG, "Bingo! Received SMS from: "+message.getOriginatingAddress()); abortBroadcast(); //прекратить обработку сообщения (то есть сообщение не будет записано в БД SMS) } } Пермишен не требуется, надо только деклалировать обработчик в манифесте. Тема практически бесконечная, туча недокументированных возможностей, ловушек и всего чего угодно. Подробнее можно порыться здесь

Ответ 3



После последнего обновления политики приватности Гугла, читать СМС при помощи запроса прав доступа запрещено (кроме приложений, специализирующихся на этом) и все приложения, в которых используется данный функционал должны переезжать как раз на тот самый SMS Retriever API Первый символ в СМС <#> означает, что SMS Retriever может начать "читать" данную СМС. Служебный код - хэш приложения, обозначает, что данная СМС адресована именно ему. Без всех этих спец символов приложение не сможет прочитать СМС. Вот так теперь работает чтение СМС у android приложений.

Комментариев нет:

Отправить комментарий