Как обойти подтверждение по SMS и телефону
Как обойти подтверждение по SMS и телефону
Сейчас практически нереально найти сервис или сайт, который бы не требовал подтверждение мобильного телефона. Это может быть SMS с числовым кодом или последние несколько цифр номера телефона, с которого вам позвонят. Тенденция, на мой взгляд, отвратительная, но речь сегодня немного не об этом. Вроде подтвердил номер один раз и пользуйся сколько угодно, благо левых симок пока хватает. Но ведь нет же. Особо отбитые сервисы при попытке захода с каждого нового устройства требуют повторной авторизации с обязательным подтверждением через SMS или контрольный звонок. Типа безопасность, типа защита данных, типа все делается в наших же интересах и все такое. Иногда повторная авторизация с телефонным кодом требуется, когда сервис посчитает запросы к нему подозрительными или вообще просто так, потому что вот захотелось. Но есть задачи, когда информация с сервиса должна обрабатываться автоматически без участия человека. Авторизацию с вводом логина-пароля эмулировать несложно, навороты на клиентской части тоже в большинстве случаев успешно обходятся, а как быть с телефоном? Устройство (сервер) фактически новое и неавторизованное, читать SMS и брать трубку PHP еще не научился.
Итак, все решение сводится к тому, чтобы работающий на сервере скрипт, выполняющий автоматическую авторизацию, как можно быстрее получил информацию о содержимом SMS или о номере входящего звонка для продолжения подтверждения аккаунта. На помощь приходит обычный смартфон и замечательная программа MacroDroid. Чтобы описать все возможности программы MacroDroid этой статьи точно не хватит, скажу лишь, что она предназначена для автоматизации выполнения различных действий устройством при наступлении определенных событий. Как я уже говорил, нужным событием может быть получение SMS или входящий звонок, а действием - передача данных на удаленный сервер по HTTP-запросу. Для работы MacroDroid достаточно любого хиленького аппарата на Android, на любом авито их как грязи, да и у вас наверняка завалялся какой-нибудь безнадежно устаревший гаджет. Главное, чтобы он мог принимать звонки и сообщения и имел доступ в интернет.
Скриншот программы MacroDroid
Как создавать макросы в MacroDroid есть отдельные подробные инструкции, тут я их дублировать не буду. Просто поверьте, что с ними справится даже человек, далекий от программирования. А уж если вы пишете серверные скрипты, то такая задача вам точно по плечу.
Настройка триггера
Предположим, что сервис использует для авторизации SMS, отправляемые с определенного номера. В качестве триггера в макросе используем событие входящего SMS, для более точной обработки указываем номер или название сервиса-отправителя, а для еще более детальной фильтрации можно добавить какую-нибудь строку, которая встречается в сообщениях с числовым кодом. Впрочем, можно отправлять все подряд, а работу по сортировке информации реализовать уже на сервере.
Настройка HTTP-запроса
Теперь действия. Первое и самое главное - отправка данных на сервер. Делается это через HTTP-запрос, но есть некоторые особенности. Как выяснилось на практике, MacroDroid может отправлять только GET-запросы, несмотря на то, что заявлены POST. Эта ошибка тянется уже много версий и до сих пор не исправлена. Но ничего страшного, GET-запрос даже в самом печальном исполнении может передавать тысячи символов информации, а уж короткая SMS вообще не проблема. В качестве параметров обязательно передаем текст сообщения, для определения целевого сервиса желательно также передавать номер или название отправителя, а в случае работы нескольких устройств понадобится еще и имя телефона-обработчика или какой-нибудь другой уникальный идентификатор.
Настройка очистки уведомлений
Второе полезное действие - очистка уведомлений от пришедших SMS. Это вовсе не обязательно делать, если телефон служебный, но для персонального гаджета лучше не забивать шторку уведомлений. Таким образом, например, я подружил программу AnyBalance и некоторые свои "капризные" номера МТС. Все работает в фоне и ничего не мешает.
Настроенный смартфон с авторизованной симкой и MacroDroid постоянно подключен к зарядному устройству, переведен в беззвучный режим и вообще убран в шкаф с глаз долой.
Теперь алгоритм работы скрипта-приемника, по крайней мере, как это работает у меня. Получив запрос, из его параметров извлекается числовой код или последние цифры номера телефона или какая-то другая информация, отправленная со смартфона. Извлеченные данные записываются в соответствующий текстовый файл или базу данных. На этом работа приемника заканчивается.
Code (PHP) : Убрать нумерацию
- $sms=isset($_GET['sms'])?trim($_GET['sms']):'';
- $from=isset($_GET['from'])?trim($_GET['from']):'';
- if ($sms!='' && $from!='') {
- $sms_data='saved_sms_data_'.md5($from).'.txt';
- if (preg_match('/[^\d]([\d]{4,10})[^\d]/is', $sms, $matches)) {
- if ($f=fopen($sms_data,'w+')) {
- fwrite($f,$matches[1]);
- fclose($f);
- }
- }
- }
Code (PHP) : Убрать нумерацию
- $service='SomeService';
- $sms_data='saved_sms_data_'.md5($service).'.txt';
- // Ждем 30 секунд
- $code='';
- for ($i=0; $i<30; $i++) {
- if (file_exists($sms_data) && filesize($sms_data)>0 &&
- ((time()-filemtime($sms_path))<120)) {
- if ($f=fopen($sms_data,'r')) {
- $code=fread($f,filesize($sms_data));
- fclose($f);
- unlink($sms_data);
- break;
- }
- }
- else {
- sleep(1);
- }
- }
- if ($code!='') {
- // продолжение авторизации
- }
- else {
- // алярма, SMS не обработано
- }
Просмотров: 3290 | Комментариев: 1
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Razor
(01.09.2023 в 05:18):
А не проще работать скринами памяти устройства.
Добавить комментарий
Заполните форму для добавления комментария