半混淆/ uglify JavaScript

时间:2014-09-25 08:43:55

标签: javascript obfuscation minify uglifyjs

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

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

从哪里开始实现这个想法?也许编辑现有的混淆器?

2 个答案:

答案 0 :(得分:1)

我不知道哪种工具可以满足您的特定要求,但考虑到已经存在重要部分,它似乎相对容易创建。

  • 使用esprima或类似的
  • 将源解析为AST
  • 以您想要的方式操作树(例如,删除注释,修改标识符等)
  • 使用escodegen
  • 从树重建源代码

答案 1 :(得分:1)

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

语义设计JavaScript混淆器会做你想要的,但是你需要两次传递。

在第一遍中,将其作为混淆器运行;它将重命名标识符(尽管您可以控制多少或如何完成),剥离whitepspace和注释。如果限制其重命名标识符的能力,则会失去混淆器的强度,但这是您的选择。

在第二遍中,将其作为一个漂亮的打印机运行;它会再次引入好的缩进。 (事实上​​,obfsucation的想法来自于构建一个漂亮的打印机;如果你可以打印漂亮,肯定很容易打印 - 丑陋)。

从使用代码的角度来看,您最好以您喜欢的方式使用主副本,并以缩进和良好的注释作为文档。当你准备好obfsucate时,你运行混淆器,运送混淆的结果。模糊结果中报告的涉及混淆名称的错误可以使用混淆的< - >映射回映射到原始名称。在混淆步骤中产生的原始名称。

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

PS:它完全像@georg所建议的那样,解析为AST,修改和漂亮打印。它没有使用esprima。