Общее положение дел следующее. Мы разрабатываем парсер для китайского маркетплейса пойзон. У пойзона есть приложение, однако его реверс это крайне трудозатратная история, поэтому мы решили парсить данные не из приложения, а из сайта. Сайт представляет из себя что-то вроде промо этого магазина, однако все эндпоинты совпадают с приложением, а также к этому промо подключена вся товарная база маркетплейса. Во время реверса сайта столкнулись с тем, что наших компетенций не хватает для того, чтобы обойти шифрование. Таким образом нам нужно понять
Необходимо выяснить при каких условиях запросы на
1) Поиск
2) Получение конкретного товара
3) Получение товаров в категориях
4) Получение параметров необходимых для выполнения запросов
Выполняются корректно и возвращают читаемые данные. А именно:
HTTP заголовки: Cookie, ltk, SK, sks, sessionid, shumeiId, traceparent.
Необходимо выяснить как они генерируются, влияние на запросы, и как часто их необходимо обновлять
Тело запроса или параметры: необходимо подготовить скрипт (любой язык, в идеале Java) который будет переводить из строки в зашифрованные данные, и обратно.
Также необходимо предоставить список параметров для каждого запроса из списка выше и их значение.
Поиск без номера: необходимо выяснить при каких условиях запрос отправляется корректно, не запрашивая аутентификацию по номеру телефона. Т.е при запросе на https://app.dewu.com/api/v1/h5/search/fire/search/list?data=... должен выводится результат поиска со списком товаров, а не код ошибки. Если окажется что влияет отпечаток бразуера надо выяснить как генерировать отпечатки браузера, с которыми запросы будут проходить корректно. Метод обхода должен работать стабильно.
На выходе ожидаю получить список эндпоинтов и стабильный алгорим успшного запроса к каждому из эндпоинтов (успешным считается тот, который выдал данные о товарах)
Что уже известно:
Эндпоинт поиска: https://app.dewu.com/api/v1/h5/search/fire/search/list
Главная страница: https://m.dewu.com/router/pages/index/index
Шифрование происходит в скрипте https://davstatic.dewu.com/pstone.js?t=wukong_version_536
Деобфусцированную версию этого скрипта прикреплю к сообщению.
Само зашифрованное сообщение состоит из 2 частей: ключи для дешифровки (в RSA?) и зашифрованные данные в AES. Библиотека шифрования CryptoJs
Примерный алгоритм шифрования на примере эндпоинта https://dav.dewu.com/webSk:
1) C помощью функции _0x23ad34 генерирутся общий ключ длинной 48 символов из символов 0123456789ABCDEF
2) Данные переводятся в Json
3) Парсятся из UTF-8 (строка 2672)
4) Шифруются с помощью AES.
Ключ шифрования: подстрока из ранее сгенерированного общего ключа c 10 до 26 символа
initialization vector (IV): подстрока из ранее сгенерированного общего ключа c 20 до 36 символа
Режим: CBC
Padding: Pkcs7
5) Далее берется ciphertext и переводится в uppercase. ciphertext.toString().toUpperCase(). Данные зашифрованы.
Шифрование общего ключа для расшифровки данных:
1) Общий ключ шифруется публичным ключем на строке 2654
2) Затем выполняются некоторые преобразования на строках с 2655 до 2699. Ключ зашифрован
Затем выполняется связывание данных.
ЗАШИФРОВАННЫЙ_КЛЮЧ ЗАШИФРОВАННЫЕ_ДАННЫЕ (без пробела, баг телеги, не могу убрать)
Далее добавляется параметр sign который представляет из себя md5 строки которая была получена на строках 2691-2715 + соль 048a9c4943398714b356a696503d2d36
Дешифрока происходит теми же ключами что и шифрование. Ответ приходит в HEX формате
https://cloud.mail.ru/public/k4aH/UsunpUWxQ
Если у вас есть еще вопросы, пожалуйста, задавайте
Гарантии | Бесплатные доработки |
Комиссия | 0% |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Система оплаты | Безопасная сделка |