Вредонос на JS. Как Chrome помог мне реверсить вирус-шифровальщик

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

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

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

Переменные в коде — случайный набор букв. Также мы знаем, что код содержит около ста функций, которые возвращают результат арифметических действий над константами, и около двадцати функций, которые тем или иным образом обрабатывают эти результаты. Некоторые функции аналогично работают со строковыми константами. Это говорит о том, что код хорошо обфусцирован.

Весь секрет заключается в функции eval(). Эта функция выполняет код, переданный ей в качестве строки, а возвращает значение, равное последнему выражению. Рассмотрим одну из функций нашего шифровальщика.

function W(svu) {
  var bHh = eval(Nx() + (svu+1) + uSk());
  return bHh;
}

Давай разберемся, что здесь происходит.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *