Строки. Технологии МТС. Сниффаем трафик мобильных устройств

Без лишних предисловий перейдем к сути. Есть прекрасный ресурс 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) Алгоритм расчета подписи.