Skip to content

Реверс инженерю API сервиса аналитики

Мне часто пишут люди, с просьбой что-либо спарсить для них, часто с маркетплейсов.

Недавно, у меня так появился новый интересный проект:

Есть расширение для браузера, которое предоставляет закрытую информацию по товарам, например, выручка, потери и многое другое для одного популярного маркетплейса.

Их официальная версия, что-то типа: "эти данные приблизительные, рассчитанные на основе данных об остатках".

То есть (предположительно) они сгружают всю базу товаров маркетплейса (как показали мои эксперементы это вполне возможно).

Затем анализируют данные об остатках по секретным формулам (а может быть отслеживают динамику остатков товара), собирают бд (из которой в свою очередь подтягивает инфу в api и оттуда забирает расширение).

bash
marketplace -> анализатор -> бд -> api -> расширение

Звучит логично.

Тупить формулы или хранить базу у меня желания/возможностей нет, так что будем парсить api расширения.

Интересно, что при работе с расширением, в панели "Сеть" / "Network" не детектируется никаких запросов (не знаю, намеренно ли это сделано или запросы всех расширений скрываются, но раньше я точно видел запросы от других расширений).

Значит настало время для реверс инженеринга.

Скачал расширение в формате .zip, оно оказалось минифицированым (опять же, не знаю было ли это сделано специально или магазин расширений минифицирует всё по КД).

Решил, ради интереса попробовать заставить gpt сделать swagger для api расширения.

На удивение получилось.. отлично! пара методов, не работают (не факт, что по вине gpt), но это уже хорошо, не придётся копаться в минифицированом коде!

Но меня интересовал только один метод: получение статистики по id товаров маркетплейса. и такой был найден.

Авторизация в api сделана по принципу (заботливо оставлена gpt в swagger):

yaml
Authorization: Bearer <token>

А token можно забрать из cookie расширения в dev tools. кстати, тут разработчики решили максимально пошутить и сделали token, аж на 1193 символа (по крайней мере у меня так), при чем алфавит такой:

python
[\.0-9A-Za-z]

Совсем не жалеют БД..

итог: проект отдан.