我发现了一个网址请求,我的Drupal网站上有一个可疑代码。有人会解释这段代码的深度,并建议采取任何预防措施。代码:
function (){try{var _0x5757=["/x6C/x65/x6E/x67/x74/x68","/x72/x61/x6E/x64/x6F/x6D","/x66/x6C/x6F/x6F/x72"],_0xa438x1=this[_0x5757[0]],_0xa438x2,_0xa438x3;if(_0xa438x1==0){return};while(--_0xa438x1){_0xa438x2=Math[_0x5757[2]](Math[_0x5757[1]]()*(_0xa438x1 1));_0xa438x3=this[_0xa438x1];this[_0xa438x1]=this[_0xa438x2];this[_0xa438x2]=_0xa438x3;};}catch(e){}finally{return this}}
网站返回页面未找到错误,我发现没有任何问题。
答案 0 :(得分:1)
通过beatifier运行此代码,您将收到:
function () {
try {
var _0x5757 = ["/x6C/x65/x6E/x67/x74/x68", "/x72/x61/x6E/x64/x6F/x6D", "/x66/x6C/x6F/x6F/x72"],
_0xa438x1 = this[_0x5757[0]],
_0xa438x2, _0xa438x3;
if (_0xa438x1 == 0) {
return
};
while (--_0xa438x1) {
_0xa438x2 = Math[_0x5757[2]](Math[_0x5757[1]]() * (_0xa438x1 1));
_0xa438x3 = this[_0xa438x1];
this[_0xa438x1] = this[_0xa438x2];
this[_0xa438x2] = _0xa438x3;
};
} catch (e) {} finally {
return this
}
}
首先,让我们重命名一些变量并解密第三行中的字符串数组。我已将_0x5757
重命名为arr
并转义了数组中的十六进制字符。这给了你:
var arr = ["length", "random", "floor"],
所以这里我们有一个将很快使用的函数列表。替换字符串并重命名变量,您将收到:
function () {
try {
var arr = ["length", "random", "floor"],
length_func = "length",
rand_number, temp;
if (length_func == 0) {
return
};
while (--length_func) {
rand_number = Math["floor"](Math["random"]() * (length_func 1));
temp = this[length_func];
this[length_func] = this[rand_number];
this[rand_number] = temp;
};
} catch (e) {} finally {
return this
}
}
注意生成随机数时脚本中是否存在语法错误。
* (length_func 1)
带有length_func = "length"
的是无效的JavaScript语法,因此代码实际上不起作用。我仍然可以猜测它应该做什么:如果我们通过执行Math["floor"]
而不是Math.floor()
来删除调用函数的混淆,重要的行是
while (--length_func) {
rand_number = Math.floor( Math.random() * ( length 1 ));
temp = this.length_func;
this.length_func = this.rand_number;
this.rand_number = temp;
};
它似乎尝试使用Math.random()
和Math.floor()
计算随机整数,然后交换变量length_func
和rand_numerber
的内容,所有内容都包含在{ {1}}循环。这里没有任何功能或任何有意义的东西。试图挂在浏览器上的infinte循环可能吗?现在的代码是非功能性的。它甚至无法生成随机数,因为while(--length_func)
将始终向下舍入输入的浮点数,Math.floor()
将生成0.0到1.0之间的数字,因此几乎总是略低于1.0,因此{{ 1}}大部分时间。与Math.rand()
输出与rand_number = 0
的乘法可能应该使数字更大,但语法无效。当我使用浏览器的控制台执行rand()
时,当我尝试执行length_func 1
,然后length
时,它会0
给我length(1)
length is not a function
这里有意义的是字符串长度或数组长度,但它必须显式为length
。希望这会对你有所帮助。