Содержание статьи
Прежде чем обратиться ко мне, приятель несколько раз попытался открыть файл из архива. По его словам, ничего не произошло. Но я все равно велел ему немедленно выключить компьютер и вытащить из него жесткий диск. Однако было слишком поздно.
Вирус уже успел зашифровать половину файлов на диске D и даже забрался в расшаренную папку. Часть файлов удалось восстановить с помощью инструментов для восстановления удаленных файлов, но по закону подлости самые важные файлы были утрачены. Дальше классика жанра: на рабочем столе появилась новая картинка, а также текстовый файл с требованием определенной суммы за расшифровку данных и контактами злоумышленника.
Позднее я решил разобраться с этим вирусом в песочнице (VirtualBox + Windows XP). В архиве я обнаружил файл JavaScript, точнее файл с расширением .js
и содержимым, по синтаксису напоминающим JavaScript.
...
function yW() {
var lN="";
lN=lN+W(101)+W(5085/45-0)+W(54+56)+W(983-875)+W(1056/16+0)+W(32+71)+W(3456/36+0)+W(1045-932)+W(885-819)+W(10*11)+W(26+73)+W(823-723);
return lN;
}
function Gyh() {
var eKt="";
eKt=eKt;
return eKt;
}
function Wb(Ea, Ki) {
var kO = w(Ea);
var YM = Szh();
var Ofr = w(Ki);
var laN = [To()][RkE()];
while (YM < kO) {
var hN = YM / ie();
var cra = Ea[Hn()](YM);
YM = YM + Efo();
cra = cra + Ea[mO()](YM);
YM = YM + Fi();
var mM = Bie(cra, dkW());
var WzA = Ki[CC()](hN % Ofr);
var dCt = mM ^ WzA;
var bHh = String[yW()](dCt);
laN = laN + Gyh() + bHh;
}
return laN;
}
...
Неправильные пчелы
«Это неправильные пчелы! И JavaScript у них какой-то неправильный», — подумал я. К тому же путь от открытия файла .js
до шифрования файлов, на первый взгляд, не прослеживался.
Есть в Windows такая вещь, как WSH — сервер сценариев Windows. Он используется для запуска сценариев, написанных на определенных скриптовых языках, в том числе и на JScript — такие скрипты имеют расширение .js
.
INFO
JScript — сценарный язык программирования компании Microsoft, являющийся реализацией стандарта ECMAScript. Синтаксис JScript во многом аналогичен языку JavaScript компании Netscape, однако JScript может использоваться не только для добавления клиентских скриптов на веб-страницы, но и для автоматизации администрирования Windows. За выполнение таких скриптов отвечает компонент WScript — Windows Script Host. Помимо языка JScript, поддерживается VBScript, а также и некоторые другие дополнительно устанавливаемые языки (например, Perl).
Переменные в коде — случайный набор букв. Также мы знаем, что код содержит около ста функций, которые возвращают результат арифметических действий над константами, и около двадцати функций, которые тем или иным образом обрабатывают эти результаты. Некоторые функции аналогично работают со строковыми константами. Это говорит о том, что код хорошо обфусцирован.
Весь секрет заключается в функции eval()
. Эта функция выполняет код, переданный ей в качестве строки, а возвращает значение, равное последнему выражению. Рассмотрим одну из функций нашего шифровальщика.
function W(svu) {
var bHh = eval(Nx() + (svu+1) + uSk());
return bHh;
}
Давай разберемся, что здесь происходит.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»