Blog. Just Blog

Как обойти подтверждение по SMS и телефону

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Как обойти подтверждение по SMS и телефону
Как обойти подтверждение по SMS и телефону

Сейчас практически нереально найти сервис или сайт, который бы не требовал подтверждение мобильного телефона. Это может быть SMS с числовым кодом или последние несколько цифр номера телефона, с которого вам позвонят. Тенденция, на мой взгляд, отвратительная, но речь сегодня немного не об этом. Вроде подтвердил номер один раз и пользуйся сколько угодно, благо левых симок пока хватает. Но ведь нет же. Особо отбитые сервисы при попытке захода с каждого нового устройства требуют повторной авторизации с обязательным подтверждением через SMS или контрольный звонок. Типа безопасность, типа защита данных, типа все делается в наших же интересах и все такое. Иногда повторная авторизация с телефонным кодом требуется, когда сервис посчитает запросы к нему подозрительными или вообще просто так, потому что вот захотелось. Но есть задачи, когда информация с сервиса должна обрабатываться автоматически без участия человека. Авторизацию с вводом логина-пароля эмулировать несложно, навороты на клиентской части тоже в большинстве случаев успешно обходятся, а как быть с телефоном? Устройство (сервер) фактически новое и неавторизованное, читать SMS и брать трубку PHP еще не научился.

Итак, все решение сводится к тому, чтобы работающий на сервере скрипт, выполняющий автоматическую авторизацию, как можно быстрее получил информацию о содержимом SMS или о номере входящего звонка для продолжения подтверждения аккаунта. На помощь приходит обычный смартфон и замечательная программа MacroDroid. Чтобы описать все возможности программы MacroDroid этой статьи точно не хватит, скажу лишь, что она предназначена для автоматизации выполнения различных действий устройством при наступлении определенных событий. Как я уже говорил, нужным событием может быть получение SMS или входящий звонок, а действием - передача данных на удаленный сервер по HTTP-запросу. Для работы MacroDroid достаточно любого хиленького аппарата на Android, на любом авито их как грязи, да и у вас наверняка завалялся какой-нибудь безнадежно устаревший гаджет. Главное, чтобы он мог принимать звонки и сообщения и имел доступ в интернет.

Скриншот программы MacroDroid
Скриншот программы MacroDroid

Как создавать макросы в MacroDroid есть отдельные подробные инструкции, тут я их дублировать не буду. Просто поверьте, что с ними справится даже человек, далекий от программирования. А уж если вы пишете серверные скрипты, то такая задача вам точно по плечу.

Настройка триггера
Настройка триггера

Предположим, что сервис использует для авторизации SMS, отправляемые с определенного номера. В качестве триггера в макросе используем событие входящего SMS, для более точной обработки указываем номер или название сервиса-отправителя, а для еще более детальной фильтрации можно добавить какую-нибудь строку, которая встречается в сообщениях с числовым кодом. Впрочем, можно отправлять все подряд, а работу по сортировке информации реализовать уже на сервере.

Настройка HTTP-запроса
Настройка HTTP-запроса

Теперь действия. Первое и самое главное - отправка данных на сервер. Делается это через HTTP-запрос, но есть некоторые особенности. Как выяснилось на практике, MacroDroid может отправлять только GET-запросы, несмотря на то, что заявлены POST. Эта ошибка тянется уже много версий и до сих пор не исправлена. Но ничего страшного, GET-запрос даже в самом печальном исполнении может передавать тысячи символов информации, а уж короткая SMS вообще не проблема. В качестве параметров обязательно передаем текст сообщения, для определения целевого сервиса желательно также передавать номер или название отправителя, а в случае работы нескольких устройств понадобится еще и имя телефона-обработчика или какой-нибудь другой уникальный идентификатор.

Настройка очистки уведомлений
Настройка очистки уведомлений

Второе полезное действие - очистка уведомлений от пришедших SMS. Это вовсе не обязательно делать, если телефон служебный, но для персонального гаджета лучше не забивать шторку уведомлений. Таким образом, например, я подружил программу AnyBalance и некоторые свои "капризные" номера МТС. Все работает в фоне и ничего не мешает.

Настроенный смартфон с авторизованной симкой и MacroDroid постоянно подключен к зарядному устройству, переведен в беззвучный режим и вообще убран в шкаф с глаз долой.

Теперь алгоритм работы скрипта-приемника, по крайней мере, как это работает у меня. Получив запрос, из его параметров извлекается числовой код или последние цифры номера телефона или какая-то другая информация, отправленная со смартфона. Извлеченные данные записываются в соответствующий текстовый файл или базу данных. На этом работа приемника заканчивается.
  1. $sms=isset($_GET['sms'])?trim($_GET['sms']):'';
  2. $from=isset($_GET['from'])?trim($_GET['from']):'';
  3.  
  4. if ($sms!='' && $from!='') {
  5.     $sms_data='saved_sms_data_'.md5($from).'.txt';
  6.  
  7.     if (preg_match('/[^\d]([\d]{4,10})[^\d]/is'$sms$matches)) {
  8.         if ($f=fopen($sms_data,'w+')) {
  9.             fwrite($f,$matches[1]);
  10.             fclose($f);
  11.         }
  12.     }
  13. }
Скрипт автоматической авторизации доходит до страницы подтверждения, после этого переходит в цикл, в котором проверяется наличие и содержимое файла с извлеченным кодом или запись в базе данных. Если данные есть, то они считываются, отправляются дальше, после чего в обязательном порядке файл или запись в базе удаляется. Также обязательно надо проверять актуальность сохраненных данных, чтобы случайно не задействовать "протухшие", если на каком-то этапе предыдущий запрос их не обработал и не удалил. Цикл крутится фиксированное время, например, одну минуту, после чего считается, что SMS не было получено и дальнейшая авторизация не имеет смысла. Тут пишем логи, уведомляем заинтересованных лиц, трубим алярму и все такое. Или ничего не делаем, если одна пропущенная итерация на итоговый результат не влияет.
  1. $service='SomeService';
  2. $sms_data='saved_sms_data_'.md5($service).'.txt';
  3.  
  4. // Ждем 30 секунд
  5. $code='';
  6. for ($i=0$i<30$i++) {
  7.     if (file_exists($sms_data) && filesize($sms_data)>&&
  8.        ((time()-filemtime($sms_path))<120)) {
  9.         if ($f=fopen($sms_data,'r')) {
  10.             $code=fread($f,filesize($sms_data));
  11.             fclose($f);
  12.             unlink($sms_data);
  13.             break;
  14.         }
  15.     }
  16.     else {
  17.         sleep(1);
  18.     }
  19. }
  20. if ($code!='') {
  21.     // продолжение авторизации
  22. }
  23. else {
  24.     // алярма, SMS не обработано
  25. }
Вот такое решение для обхода сервисов, на которых так или иначе используется авторизация по SMS или подтверждение по номеру входящего звонка. Оно опробовано на практике и гарантированно работает в круглосуточном режиме для автоматического сбора данных. Еще я встречал вообще ублюдочные сервисы, когда звонит робот и голосом проговаривает некий код. К счастью, пока с такими в автоматическом режиме работать не пришлось, но принцип их обхода, как мне кажется, будет схожий. На рутованный смартфон ставится программа для записи разговора с линии, с помощью MacroDroid файл с записью звонка отправляется на сервер, там скармливается какому-нибудь боту по переводу голосовых сообщений в текст, ну а дальше по написанному.

Поделиться ссылкой ВКонтакте
Просмотров: 3290 | Комментариев: 1

Метки: телефоны, PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Razor (01.09.2023 в 05:18):
А не проще работать скринами памяти устройства.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0054 сек.) / Память: 4.5 Mb
Наверх