吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9184|回复: 3
收起左侧

[PC样本分析] Javascript Deobfuscation Tools

[复制链接]
是昔流芳 发表于 2012-1-30 18:37
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
Javascript反混淆工具(第一部分)

由darryl在2011年6月17日发表

反混淆Javascript可能会非常棘手,所以为什么不使用工具让工作更容易?这里有几个工具可以帮助你反混淆Javascript。我得到这些工具之前,我想向您展示如何手动反混淆它们。我已经收到了很多来自那些想学习如何反混淆恶意脚本的家伙们的要求,所以这篇文章是为你而准备的。

让我们来看一下恶意脚本。这些脚本都是在网络上发现并以难度为基础随机选取的。我把这些脚本上传到Pastebin.com,这样你就可以尝试一下了(警告,这些都是真正的恶意脚本,所以请采取必要的防护措施!)。

例1

01.png

这个脚本很简单,而且用工具来处理十分便捷。这里掺杂了除了扰乱你的眼球外不执行任何操作的注释。脚本连接了大量的由文本转换并被颠倒的16进制字符串。每一个字符可以由一个字符串和被引用的对应新字符查询到。

这是要搜索的字符,第二行是颠倒后的值。

SP%cpH2W5C83fEX:1rjF9AQdMlKi/sk4GuvtxJOBm_U.NqzY7aw&nhgZoVT=0IbRDye?6-L
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/.:_-?&=%

例如,如果第一个值是“L”,它将会被转换成“%”。这些新的字符连接在一起,形成另一个转义为最终脚本的十六进制字符串。

这里是对脚本的反混淆过程。

02.png

这是你得到的结果:

03.png

由于这篇文章是关于工具的,这里有个我写的程序。它被叫做Revelo,但并不是正式版本。这个工具可以实现手工反混淆代码的一些步骤。这不是一个调试器而且更像一套工具。

Revelo有一个内置的数据包嗅探器和代理,这样我可以捕获既有的HTTP请求,并没有实际访问该页面。它也有一个内置的防火墙,以防止我的电脑意外重定向。

04.png

此外,它还可以还原被混淆的代码。我选择“Enclose Javascript in TextArea” 选项并得到了结果:

05.png

例2

06.png

这个脚本也很简单。到处使用假变量让它看起来很难。你看到的十六进制代码实际上是重定向URL代码附加了一个Body部分使用DOM的新脚本。DOM的使用可以使JavaScript工具发生错误,这使得反混淆这个有点难度。

要获得反混淆后的代码,我们要读通脚本,并了解所使用的变量。我使用Revelo内置的Javascript beautifier清理脚本。现在我们可以看到变量“__” 包含URL,变量B包含Body部分附加的对象。下面是我们反混淆的步骤。

07.png

结果是这样的:

08.png

使用Revelo,我可以查看关键元素,或遍历DOM树然后得到结果:

09.png

在这里,我选择“Intercept DOM with Variable”选项,并输入“B”的变量。这和我们以上的手动操作基本上是同样的事情。

10.png

例3

11.png

这是一个严重混淆的脚本。该脚本每次使用了两个传递和结果求值。有些工具可能只是反混淆第一个eval和但没有成功解出第二个eval。

上面部分有很多定义为变量“uXGJZXGp”的花代码这部分最后需要被还原。十进制数值中间被管道字符分隔。底部的Javascript先处理执行值为195的逐位异或后简单地转换成十进制文本后的这部分内容。将顶部的花代码转换成利用代码的脚本之后,该脚本会被执行。
该脚本需要在两部分反混淆。我将使用Revelo,因为它基本上是和手工一样,而且是容易观察的。

为反混淆第一部分,你可以在末尾的变量“hTN1NQic前加上alert (例如 “alert(hTN1NQic);” ). Revelo可以做同样的事情,但能多给我一点灵活性。我选择“Intercept Function with Name”,然后输入“PlrBMHYO.eval”。Revelo将函数名称转换为“document.write”(如“document.write(”hTN1NQic“);”)。

12.png

我们已经把第一部分还原了。我要复制的原始脚本的一部分,并去掉在底部的脚本以及十进制部分(基本上,你需要保留存储在变量“uXGJZXGp”的花代码)。这是它的本来面目:

13.png

这个新的脚本从变量“uXGJZXGp”中选取某些特定字符,并以一个看似随意的模式排列。这是花代码的前63个字符:

tp "ht ost :/ .cc"c=h.acke/z;10dezccp 05y 4fc257"fcf=dfa6940...

第一个和第五个字符交换位置,第二个和第六个交换位置。然后开始每三个字符交换。每两个字符进行循环。依此类推。这就是字符串在每次循环后的变化(共九个):

123456789012345678901234567890123456789012345678901234567890123
tp "ht ost :/ .cc"c=h.acke/z;10dezccp 05y 4fc257"fcf=dfa6940
"ht tp :/ ost "c=h .cce/z;.ackzccp10de 4fc 05yfcf=257"dfa6940
t"ht:/ p "cost.cc=h ;.ae/zccpckze 410d05yfc =25fcffa67"d940
t" :/ht pco ".csth c=ae;.cc/zkzpc41e 050dc yf5f=2facf"d67940
:/t" pht ".cco c=sth.ccae;zpc/zk 0541e yf0dc2fa5f=d67cf"940
: t/ " hp t."cc oc s=htc.ac;epz/ckz0 45e1y 0fcdf25a=f6dc7"f490
t/: " thpcc."c ohts=acc.pz;ekz/c450 y e1cd0f5af26d=f"fc7490
" thpt/: ohts=cc."c ;ekz/cacc.pze1cd0f450 y =f"fc75af26d490
ohts= " thpt/:z/cacc.pzcc."c ;ek y =f"fc7e1cd0f4505af26d490
host = "http://zacccp.cz.cc"; key = "fcfe7c10d4f05a52fd6940

在脚本的底部,你可以看到这个变量的引用。我使用相同的“Intercept Function with Name” 选项 ,它和显示此变量的功能类似(例如 “alert(uXGJZXGp);” )。

14.png

这里你就可以得到反混淆后的脚本了。

在第二部分中,我将尝试使用不同的Javascript工具反混淆脚本。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 是昔流芳 发表于 2012-1-30 18:48
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框架。

01.png

使用DOM将脚本附加到网页。

02.png

反混淆2层需要除去的代码,得到浏览器利用代码。

03.png

Creme Brulee
这个工具能够处理简单的混淆脚本,但不像其它的工具那样强大。当它试图处理一个脚本时IE可能会挂起

04.png

05.png

06.png

Firebug (火狐浏览器插件)
Firebug还原了所有的三个脚本,但难处在于在哪里找到混淆的代码。你可能需要对恶意脚本有些初步的了解,以便确定脚本在何处结尾。

另一个难点是暂停页面加载,这样你可以在恶意重定向发生和改写变量之前得到还原后的脚本。

07.png

08.png

09.png


Google Chrome Developer Tools
Chrome有一个调试器和一系列其它的内置工具。Chrome可以很快的处理这三个脚本并输出还原后的脚本。这个工具可以说是这些工具中最强大和最灵活的。你需要浏览脚本找到需要的变量。

苹果的Safari有一个非常类似的开发工具(在功能和外观方面),这就是为什么我选择不单独测试它的原因。

10.png

11.png

12.png

Javascript Deobfuscator (火狐浏览器插件)
当Firefox运行脚本时,这个插件会在自己的窗口捕获这些脚本。这个工具是最容易使用,因为所有你需要做的就是运行这个插件,用它解决页面中的Javascript。它能够处理所有三个脚本,无​​需任何用户交互(尽管它并没有完全解密第二个样本 - 只显示了URL)。

处理多个脚本后可能会遇到反应变慢和停止响应的情况,重启Firefox可以解决此问题。

13.png

14.png

15.png

JSDebug
这实际上是你分析时需要引用的一个外部脚本。一个独立的弹出窗口显示了Eval的执行结果。这是一个聪明的想法,但它无法反混淆所有的三个脚本。我给出了“略有不足”的评价,因为它只还原了第三个脚本中两个eval的第一个。

16.png

17.png

18.png

Malzilla
Malzilla是一个伟大的程序,提供了很多的灵活的选择,选项和工具包,对Javascript的反混淆大有助益。Malzilla高手可以利用这个工具来破解非常困难的脚本,但我只是初探反混淆脚本,并无必要过多关注其它功能。

在最后的脚本,只有一个两层的解密。你可以在这一点上做一些还原操作,但我想让它更简单更容易。

19.png

20.png

21.png

Microsoft IE8 Developer Tools
这个工具是相当容易使用,为了在合适的位置下断点,你需要了解你正在处理的脚本。DOM脚本只是部分还原。

22.png

23.png

24.png

Microsoft Script Debugger
虽然MSD不如IE8 Developer Tools灵活和强大,但我仍得到了相同的结果。同样的难点是找到下断点的位置。

25.png

26.png

27.png

Rhino
这是一个基于Java的调试器,使你可以插入断点获取变量中还原的值。因此,你需要对尝试分析的脚本有初步的了解。

28.png

29.png

30.png

SpiderMonkey + V8
SpiderMonkey在简单的脚本上表现不错,但有两个脚本对它来说太大了。我也在后台使用了Kahu Security的同事为Windows编译的Google的V8引擎。我最终得到了相同的结果。

如果你有兴趣,我包含了一个外部JS文件,即下面只有一行的代码。这有助于我反混淆(我还需要找到处理基于DOM的脚本的方法)。你也可以复制/粘贴此行代码到你试图用SpiderMonkey或V8反混淆的脚本的顶部。
function eval(zyxyz){print(zyxyz);}document={write:print};window={write:print};
31.png

32.png

33.png


The Mina
Mina似乎反混淆了三个脚本中的两个,但因为输出限制为1000字节以内,结果就被截断了。

此工具有很大的潜力。如果启动时间缩短,并增加输出的大小,就反混淆结果而言,这将是与IE8 Developer Tools和Script Debugger难分伯仲的工具,但它更容易使用,因为你不必担心断点的问题。C + +源代码开放,因此,如果有人想制作一个新的版本,我愿意帮忙测试。

34.png

35.png

36.png

下面是最终的结果:

37.png

结果难以定论,因为样本太小,但它应该给你一些想法:你应选择哪些工具。你可能要考虑进一步测试。这里可能不会有能反混淆所有脚本的完美工具,但其中可能有几个在特定情况下表现足够出色,有助于你的分析。

另一件需要考虑的事是有些深度混淆的脚本可经熟练分析者之手使用这些工具破解掉。你可能需要花费大量的时间得到你想要的结果。

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));
}
 楼主| 是昔流芳 发表于 2012-1-30 21:35
oldmanguo 发表于 2012-2-1 12:00
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-14 14:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表