javascript代码混淆工具

时间:2012-02-19 12:58:25

标签: javascript obfuscation

是否有推荐的javascript代码混淆工具?

我在stackoverflow中搜索了它,有人建议使用'YUI压缩器'。

然而,它只是执行以下操作:

  1. 删除annotatation / white space / new line

  2. 替换本地变量

  3. 或其他东西。

  4. 但它不会取代一个对象的属性。

    说我有这样的代码:

    var a=obj.fun();
    var b=obj.pro;
    

    我想要这样的事情:

    var xxx,yy,zz;
    xxx=obj['yy']();
    yy=obj['zz'];
    

    然后即使人们重新格式化我的代码,他甚至不知道一个对象的属性/方法,除非他重新进行方法/属性替换。

    这只是一个例子,我只是想让工具做更多的混淆而不仅仅是压缩。

    有什么建议吗?

4 个答案:

答案 0 :(得分:1)

试试Google Closure Compiler。在高级模式下,它还会重构代码的一部分,并以这种方式创建一些性能改进。

答案 1 :(得分:1)

Javascript是一种动态类型语言,与浏览器交互,因此几乎不可能进行适当的分析以找到对象在代码中弹出的位置。

由于这些原因,您无法安全地重命名对象的属性。

答案 2 :(得分:0)

我对这个主题知之甚少。我想建议谷歌闭包编译器:

http://code.google.com/closure/compiler/docs/api-tutorial3.html

它说它们进行了属性重命名

答案 3 :(得分:0)

您应该尝试google closure compiler,它提供三个级别的写作:

  1. 第一个是WHITESPACE_ONLY
  2. 第二个是SIMPLE_OPTIMIZATIONS
  3. 第三个是ADVANCED_OPTIMIZATIONS
  4. WHITESPACE_ONLY删除评论,修剪换行符和不必要的空格。输出代码与源JavaScript相同。

    SIMPLE_OPTIMIZATIONS还重命名局部变量和函数参数。

    ADVANCED_OPTIMIZATIONS是最具侵略性的,除了上述两个级别的优化之外,它还有:

    • 全局变量重命名
    • 删除未调用的函数
    • 功能内联

    对于举例:

    //INPUT CODE
    function unusedFunction(note) {
      alert(note['text']);
    }
    
    function displayNoteTitle(note) {
      alert(note['title']);
    }
    
    var flowerNote = {};
    flowerNote['title'] = "Flowers";
    displayNoteTitle(flowerNote);
    

    WHITESPACE_ONLY结果是:

    //WHITESPACE_ONLY OUTPUT CODE
    function unusedFunction(note){alert(note["text"])}function displayNoteTitle(note){alert(note["title"])}var flowerNote={};flowerNote["title"]="Flowers";displayNoteTitle(flowerNote);
    

    SIMPLE_OPTIMIZATIONS结果是:

    //SIMPLE_OPTIMIZATIONS OUTPUT CODE
    function unusedFunction(a){alert(a.text)}function displayNoteTitle(a){alert(a.title)}var flowerNote={title:"Flowers"};displayNoteTitle(flowerNote);
    

    ADVANCED_OPTIMIZATIONS结果是:

    //ADVANCED_OPTIMIZATIONS OUTPUT CODE
    alert("Flowers");
    

    我认为SIMPLE_OPTIMIZATIONSADVANCED_OPTIMIZATIONS符合您的需求。