在整个Node项目中使用UglifyJs?

时间:2013-09-27 15:39:42

标签: node.js obfuscation uglifyjs uglifyjs2

我需要尽可能地混淆我的源代码所以我决定使用uglifyjs2 ..现在我有了嵌套目录的项目结构,如何通过uglifyjs2运行它来完成整个项目而不是全部输入文件?

我不介意将整个项目缩小为单个文件或其他东西

4 个答案:

答案 0 :(得分:6)

我在我参与的一个项目中做了一些非常类似的事情。您有两种选择:

  1. 将文件保留在目录结构中。

    这是目前为止更容易的选择,但提供了更低级别的混淆,因为对您的代码感兴趣的人基本上拥有文件逻辑组织的副本。

    攻击者可以简单地打印所有文件并重命名每个文件中的混淆变量名称,直到他们了解正在发生的事情为止。

    要执行此操作,请使用fs.readdirfs.stat递归浏览文件夹,读入每个.js文件并输出损坏的代码。

  2. 将所有内容编译为单个JS文件。

    这对您来说实施起来要困难得多,但确实会让攻击者的生活更加艰难,因为他们不再拥有项目组织的好处。

    您的主要问题是将require次调用与不再存在的文件进行协调(因为现在所有内容都在同一个文件中)。

    我通过分析ASTrequire的调用来使用Uglify对源代码进行静态分析。然后我加载了所需文件的源代码并重复。

    加载所有代码后,我用调用自定义函数替换了require调用,将每个文件的源代码包装在一个模拟how node's module system works的函数中,然后将所有内容复制并编译成一个单个文件。

    我的自定义require函数完成了节点所需的大部分工作,除了搜索磁盘上的模块,它搜索包装函数。

  3. 不幸的是,我不能真正分享#2的任何代码,因为它是专有项目的一部分,但要点是:

    • 使用UglifyJS.parse将源文本解析为AST。
    • 使用TreeWalker访问AST的每个节点并检查是否

      node instanceof UglifyJS.AST_Call && node.start.value == 'require'
      

答案 1 :(得分:5)

由于我刚刚在80多个文件中完成了一个巨大的纯Nodejs项目,因此我遇到了与OP相同的问题。我至少需要对我的辛勤工作提供最低限度的保护,但NPMjs OS社区似乎没有涵盖这个非常基本的需求。添加盐对伤害JXCore包加密系统上周在几个小时内被破解,所以回到混淆...

所以我创建了完整的解决方案,处理文件合并,uglifying。您可以选择从合并中省略指定的文件/文件夹。然后将这些文件复制到合并文件的新输出位置,并自动重写对它们的引用。

NPMjs link of node-uglifier

Github repo of of node-uglifier

PS:如果人们愿意做出更好的贡献,我会很高兴的。这是小偷和像你一样的辛勤工作者之间的战争。让我们加入我们的力量,增加逆向工程的痛苦!

答案 2 :(得分:1)

我有同样的需求 - 我创建了node-optimizegrunt-node-optimize

https://www.npmjs.com/package/grunt-node-optimize

答案 3 :(得分:1)

uglifyjs2本身不支持。

考虑使用webpack将整个应用打包成一个缩小的.js文件,不包括node_moduleshttp://jlongster.com/Backend-Apps-with-Webpack--Part-I