半模糊处理/ uglify JavaScript

问题描述:

我了解JS minfiers,混淆器和缩小器。我想知道是否有任何现有的工具(或任何快速到代码的解决方案)部分混淆JavaScript。部分地,我的意思是它应该变得难以阅读,但不会显示为丑化/缩小。它应该保留缩进,但会丢失注释,并部分更改变量名称,使其变得不清晰,而不会将它们转换为像混淆器那样的“a,b,c”。半模糊处理/ uglify JavaScript

这样做的目的可能是采取明确且可重用的代码,并使其隐含且难以被其他人重用,而不会使自己无法工作。

从哪里开始做到这一点的任何想法?也许编辑现有的混淆器?

+0

当然,模糊处理是为生产而设计的,而源代码则用于开发。通过“不会让自己无法工作”,我的意思是,如果您构建了非常易读的代码,并带有注释和显式变量名称,那么可供其他可以访问源代码的开发人员重复使用。现在,如果您想让这些源代码隐含,难以被其他开发人员重用,您希望删除注释,并更改变量名称以使其不那么明确。 – Rayjax 2014-09-25 08:54:26

+0

可以有以下各种用例:知识产权保护,避免公司滥用(雇佣你建立一个杀手级项目,并且因为他们有足够的人维护它而激怒你),盗用源......以及其他很多人。我会将其视为保护有权访问它们的人的一些源代码的一种方式。有些人会从一开始就编写隐式代码,但是其他人可能已经构建了明确的,可读的和可重用的代码,然后出于任何原因,他们会希望使其隐含。 – Rayjax 2014-09-25 08:58:11

[此回答是对OP的请求的直接回复]。

语义设计JavaScript混淆器会做你想做的事,但你需要两遍。

第一遍,运行它作为混淆器;它会重新命名标识符(尽管你可以控制多少或完成的方式),剥离whitepspace和注释。如果你限制了重命名标识符的能力,你会失去混淆器的一些实力,但这是你的选择。

在第二次通过时,将其作为漂亮打印机运行;它会再次引入好的缩进。 (事实上​​,构造障碍的想法来自构建一个漂亮的打印机;如果你可以打印,漂亮,确实很容易打印)。

从使用代码的角度来看,您最好使用自己喜欢的任何方式处理主副本,并将缩进和好评作为文档完成。当你准备好obfsucate时,你运行混淆器,发送混淆结果。在混淆结果中报告的涉及混淆名称的错误可以使用迷惑< - >在混淆步骤中生成的原始名称映射回原始名称。

这是我公司的产品。我会提供一个链接,但是当我这样做时它会讨厌它,所以你必须通过我的生物或谷歌搜索来找到它。

PS:它的工作原理与@georg建议的一样,通过解析为一个AST,mangling和prettyprinting。它不使用esprima。

我不知道有一种工具可以满足您的特定要求,但是它似乎相对容易创建,因为这些关键部件已经存在。

  • 分析源成AST,使用esprima或类似
  • 操作树在你所希望的方式(如:删除注释,轧车标识等)
  • 重建使用escodegen
  • 树源
+0

非常有洞察力,因为它为我们提供了关于uglifier组件的提示 – Rayjax 2014-09-26 13:10:41