我最近正在分析一个包含一些高度混淆的JavaScript的网页-显然,作者已经付出了很多努力,以使其尽可能地难以理解。我已经看到了此代码的几种变体-有足够的相似之处,很显然它们具有相同的来源,但又有足够的不同之处,以至于每次消除混淆的解决方案都会发生变化。通过VirusTotal(得分为0/46)-因此它很有趣,并且未被反病毒软件检测到(至少是静态地)。接下来,我尝试通过jsunpack运行它,看它是否具有任何意义-运气不好,它破坏了解析器。

看看代码,有一些方法设计得令人困惑,然后几个这样的字符串,最终将这些字符串解码为javascript并执行:

22=";4kqkk;255ie;35bnh;4mehn;2lh3b;7i29n;6m2jb;7jhln;562ik..."


挖掘了几分钟后,我能够确定我真正了解的一些代码是:

try{document.body--}catch(dgsdg){e(a);}


在这种情况下,e被别名为eval,而a是一个字符串,该字符串已由各种函数在文件的开头(并通过一系列误导性分配进行传递)。

为了快速获取a的值,我将代码修改为Base64进行编码并输出该值,然后打开HTML VM上的Chrome中的文件(与网络断开连接):

document.write(window.btoa(a))


这可以让我获得我一直在寻找的价值,b如果这个过程花了太长时间-如果我错过了另一个eval,则可能我可以执行明显是恶意代码的代码。因此,我能够获得所需的信息,并确定要删除的恶意软件-但是过程太慢且风险很大。

有没有更好的方法可以在安全的沙箱中运行此类JavaScript,以最大程度地降低执行它的风险?我看不出有什么方法可以构建一种工具来对这种代码进行一般性的去混淆处理,所以我看不出有任何方法可以运行它(或构建一次性工具,这也很耗时)。

我会很高兴听到有关处理此类代码的其他工具和技术的信息。

评论

该答案可能与您的兴趣有关。

我投票决定将其关闭,因为它看起来像是个骗子,而且如果没有代码,很难为您提供建议。

可能是什么是逆转Minify对JavaScript影响的好工具?

#1 楼

我是JSDetox的作者,感谢Jurriaan Bremer提到它!
如前所述,每个混淆方案都是不同的。 JSDetox不会自动对所有事物进行模糊处理-主要目的是支持手动分析。
它具有两个主要功能:静态分析试图优化“膨胀的”代码,例如像
var x = -~-~'bp'[720094129.0.toString(2 << 4) + ""] * 8 + 2;

这样的语句可以解决为
var x = 34;

,因为没有外部依赖项。
第二个功能是能够通过HTML DOM仿真执行JavaScript代码:可以加载HTML文档(可选)和JavaScript文件,执行代码,看看会发生什么。当然,这并不总是开箱即用,可能需要手动更正。
JSDetox拦截诸如“ eval()”或“ document.write()”之类的调用(您手动执行的操作)并显示将执行的操作HTML DOM仿真允许执行与HTML文档交互的代码,例如:
document.write('<div id="AU4Ae">212</div>');
var OoF2wUnZ = parseInt(document.getElementById("AU4Ae").innerHTML);
if(OoF2wUnZ == 212) {
...

请参阅http://relentless-coding.org/。 projects / jsdetox / samples,以获取更多示例或观看截屏视频:http://relentless-coding.org/projects/jsdetox/screencasts
JSDetox在浏览器中不执行分析的JavaScript代码,它使用V8(JS引擎后端的chrome浏览器)-尽管如此,它仍应在隔离的虚拟机中执行。

评论


冒昧地提出一个旧话题。首先,感谢您提供的出色工具。我遇到了无法识别btoa()的问题。可能是我做错了什么。我正在尝试这样做:data = btoa(junk); document.write(数据);谢谢

–k0ng0
2014年5月30日0:53

@ k0ng0问题是btoa()是浏览器中窗口对象的功能,而不是JavaScript语言的功能。 JSDetox当前仅模拟窗口对象的选定功能。感谢您的提示,我将在下一个版本中对此进行进一步的研究。

–svent
2014年6月2日21:34

首先,感谢您在工具上所做的工作,但是,每当我在其中放入一些混淆的代码并单击“分析”时,它只会显示“正在加载...”,而实际上从未加载任何内容。离开它大约10分钟。

– MikeSchem
17-10-25在6:33

#2 楼

我是Malzilla及其嵌入式SpiderMonkey JS引擎的粉丝,该引擎可让您解码恶意javascript。 br />
您可以在SourceForge上下载Malzilla的预构建二进制文件。

评论


这可能是一个古老的答案,但是为了避免给其他人带来完全的不必要的混乱,所有二进制文件都是某种称为“ InnoBF”的工具,即使它们位于链接的Source Forge的Malzilla路径中也是如此。您实际上必须从源代码构建,但是无论如何它都是用Delphi / Kylex /编写的,所以是的,真的很有趣。

–simontemplar
19年6月6日在2:48

你误会了。 malzilla二进制文件是预先构建的,可以从Sourceforge下载(如上链接):sourceforge.net/projects/malzilla/files/…

–米克
19年6月30日19:45

#3 楼

最好的选择是使用一个环境(例如FireFox),在该环境中可以使用代理功能覆盖eval(),而该功能仅输出输出。这样,即使恶意软件将其别名,也不会丢失任何内容。不幸的是,eval()并非旨在被覆盖(我相信最近的ECMAScript规范已明确禁止它),但最糟糕的是它将无法运行。

评论


您是最好的方法……“不幸的是,eval()并非旨在被覆盖”……没有关于如何覆盖它或用什么覆盖它的建议?

–埃文·卡洛尔(Evan Carroll)
18/12/4在18:45

#4 楼

好了,在使用了在线工具之后,您可以使用KahuSecurity的Revelo
http://www.kahusecurity.com/tools/Revelo_v0.5.1.zip
,它在过程中的自动化程度较低,但在功能上却更为强大定制js的混淆。
文档包含在ZIP中,您还可以在Kahu博客中看到其用法示例:
http://www.kahusecurity.com/
p.s。不要忘记使用VM!

#5 楼

您可能很幸运,可以尝试JSDetox,http://www.relentless-coding.com/projects/jsdetox(这是Ruby中的自动javascript + html解压缩器),也可以是我自己的正在开发中的库,仅支持javascript (但不止是JSDetox),https://github.com/jbremer/jsunpck。

对于JSDetox,您可以通过Web界面将html作为输入,然后,它将但是,我的jsunpck只是在命令行上接受了一个javascript文件。

与往常一样,不能保证其中任何一个工具都能成功,但谁知道。最后,您可能对动态方法更感兴趣,例如如上所述修补eval。

#6 楼

好吧,就个人而言,如果我懒于手动分析它,我会使用JSDetox(http://relentless-coding.org/projects/jsdetox)。

这可能是更好的工具之一在那里。

#7 楼

您可以尝试http://jsunpack.jeek.org/,它对某些东西有用。我个人只是在VM中使用Chrome的内置JS控制台,替换了eval()s。

这可能也会有所帮助,尽管它可以提高可读性。

#8 楼

除了此处的其他有用链接之外,我建议您尝试使用Malware-Jail

沙盒,以进行半自动的Javascript恶意软件分析,反混淆和有效载荷提取。为Node.js编写的恶意软件-jail是为Node的“ vm”沙箱编写的。当前实现WScript(Windows脚本宿主)上下文env / wscript.js,至少是恶意软件经常使用的部分。 Internet浏览器上下文是部分实现的env / browser.js。

签出Github存储库以了解更多信息,并查看其用法和示例输出。

#9 楼

去年,我一直在开发box-js,发现它是分析JScript删除程序时最准确的工具。在内部,它使用UglifyJS2进行静态分析并简化许多混淆技术。其余的通过在V8沙箱中进行仿真来实现。