Pull to refresh

Интересная техника сокрытия кодов JS «вируса»

Reading time2 min
Views6.4K
Сегодня скинули код, дропающий на машину штатный вирус «отправьте SMS для разблокировки». Предысторию и методику чистки изложил force

Попробовал расковырять. Взял код, отформатировал, стал дебагать… Хм, интересно… В коде идет вызов (после приведения к читабельному виду)

window['eval'](var2);

А вот в var2 — бинарные данные. Ух ты… Но ведь eval не может выполнять бинарные данные!!!


Поглядел код… а он оказывается для дешифровки использует свое тело и, соответственно, после форматирования кода тело изменилось и результат дешифровки тоже.

Значит надо как-то запустить неформатированный код и при этом ничего вредного не словить. Как? Вызов debugger; не вставить, брейкпоинт не сделать — все в одну строку…

Зная что скрипт делает eval можно применить вот такую конструкцию:

window.eval = function(arg) {
 debugger;
}


После чего успешно словить вызов eval и получить весь код, который вирус пытался выполнить…

UPD1: Собственно, к чему я это все? Раньше мне не встречались такие изощренные конструкции. В основном применялся простой eval(base64_decode('...')); Ну и ИМХО интересный метод отладки через переопределение eval…

UPD2: Попытка деобфускейта и расковырки первичного «вируса» — тыц. Исходный код (до операции) видно на 22 строке. То, что было там ранее — на следующей в комментарии. Запускать не пробовал =). Файл детектируется эвристическими анализаторами антивирусов.

UPD3: Уже сейчас, разобрав код, понятно, что декодировщик не использует весь свой код для работы. Ему нужны только числа и не важно их положение, важен порядок. Изначальный «глюк» с бинарными данными получился потому, что я поменял название функции на более человечное. А как видно там были числа. Именно по этому все и сломалось. Добавление новых не-чисел не влияет на работу скрипта.

UPD4: Что в итоге делал полученный код? Он определял браузер, установленные плагины и прочую интересную для дальнейших действий информацию (включена ли Java, язык системы (?)). Далее, в соответствии с полученными данными, формировался URL для получения дальнейшего скрипта, который, в свою очередь, рендерил на страницу наиболее подходящий для данной конфигурации эксплойт. В моем окружении это был Java-апплет. Как сообщили коллеги — загружаемый по ссылке апплет использует вот эту уязвимость. Коды «вторичного» вируса и сам апплет-эксполит имеются.

UPD5: В каментах сообщают об экстеншене для FF, который позволяет видеть весь определенный и выполненный на странице код
Tags:
Hubs:
+81
Comments44

Articles