Весь контент в этой статье предназначен только для обучения и общения, а не для каких-либо других целей. Полный код не предоставляется. Содержимое захвата пакетов, конфиденциальные URL-адреса, интерфейсы данных и т. д. были десенсибилизированы и строго запрещены для коммерческих и незаконных целей. В противном случае все последствия, вытекающие из этого, не имеют к автору никакого отношения!
Эту статью запрещено перепечатывать без разрешения и распространять после каких-либо изменений. Автор не несет ответственности за любые несчастные случаи, вызванные несанкционированным использованием технологии, описанной в этой статье. В случае каких-либо нарушений, пожалуйста, свяжитесь с автором. в публичном аккаунте [K Brother Reptile], чтобы немедленно удалить его!
В последнее время Dongdong также постоянно проходит техническое обслуживание и модернизацию. h5st параметр, Причина в том, что постепенно ВМПизация
,прибыл сейчас 4.7
Версия сейчас относительно стабильна, поэтому давайте ее проанализируем.
Цель: Что-то h5st 4.7 параметр Обратный анализ
Веб-сайт: aHR0cHM6Ly93d3cuamQuY29tLw==
Давайте сначала захватим пакет и проанализируем его. Если мы найдем интерфейс с параметром h5st, мы сможем напрямую увидеть его версию:
Есть еще один x-api-eid-token. Это токен контроля рисков. Сгенерированное местоположение выглядит следующим образом:
Он также возвращается интерфейсом. Параметры a и d генерируются большим количеством информации о среде браузера и отпечатках пальцев. Я не буду здесь их подробно анализировать. Давайте сначала посмотрим на параметры h5st. подробно.
Чтобы найти место создания параметров h5st, вы можете напрямую выполнить поиск по Дафа или найти стек, чтобы быстро найти сгенерированное местоположение:
Следуйте за стеком:
Можно обнаружить, что он передал colorParamSign в асинхронную функцию window.PSign.sign, и возвращаемый результат имеет параметр h5st:
Возьмите начало параметра запроса,Затем colorParamSign из body Это параметр запроса перед Воляизом. body пройти SHA256 Никаких волшебных модификаций для шифрования и тестирования не существует, мы можем просто установить библиотеку напрямую.
Нажмите, чтобы войти window.PSign.sign Это здесь, в функции VMP Файл, также главныйиз Шифровать файлы:
Взгляните поближе,Откройте для себя шифрование Воля из основного процесса,И большинство функций шифрования и з были VMP-ифицированы.,Однако он оставляет немало характерных моментов:
Мы доступны во всех случаях vmp Операция из call Установите точку останова журнала в позиции из.,провести анализ,Но есть еще точки журнала,Не рекомендуется.
По характерным точкам осталось,На ключе из функции шифрования из позиции,Анализ точек останова,Вы можете увидеть открытый текст входящегоиз.,Вы также можете увидеть зашифрованный зашифрованный текст,Можно сэкономить много времени. Давайте найдем некоторые распространенные функции шифрования CryptoJS., AES,SHA, Base64 и т. д.
Почти везде можно найти около 10 мест для шифрования.,Код Операции изфункция,все написано вместе,И формат,Характеристики в основном те же:
входящий Объект для получения экспорта из функции шифрования:
Вы можете обнаружить, что внутри также есть стандарты. ob Режим обфускации, основная функция экспорта шифрования: o функция, первоначально непосредственно o Функция из возвращаемого значения, присвоенная HS Объект, который будет передан позже HS возражать против o Затем функция экспортируется, поэтому HS Объект должен содержать все криптографические функции.
Мы можем взглянуть на выходные данные, найти следующую позицию и отрезать ее. Вот окончательная генерация сращивания. h5st из Расположение:
Затем выведите объект HS:
Нажмите соответствующую функцию шифрования.,Нижняя точка останова,Это сделает его более точнымиззнаю, как это сделать Операция из(На самом деле, точки останова можно ставить на всём)Для удобства я установил только следующие ключевые точки останова::
После того, как мы сделали повторный запрос, он был отключен на AES:
здесьиз n, a Это должно быть key,iv , некоторые люди могут это не понять, ничего страшного, мы можем это преобразовать:
const CryptoJS = require('crypto-js');
var Bytes ={
words: [1598895705, 1063548518, 1312043094, 1296456536],
sigBytes: 16
};
var key = CryptoJS.enc.Utf8.stringify(Bytes);
console.log(key);
var Bytes = CryptoJS.enc.Utf8.parse(key);
console.log(Bytes);
Протестируйте и узнайте AES Следуйте стандарту AES Результаты противоречивы. Возможно, магия что-то изменила. Проблема невелика. Продолжим спускаться.
Воля AES Результаты шифрования осуществляются Base64 Кодируя (также модифицированную магией), мы можем return из Обрыв:
Продолжать идти:
Давайте посмотрим на стек и введем test Это очевидно из того, как проводить операцию. из:
Тогда я искал это test Как это произошло? request_algo интерфейс
Возврат, обратите внимание Функции rd и шифрования являются динамическими.
:
Единственное, что необходимо детально проанализировать, это expandParams
,Это также генерируется с использованием необычной магической модификации шифрования AES.,ключевые значения разные
,Открытый текст в основном содержит некоторые экологические ценности.,Можно исправить в первую очередь,Подробного анализа здесь не будет.
Давайте еще раз взглянем на зашифрованное значение, чтобы предотвратить последующие вызовы:
Затем продолжайте идти и остановитесь здесь:
'5571a8dda12c510ad1922b90d6b048aba648d9a8c2fc679927fc1e7102520489appid:search-pc-java&body:64ef977e15f853295527f3ce1f15fc980963c43f27c40066d26dd19b542d0bd4&client:pc&clientVersion:1.0.0&functionId:pc_search_s_new&t:17152462710115571a8dda12c510ad1922b90d6b048aba648d9a8c2fc679927fc1e7102520489'
626bad7f7ebe126bb799ac619409778c8808864ad364bcb3d6a42bfb14af47b7
Если вы внимательно посмотрите на простой текст, то на самом деле это так. выше test Функция генерирует зашифрованные результаты + colorParamSign из сращивания + test Функция генерирует зашифрованные результаты。
Но мы не знаем, какую функцию шифрования он использует. Мы можем использовать. HS Проверьте функции шифрования под объектом одну за другой. Вы также можете поставить точки останова на другие функции шифрования. Возможно, кто-то сможет это напрямую подтвердить. Ха-ха, это было подтверждено. SHA256 Функция шифрования:
Продолжайте идти вниз, и вы дойдете до последнего поколения сплайсинга. h5st параметриз Расположение:
function format() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : Date.now()
, t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "yyyy-MM-dd"
, r = new Date(e)
, n = t
, a = {
"M+": r.getMonth() + 1,
"d+": r.getDate(),
"D+": r.getDate(),
"h+": r.getHours(),
"H+": r.getHours(),
"m+": r.getMinutes(),
"s+": r.getSeconds(),
"w+": r.getDay(),
"q+": Math.floor((r.getMonth() + 3) / 3),
"S+": r.getMilliseconds()
};
return /(y+)/i.test(n) && (n = n.replace(RegExp.$1, "".concat(r.getFullYear()).substr(4 - RegExp.$1.length))),
w_(a).forEach((function(e) {
if (new RegExp("(".concat(e, ")")).test(n)) {
var t, r = "S+" === e ? "000" : "00";
n = n.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : j_(t = "".concat(r)).call(t, a[e]).substr("".concat(a[e]).length))
}
}
)),
n
};
console.log(format(1715246309293, "yyyyMMddhhmmssSSS")) // 20240509171829293
request_algo интерфейс
возвращаться。h5st Параметры были сгенерированы и проанализированы, теперь нам осталось только HS Как получить функцию шифрования под объектом:
Это кажется сложным, но ob Путаница и т. д. На самом деле просто вычесть нормально, чего не хватает, восполнить, об. На самом деле не надо восстанавливать путаницу Просто вручную вычитать Мест для путаницы не так уж и много. 10 Такие из функций имеют одинаковую структуру:
После вычитания выведите HS объект,Вы можете напрямую вызвать функцию шифрования внутри,Уведомление Чтобы убедиться, что результаты шифрования браузера согласованы:
Уведомление:правильныйиз h5st не появится <Response [403]> из ситуации, 100% Данные можно получить: