Node.js 在整个节点项目上使用UglifyJs?

Node.js 在整个节点项目上使用UglifyJs?,node.js,obfuscation,uglifyjs,uglifyjs2,Node.js,Obfuscation,Uglifyjs,Uglifyjs2,我需要尽可能地混淆我的源代码,所以我决定使用uglifyjs2。。现在我有了嵌套目录的项目结构,我如何通过uglifyjs2运行它来完成整个项目,而不是给它所有的输入文件 我不介意它是否将整个项目缩小为一个文件或什么的我在我工作的项目中做过类似的事情。您有两个选择: 将文件保留在其目录结构中。 到目前为止,这是一个更简单的选择,但提供了一个低得多的混淆级别,因为对您的代码感兴趣的人基本上拥有文件逻辑组织的副本 攻击者可以简单地打印所有文件并重命名每个文件中模糊的变量名,直到他们了解发生了什么 为

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


我不介意它是否将整个项目缩小为一个文件或什么的

我在我工作的项目中做过类似的事情。您有两个选择:

  • 将文件保留在其目录结构中。

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

    攻击者可以简单地打印所有文件并重命名每个文件中模糊的变量名,直到他们了解发生了什么

    为此,请使用
    fs.readdir
    fs.stat
    递归浏览文件夹,读取每个.js文件并输出损坏的代码

  • 将所有内容编译成单个JS文件。

    这对您来说要实现起来困难得多,但确实会使攻击者的生活更加艰难,因为他们不再从您的项目组织中受益

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

    为此,我使用Uglify对源代码执行静态分析,分析对
    require
    的for调用。然后,我加载了所需文件的源代码并重复

    加载所有代码后,我将
    require
    调用替换为对自定义函数的调用,将每个文件的源代码包装在一个模拟函数中,然后将所有内容都破坏并编译成一个文件

    我的自定义require函数完成了节点require的大部分功能,除了搜索包装函数而不是在磁盘上搜索模块

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

    • 使用将源文本解析为AST
    • 使用访问AST的每个节点并检查

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

    由于我刚刚用80多个文件完成了一个庞大的纯Nodejs项目,我遇到了与OP相同的问题。我的辛勤工作至少需要一个最低限度的保护,但NPMjs操作系统社区似乎没有满足这一基本需求。加盐伤害JXCore软件包加密系统上周在几个小时内被破解,所以回到模糊处理

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


    附言:如果人们能做出贡献,让它变得更好,我会很高兴。这是一场小偷和像你这样努力工作的程序员之间的战争。让我们联合起来,增加逆向工程的痛苦

    我也有同样的需求——为此我创建了
    节点优化
    grunt节点优化


    uglifyjs2本机不支持这一点

    考虑使用将整个应用程序打包成一个小型的.js文件,不包括
    node\u模块

    为什么不编写一个shell脚本来循环遍历所有文件,并为每个文件调用您的模糊处理程序?@wiredparie我想将它们全部合并到一个文件中。。另外,不同的模糊处理会破坏每个文件对彼此的引用。我认为,由于文件名发生变化,如果将所有文件放在一起,如何使节点正常工作?(
    require('../mylib/lib1')
    )@wiredparie我希望uglify/minify工具能够处理这个问题不,它不会解决这个问题。你可能想看看在javascript文件中使用Grunt来完成一个丑陋的任务。但您应该能够将
    节点优化
    包装到一个gulp库中。如果您这样做了,我将在
    节点优化
    的自述文件中添加一个注释。