Строки. Технологии МТС. Сниффаем трафик мобильных устройств
Без лишних предисловий перейдем к сути. Есть прекрасный ресурс https://stroki.mts.ru/ с коллекцией неплохой литературы. Читать ее можно только через специальное приложение. Возможности прочитать книгу на сайте просто нет (ну или я не нашел). В общем, все как обычно - установи себе на телефон очередную читалку и попробуй не забыть, где какую книгу ты читаешь.
Чтобы решить эту проблему, нужно задействовать некоторое кол-во специализированных инструментов. Одного браузера здесь не хватит, так как читать через сайт просто невозможно.
Что нам понадобится:
1) Сниффер трафика мобильных устройств, чтобы увидеть, какие запросы отправляет запросы приложение на сервер;
2) Postman, чтобы по быстрому воспроизвести эти запросы и проверить их работоспособность.
Приступим.
Первым делом устанавливаем на компьютер сниффер. Выбор пал на Charles. Настраивал его по инструкции
Запускаем приложение на телефоне и начинаем изучать...
Первым делом откроем какую то книгу и посмотрим, какие запросы отправляются и какие данные получаются.
Запросов приложение отправляет довольно немного и нужный находится довольно быстро:
В первую очередь необходимо определиться с тем, какие данные отправляет приложение.
Имеем следующее:
1) GET запрос по адресу https://stroki.mts.ru/api/books/multi/973, в котором указывается только идентификатор книги;
2) Набор заголовков.
Переходим в Postman и воспроизводим там структуру запроса
Все работает. В процессе переноса и тестирования выяснил необходимый обязательный набор заголовков. На скрине обязательный набор. Значения части из них можно не указывать, но передать их обязательно надо.
Что из этого особо интересно:
1) access-token - это токен авторизации. Неожиданно оказалось, что его аналог присутствует среди cookie на сайте и взять его можно оттуда;
2) signature - это подпись запроса. Его рассчитывает приложение, чтобы сервер мог убедиться в том, что запросы отправляет приложение и этим запросам можно доверять. Для каждого запроса подпись считается отдельно и для каждого запроса она разная (в отличии от токена авторизации).
Получается, что чтобы выполнять запросы к серверу необходимо только 2 параметра: токен авторизации и подпись. С первым все просто - можно взять из cookie. Со вторым все сложно. Как считается подпись мы не знаем. Что делать? В одном из прошлых постов я рассказывал о том, как декомпилировать приложения и доставать оттуда данные. Повторяем процесс и находим следующее:
Вот весь код, выполняющий подсчет сигнатуры. В целом алгоритм оказался тривиален:
1) Берем ссылку, по которой выполняется запрос и добавляем к ней соль;
2) Считаем MD5 от полученной строки.
Соль закодирована. Надо расшифровать. Приводить шифрованную и расшифрованную соль здесь не буду. Но того, кто осмелится повторить мой путь и раскодировать соль, ждет очень интересная пасхалка от одного из авторов приложения, отражающая, как мне кажется, его душевное состояние. Автор, если ты прочитаешь это, то я тебя понимаю)
Вуаля. Теперь есть все необходимые данные и алгоритмы расчета подписи, чтобы начать работать с API.
Далее возвращаемся в Charles и ищем остальные запросы.
Там все тоже просто:
1) Одним запросом получаем идентификаторы файлов
Из ветки full берем fileId и отправляем запрос на получения непосредственно ссылки на этот файл
Вуаля. Вот и ссылка на файл книги в формате epub, доступная без всяких заголовков и прочих авторизаций просто в браузере.
Итого. Защита https://stroki.mts.ru/ не удивила какой-либо хитрой системой защиты. Для полной автоматизации скачивания книг необходимо:
1) Авторизационный токен (можно достать из cookie на сайта);
2) Ссылка на книгу (так же берется с сайта);
3) Запрос на получение идентификаторов файлов;
4) Запрос на получение ссылки на файл;
5) Скачивание готового файла;
6) Алгоритм расчета подписи.