Наверняка ты хоть раз получал по электронной почте письмо со ссылкой на подозрительный архив. Авторы таких писем делают все возможное, чтобы невнимательный пользователь перешел по ссылке и позволил заразить свой компьютер. Подобное письмо пришло и моему приятелю, и так он стал одной из жертв. А что это был за вредонос, мы разберемся вместе.

Прежде чем обратиться ко мне, приятель несколько раз попытался открыть файл из архива. По его словам, ничего не произошло. Но я все равно велел ему немедленно выключить компьютер и вытащить из него жесткий диск. Однако было слишком поздно.

Вирус уже успел зашифровать половину файлов на диске 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», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Shit gets real. Колонка главреда

В этом выпуске колонки я хотел бы поделиться с тобой небольшой личной историей, оттолкнувш…

3 комментария

  1. Аватар

    shchko25

    04.02.2019 at 13:47

    Тот же эффект можно было получить просто запустив на виртуалка и отслеживая активность скрипта. Вышло бы быстрее на много.

Оставить мнение