【问题标题】:Prerequisite before obfuscating Javascript code?混淆Javascript代码之前的先决条件?
【发布时间】:2013-06-04 07:35:04
【问题描述】:

我为 JavaScript 尝试了不同的混淆工具,但是当我使用 resultant 时它不起作用。

我删除了所有的 cmets,单行和多行 cmets,并美化了代码,以便有正确的分号和正确的格式。

我的问题是:混淆代码之前的先决条件是什么?

【问题讨论】:

  • 确保您的语法完美无缺。如果你在 IE 中加载它,如果不是,它将失败。其他浏览器有时仍然可以工作。诸如尾随逗号、缺少分号等在技术上是无效的(在 IE 中会失败),并且在压缩时会失败,因为这些语句被放在一行中。
  • 为了扩展@Derek 所说的,尾随逗号从 ES5 开始有效 - ES5 规范之前的古老浏览器(例如 IE7 及更低版本)将使用尾随逗号出错。不确定缺少分号是错误的意思 - ASI 是该语言的一个重要方面。但是有些东西,比如多行返回,可能会产生错误。
  • 一定要使用 Lint/Hint,避免使用 eval() 和 Function(),小心使用诸如 function.name 之类的技巧...
  • @epascarello 我明白了。我希望现代编译器/混淆器在连接所有内容之前纠正丢失的分号,但我想你是对的。
  • “混淆代码前的先决条件是什么?” - (1)想出一个很好的混淆理由。我什么都想不出来。缩小,是的。为了混淆而混淆?不。

标签: javascript jquery html obfuscation deobfuscation


【解决方案1】:

如果您的代码在调试时没有任何错误或警告,那么它应该进行混淆处理。详细了解您使用的工具,以确保它支持您的 JavaScript 实现。

【讨论】:

    【解决方案2】:
    • 确保您的代码在立即调用函数表达式中运行(参见下面的示例)
    • 不要依赖全局变量(或像下面的 $ 那样显式传递它们)
    • 使用传入的对象创建任何全局公开的对象/方法 (window.somename = {})
    • 在 html 标记中使用事件绑定,而不是 on* 属性。

    如果您的代码可以像下面这样相对隔离地运行,它应该能够很好地混淆......

    示例:

    (function(window, $){
      //your code here
    
      //create global namespace - expose classes/methods
      window.MyProject = {
        someMethod: someInternalMethodToExpose
        SomeClassName: SomeClass
      };
    
      //internal stuff
      function someInternalMethodToExpose() {
        ...
      }
    
      //constructor function
      function SomeClass() {
        ...
      }
      SomeClass.prototype.someMethod = function() {
        ...
      }
    }(window || this, jQuery));

    【讨论】:

    • 问题是我创建了一个 HTML5 应用程序,使用 jQuery、joHTML 和我自己制作的一些 javascript 类。我将它放在一个文件 some.js 中。当我混淆它时,它的工作没有混淆,它不起作用。我想我必须用纯 JavaScript 编写代码!
    • 如果你遵循典型的 amd 模式,你应该能够混淆......就此而言,如果你有 ALL 你需要的 JS ,包括jQuery在一个文件中,你大概可以使用google的闭包编译器来做一个高度优化的版本,这应该足够混淆了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2018-10-28
    • 2023-04-08
    • 2021-11-28
    相关资源
    最近更新 更多