Я наконец-то смог получить доступ к данным. Оказывается, тег CSS
устанавливался каким-то Javascript при загрузке страницы.Взглянув на сценарии, я обнаружил, что было сгенерировано много данных (вероятно, на стороне сервера), которые мне нужно было извлечь в первую очередь.
После нескольких часов поиска я наконец смог отследить функции, которыми был Javascript.используя для редактирования данных.их было несколько, и сервер рандомизировал порядок их использования для дальнейшего запутывания любых попыток взломать алгоритм:
function showbt(sid) {
return (dM(aM(bM(fM(gM(cM(sid)))))))
}
Здесь порядок был сгенерирован случайным образом, и 2 функции были введенывнутри источника веб-страницы и должен был каждый раз заменяться.
Мне удалось полностью перевести Javascript на Python, а также извлечь и обновить функции и порядок их использования, используя re
и requests
затем, используя сгенерированный код Python, наконец взломать шифрование.(Пример перевода:)
var _0x7052 = ["", "\x6C\x65\x6E\x67\x74\x68", "\x73\x75\x62\x73\x74\x72", "\x69\x6E\x64\x65\x78\x4F\x66"];
function aarf(_0xb5a3x2) {
var _0xb5a3x3 = 0;
var _0xb5a3x4 = 0;
var _0xb5a3x5 = _0x7052[0];
for (i = 0; i < _0xb5a3x2[_0x7052[1]]; i += 1) {
_0xb5a3x3 = stream[_0x7052[3]](_0xb5a3x2[_0x7052[2]](i, 1));
_0xb5a3x3 = _0xb5a3x3 * _0xb5a3x3 + 6 * _0xb5a3x3 + 6246;
_0xb5a3x3 = _0xb5a3x3 % stream[_0x7052[1]];
_0xb5a3x5 += stream[_0x7052[2]](_0xb5a3x3, 1);
};
return _0xb5a3x5;
};
переведенный UTF-8 в текст (здесь он использовался для запутывания кода):
var _0x7052 = ["", "length", "substr", "indexOf"];
function aarf(_0xb5a3x2) {
var _0xb5a3x3 = 0;
var _0xb5a3x4 = 0;
var _0xb5a3x5 = _0x7052[0];
for (i = 0; i < _0xb5a3x2[_0x7052[1]]; i += 1) {
_0xb5a3x3 = stream[_0x7052[3]](_0xb5a3x2[_0x7052[2]](i, 1));
_0xb5a3x3 = _0xb5a3x3 * _0xb5a3x3 + 6 * _0xb5a3x3 + 6246;
_0xb5a3x3 = _0xb5a3x3 % stream[_0x7052[1]];
_0xb5a3x5 += stream[_0x7052[2]](_0xb5a3x3, 1);
};
return _0xb5a3x5;
};
и, наконец, после замены функций массиваиз JS и переписывания в Python мы получаем:
def aarf(_0xb5a3x2) :
_0xb5a3x3 = 0
_0xb5a3x4 = 0
_0xb5a3x5 = ""
for i in range(0, len(_0xb5a3x2), 1):
_0xb5a3x3 = stream.index(_0xb5a3x2[i:i+1])
_0xb5a3x3 = _0xb5a3x3 * _0xb5a3x3 +6 * _0xb5a3x3 +6246 #REPNUM2
_0xb5a3x3 = _0xb5a3x3 % len(stream)
_0xb5a3x5 += stream[math.ceil(_0xb5a3x3):math.ceil(_0xb5a3x3)+1]
return _0xb5a3x5
#note that the REPNUM comment indicates there are 2 randomly generated numbers in this line, and they'll have to be extracted from the webpage and injected into this code.
Но пока нет ...
Сами кнопки были сгенерированы с веб-страницей, и идентификаторы в них также были зашифрованы,поэтому мне пришлось пройти те же шаги, что и выше, чтобы также расшифровать идентификаторы кнопок.
Тогда все, что осталось, - это сопоставить идентификатор дешифрованной кнопки с выводом дешифрованного кода Javascript и найти правильную кнопку для использования!
Любому, кто хочет сделать что-то подобное, помните, чтоJavascript, используемый для расшифровки правой кнопки, ВСЕГДА включается в веб-страницу каким-либо образом (иначе ваш браузер также не может найти нужную!), поэтому все, что вам нужно сделать, это проанализировать веб-страницу и ее работу очень тщательно, а затем попробоватьперепроектировать его поведение, чтобы использовать шифрование.
Я смог сделать это с небольшим опытом работы с javascript или HTML, поэтому, если я смогу это сделать, то вы тоже можете!Другой обходной путь - использовать Selenium
, но он не имеет доли мощности и скорости использования старого доброго requests
!