Javascript反混淆工具(第二部分)
由darryl在2011年6月25日发表
在以前的文章中,我手动反混淆了三个恶意脚本。这一次,我将使用公开可用的工具,看看哪些可以处理现实世界混淆的Javascript代码。
下面是我选择工具的标准:
1。免费
2。基于Windows
3。易于安装和使用(即针对新手用户)
这是我选择测试的工具:
* Creme Brulee
* Firebug – Firefox plug-in
* Google Chrome Developer Tools
* Javascript Deobfuscator – Firefox plug-in
* JSDebug
* Malzilla
* Microsoft IE8 Developer Tools
* Microsoft Script Debugger
* Rhino
* SpiderMonkey + V8
* The Mina
除此之外也有其它工具可供使用,但我没有测试它们,因为我认为它们不符合上述的要求,其中包括: Aptana Studio, Caffeine Monkey, DecryptJS, JSUnpack, Microsoft Script Editor, NJS Javascript Interpreter, Venkman, 和 Wully
我将使用与上次相同的恶意javascripts。下面回顾一下:
相当简单的混淆,在页面中插入iframe框架。
使用DOM将脚本附加到网页。
反混淆2层需要除去的代码,得到浏览器利用代码。
Creme Brulee
这个工具能够处理简单的混淆脚本,但不像其它的工具那样强大。当它试图处理一个脚本时IE可能会挂起
Firebug (火狐浏览器插件)
Firebug还原了所有的三个脚本,但难处在于在哪里找到混淆的代码。你可能需要对恶意脚本有些初步的了解,以便确定脚本在何处结尾。
另一个难点是暂停页面加载,这样你可以在恶意重定向发生和改写变量之前得到还原后的脚本。
Google Chrome Developer Tools
Chrome有一个调试器和一系列其它的内置工具。Chrome可以很快的处理这三个脚本并输出还原后的脚本。这个工具可以说是这些工具中最强大和最灵活的。你需要浏览脚本找到需要的变量。
苹果的Safari有一个非常类似的开发工具(在功能和外观方面),这就是为什么我选择不单独测试它的原因。
Javascript Deobfuscator (火狐浏览器插件)
当Firefox运行脚本时,这个插件会在自己的窗口捕获这些脚本。这个工具是最容易使用,因为所有你需要做的就是运行这个插件,用它解决页面中的Javascript。它能够处理所有三个脚本,无​​需任何用户交互(尽管它并没有完全解密第二个样本 - 只显示了URL)。
处理多个脚本后可能会遇到反应变慢和停止响应的情况,重启Firefox可以解决此问题。
JSDebug
这实际上是你分析时需要引用的一个外部脚本。一个独立的弹出窗口显示了Eval的执行结果。这是一个聪明的想法,但它无法反混淆所有的三个脚本。我给出了“略有不足”的评价,因为它只还原了第三个脚本中两个eval的第一个。
Malzilla
Malzilla是一个伟大的程序,提供了很多的灵活的选择,选项和工具包,对Javascript的反混淆大有助益。Malzilla高手可以利用这个工具来破解非常困难的脚本,但我只是初探反混淆脚本,并无必要过多关注其它功能。
在最后的脚本,只有一个两层的解密。你可以在这一点上做一些还原操作,但我想让它更简单更容易。
Microsoft IE8 Developer Tools
这个工具是相当容易使用,为了在合适的位置下断点,你需要了解你正在处理的脚本。DOM脚本只是部分还原。
Microsoft Script Debugger
虽然MSD不如IE8 Developer Tools灵活和强大,但我仍得到了相同的结果。同样的难点是找到下断点的位置。
Rhino
这是一个基于Java的调试器,使你可以插入断点获取变量中还原的值。因此,你需要对尝试分析的脚本有初步的了解。
SpiderMonkey + V8
SpiderMonkey在简单的脚本上表现不错,但有两个脚本对它来说太大了。我也在后台使用了Kahu Security的同事为Windows编译的Google的V8引擎。我最终得到了相同的结果。
如果你有兴趣,我包含了一个外部JS文件,即下面只有一行的代码。这有助于我反混淆(我还需要找到处理基于DOM的脚本的方法)。你也可以复制/粘贴此行代码到你试图用SpiderMonkey或V8反混淆的脚本的顶部。function eval(zyxyz){print(zyxyz);}document={write:print};window={write:print};
The Mina
Mina似乎反混淆了三个脚本中的两个,但因为输出限制为1000字节以内,结果就被截断了。
此工具有很大的潜力。如果启动时间缩短,并增加输出的大小,就反混淆结果而言,这将是与IE8 Developer Tools和Script Debugger难分伯仲的工具,但它更容易使用,因为你不必担心断点的问题。C + +源代码开放,因此,如果有人想制作一个新的版本,我愿意帮忙测试。
下面是最终的结果:
结果难以定论,因为样本太小,但它应该给你一些想法:你应选择哪些工具。你可能要考虑进一步测试。这里可能不会有能反混淆所有脚本的完美工具,但其中可能有几个在特定情况下表现足够出色,有助于你的分析。
另一件需要考虑的事是有些深度混淆的脚本可经熟练分析者之手使用这些工具破解掉。你可能需要花费大量的时间得到你想要的结果。
Post Script
关于这个实验的一些想法...
看来,多层Eval和基于DOM的脚本是不容易反混淆的。Chrome和Firebug是唯一正确反混淆所有三个样本的工具。其他Firefox插件,Javascript Deobfuscator,和Microsoft debuggers都仅居次席。
一些工具需要一些脚本的知识。你不能到处下断点,希望下的是合适的地方。在某些情况下,你需要在工具界面里混淆的代码中寻找,你的脚本知识会助你一臂之力。
这些工具中的大部分只能和一种特定的浏览器一起使用。如果该脚本检测浏览器或使用非标准的函数,那么你的结果会有所不同。
调试器,Firefox插件等将你的PC上执行潜在的恶意脚本,所以要小心!你可能想断开你的的网络连接,以防止不必要的重定向和使用一个没有安装Java,Flash和Acrobat的虚拟机。
最后,留意反调试代码,如下面的例子。如果你单步执行代码,这个脚本不会响应。当然,它不会被这样明显地写入,这有几十种不同的可能性和方法混淆。var a = new Date().getTime();
var b = "%68%65%6C%6C%6F";
var c = new Date().getTime();
if(a==c) {
alert(unescape(b));
}
|