<% dim ModuleName,InfoID,ChannelShortName,CorrelativeArticle,InstallDir,ChannelDir,Keyword,PageTitle,ArticleIntro,Articlecontent Keyword=stripHTML("JavaScript,混淆,反混淆,工具分析,分析实战") PageTitle=stripHTML("几种常见的JavaScript混淆和反混淆工具分析实战") ArticleIntro=stripHTML("信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试者与黑客,善与恶,本文将聚焦这场永无止境决斗中的一个小点。") Articlecontent=stripHTML("         HTML5 & JS 应用中充满着对输入进行验证/注入的问题,需要开发人员始终保持警惕。但同时还存在着另一个问题,就是应用中程序专用代…") ModuleName = stripHTML("programme") InfoID = stripHTML("224901") ChannelShortName=stripHTML("编程") InstallDir=stripHTML("http://www.77169.com/") ChannelDir=stripHTML("programme") %> 几种常见的JavaScript混淆和反混淆工具分析实战 - 华盟网 - http://www.77169.com
您现在的位置: 华盟网 >> 编程 >> Java >> 正文

[组图]几种常见的JavaScript混淆和反混淆工具分析实战

2016/3/6 作者:xiaix 来源: 网络收集
导读 <% if len(ArticleIntro)<3 then Response.Write Articlecontent 'Response.Write "Articlecontent" else Response.Write ArticleIntro 'Response.Write "ArticleIntro" end if %>

      

  HTML5 & JS 应用中充满着对输入进行验证/注入的问题,需要开发人员始终保持警惕。但同时还存在着另一个问题,就是应用中程序专用代码的易访问性。为了防止盗版或者至少使盗版更加困难,常会使用混淆工具对 JS 代码进行混淆。作为对立面,反混淆工具也可以将混淆过的 JS 代码进行还原。我曾经接触过双方的一些工具,下面是我的一些研究成果。

  首先,下面这是我们的示例代码(取自Google Closure Compiler的 Wiki 页面)。一个完整的应用程序中代码会更加复杂,但这里足以用于实验了:

        

  接下来,让我们来列举下要进行实验的混淆和反混淆工具,本文中会实验 4 个混淆工具和 2 个反混淆工具。

  混淆工具:

  YUI Compressor

  Google Closure Compiler

  UglifyJS

  JScrambler

  反混淆工具:

  jsbeautifier.org

  JSDetox

  以上除了 JScrambler 是商业软件需要付费使用外,其余全部为免费软件。

  缩小和混淆

  下面首先让我们看看混淆工具的混淆效果如何,随后在看看反混淆工具的表现又如何。

  YUI Compressor



  Google Closure Compiler

  这个工具有优化和混淆两种类型:

  简单优化:

  深度优化:

     

  UglifyJS

  同前一个工具一样,UglifyJS 也有两种层次的混淆:

  默认:

  高级:

  JScrambler

  那么,上面的代码是什么意思呢?显而易见,YUI Compressor,Google closure compiler 的简单优化模式和 UglifyJS 的默认模式都使用了相同的方法对 JS 代码进行缩小和混淆。缩小意味着压缩代码、减小应用程序的体积或者降低浏览器的加载时间。所有的这一切,在将变量名改为一个无意义的字符后,代码会变得难以阅读。

  UglifyJS 的高级模式会进一步混淆函数名和全局变量的名称。Google closure compiler 的深度优化模式同时还会积极的删除无用代码,它追求最简。

  而 JScrambler 则是另一种方式,它专注于对代码进行混淆,不仅不对代码进行缩小,反而通过增加代码数量使代码变的难以阅读。

  美化和反混淆

  jsbeautifier.org

  正如其名字一样,这个在线工具试图将缩小后的代码变的更加具有可读性,但似乎它不会对代码进行进一步的反混淆。

  YUI Compressor -> jsbeautified

    

  JSDetox

  对 UglifyJS 高级模式的代码使用 JSDetox 似乎并不比 jsbeautifier.org 好多少,这点可以理解的,毕竟对变量/函数名进行转换这是不可逆的过程。

  高级的反混淆和恶意代码检测

  一般的代码混淆常用于知识产权保护,而高级的代码混淆则常会被用于隐藏 WEB 应用中的恶意代码。对恶意代码进行混淆是为了躲避杀毒软件的检测,这些代码在被混淆扩充后会难以被识别为恶意软件。Metasploit 的 Javascript 混淆器常被用于开发恶意代码,所以我们下面使用 Metasploit 的混淆器对我们的代码进行混淆(参考文档)。JSDetox 声称其具有进行反混淆 JS 代码的能力,所以下面让我们来尝试下对 Metasploit 和 JScrambler 混淆后的代码进行高级的反混淆。

  Metasploit Javascript 混淆器

       

  使用 JSDetox 进行反混淆

  JScrambler -> JSDetoxed

        

  Metasploit -> JSDetoxed

      

  尽管经过 Metasploit 混淆后的 JS 代码依旧可以躲避杀毒软件,但看起来也会轻易被 JSDetox 进行反混淆。有趣的是,看起来 JSDetox 无法反混淆 JScrambled 的代码。我不确定为什么 JSDetox 可以反混淆出 metasploit 的代码却不能反混淆出 JScrambler 的,不过我猜测是 JSDetox 专门针对 metasploit 的混淆方法做过专门的支持。另一方面,JScrambler 完全是一个黑盒,但这并不意味着 JScrambled 混淆后的 Javascript 代码不能被反混淆,也许有另一个工具专门用于或包含反混淆 JScrambled 代码功能。



  • 上一篇编程:

  • 下一篇编程: 没有了