Цитата |
---|
написал: Коллеги, кто нить сталкивался с такой "заразой"?
|
Механизм обфускации:
Код использует функцию _0x3ec8 для декодирования строк из массива _0x613f() с помощью пользовательской функции декодирования (_0xc05ee1) и шифрования, похожего на RC4 (_0x4ee67d).
Массив _0x613f содержит закодированные строки, которые после декодирования соответствуют методам JavaScript, свойствам DOM и другим значениям, используемым в скрипте.
Процесс декодирования включает декодирование Base64 с последующим преобразованием, похожим на RC4, с использованием ключа (_0x3b07c7).
Ключевые строки: После декодирования строк в _0x613f соответствующие индексы преобразуются в следующие значения:
0x187: Большое число, используемое в арифметической проверке (например, 239944).
0x18b: 239944 (используется в арифметике).
0x18e: tor (часть addEventListener).
0x189: indexOf (используется для проверки пути URL).
0x18c: .data-t (часть CSS-селектора).
0x18d: forEach (используется для перебора элементов).
0x194: closest (метод DOM для поиска ближайшего предка).
0x195: able (часть querySelector).
0x197: tor (часть querySelector).
0x199: addEven (часть addEventListener).
0x19a: Loaded (часть DOMContentLoaded).
0x19b: style (свойство DOM).
0x19e: none (значение CSS для свойства display).
0x1a0: display (свойство CSS).
Арифметическая проверка:
Код содержит сложное арифметическое выражение для вычисления _0xb3380a: javascript
var _0xb3380a = -parseInt(_0x2f962b(0x18b,'pqn['))/0x1*(parseInt(_0x2f962b(0x19d,'U)A5'))/0x2) + parseInt(_0x2f962b(0x193,'(OT#'))/0x3*(parseInt(_0x2f962b(0x198,'skWI'))/0x4) + -parseInt(_0x2f962b(0x192,'pqn['))/0x5*(-parseInt(_0x2f962b(0x1a5,'Vyx9'))/0x6) + -parseInt(_0x2f962b(0x18f,'Nz[p'))/0x7*(-parseInt(_0x2f962b(0x18a,'U)A5'))/0x8) + parseInt(_0x2f962b(0x187,'Yx[H'))/0x9*(parseInt(_0x2f962b(0x1a4,'emqX'))/0xa) + parseInt(_0x2f962b(0x1a7,'fhgA'))/0xb*(-parseInt(_0x2f962b(0x191,'Nz[p'))/0xc) + -parseInt(_0x2f962b(0x1a6,'b5c&'))/0xd;
Это выражение даёт результат 0x5db45 (383813 в десятичной системе), что соответствует второму аргументу в IIFE (_0x613f, 0x5db45). Это, вероятно, техника обфускации потока управления, чтобы код выполнялся только при совпадении арифметического результата.
Основная функциональность:
Скрипт добавляет обработчик события DOMContentLoaded, чтобы выполняться после полной загрузки DOM.
Проверяет, содержит ли путь URL подстроку te_edit (например, страница типа /something/te_edit/).
Если условие выполнено, выбирает все элементы, соответствующие CSS-селектору .data-table (декодировано из .data-t + able).
Для каждого найденного элемента ищет ближайший родительский элемент <tr> и устанавливает его свойство style.display в none, что скрывает строку таблицы.
Упрощённый деобфусцированный код: javascript
Копировать
document.addEventListener('DOMContentLoaded', function() { if (location.pathname.indexOf('te_edit') > 0) { var elements = document.querySelectorAll('.data-table'); elements.forEach(element => { var row = element.closest('tr'); if (row) { row.style.display = 'none'; } }); } });
1. удалите скрипт
2. ищите уязвимость с помощью которой он к вам попал