在整个Node项目上使用UglifyJs?
我需要尽可能最好地模糊我的源代码,所以我决定使用uglifyjs2 ..现在我有了嵌套目录的项目结构,我怎样才能运行它通过uglifyjs2做整个项目,而不是给它所有的input文件?
如果将整个项目缩小到一个文件或者其他东西,我不会介意
在我所从事的一个项目中,我做了一些非常类似的事情。 你有两个select:
-
将文件保留在其目录结构中。
这是更容易的select,但是由于对代码感兴趣的人基本上具有文件的逻辑组织的副本,所以提供了更低水平的混淆。
攻击者可以简单地打印所有文件,并重命名每个文件中的混淆variables名称,直到他们理解了发生了什么为止。
为此,请使用
fs.readdir
和fs.stat
以recursion方式遍历文件夹,读入每个.js文件并输出损坏的代码。 -
将所有东西编译成一个JS文件。
这对您来说实施起来要困难得多,但却使得攻击者的生活变得更难,因为他们不再受益于您的项目组织。
您的主要问题是
require
调用您的require
调用与不再存在的文件(因为一切都在同一个文件中)。我通过使用Uglify通过分析
require
调用的AST来执行我的源代码的静态分析。 然后我加载了所需文件的源代码并重复。一旦所有的代码被加载,我将
require
调用replace为一个自定义函数的调用,将每个文件的源代码封装在一个模拟节点模块系统工作方式的函数中,然后将所有内容都编译成单个文件。我的自定义需求函数完成大部分节点所需要的function,除了search磁盘而不是search模块外,它还search包装函数。
不幸的是,由于它是专有项目的一部分,所以我不能真正分享#2的任何代码,但其要点是:
- 使用
UglifyJS.parse
将源文本parsing为AST。 -
使用
TreeWalker
访问AST的每个节点并检查是否node instanceof UglifyJS.AST_Call && node.start.value == 'require'
因为我刚刚在80多个文件中完成了一个巨大的纯Nodejs项目,所以我和OP有同样的问题。 我的努力工作至less需要一点点保护,但NPMjs操作系统社区似乎还没有涵盖这个非常基本的需求。 join盐伤害JXCore包encryption系统上周在几个小时内被破解,所以回到混淆… … –
所以我创build了完整的解决scheme,处理文件合并,uglifying。 您也可以select忽略指定的文件/文件夹以及合并。 然后将这些文件复制到合并文件的新输出位置,并将其引用重写为自动。
节点uglifier的NPMjs链接
Github的node-uglifier的repo
PS:我会很高兴,如果人们会做出更好的贡献。 这是盗贼和自己努力工作的打字员之间的战争。 让我们join我们的力量,增加逆向工程的痛苦!
我有同样的需求 – 为此我创build了node-optimize
和grunt-node-optimize
。
这不是uglifyjs2本地支持的。
考虑使用webpack将整个应用程序打包成一个node_modules
.js文件,不包括node_modules
: http : node_modules