是否有可能将JavaScript编译/编码为二进制以隐藏代码?

3

我的NodeJS应用程序当然包含所有的业务逻辑和算法,如果我将其安装在客户服务器上,则他们可以阅读我的源代码,而我希望尽可能保密以保护我的业务。

PHP有几个工具可以将php项目编码成字节码,这正是我想要为JS / NodeJS做到的。

有几个NodeJS打包工具,只是将所有内容捆绑成一个可执行文件,但是纯JS源代码仍然在其中。

问题

如何在将JS / NodeJS产品安装在客户服务器上时保护您的源代码?


丑化代码是一种答案吗?(因为它使得代码难以被人类阅读,但仍不是二进制代码) - CharybdeBE
3
有Web Assembly(wasm),但它可以被“反编译”回可读形式(就像混淆的代码一样)。实际上,如果您将软件通过互联网发送给任何请求它的客户端,就不能期望有真正的安全性。保护知识产权的唯一真正方法是将其保存在您自己的安全服务器上。 - Pointy
2
没人关心你的代码。 - Bergi
作为旁注,字节码并不会使任何东西变得难以阅读。付费Java应用程序Filebot具有易于绕过的许可逻辑。Minecraft被编译成字节码甚至进行了混淆,但这并没有阻止互联网上出现数千个模组。即使是投资数百万美元的DRM公司也无法防止其软件被反向工程和破解发布。只要用户拥有硬件,你就无能为力。 - Vinz243
1
据我所知,如果项目具有“private”标志,“pkg”将应用程序编译为字节码。 - Estus Flask
显示剩余4条评论
2个回答

3
PHP有几个工具可以将PHP项目编译成字节码。同时也有反编译工具。对于这种情况,使用一个缩小代码的工具和pkg可以完成工作。这提供了一个可用的应用程序,如果客户打算违反合同或许可证,它不能被轻易地修改。仅使用缩小代码的工具是不够的,因为在生产中需要源映射进行正确的调试,而缩小后的JS在存在源映射的情况下可以完全还原为原始JS。bytenode使用V8功能将脚本编译为字节码并评估它。它不会像编译器一样使事情更快,恰恰相反。

1
为什么使用 bytenode 会使代码变慢?因为 v8 不需要将 JS 编译成字节码,所以它不应该更快吗? - Luke
@LuketheGeek 缓存可以在启动时提高一些性能,但脚本运行会变慢。这得到了几个基准测试和我看到的开发人员的陈述的支持,也暗示了 Node 本身不会这样做。bytenode 本身引入了一些小的开销,并且可能禁用了通常在 V8 中完成的一些优化。如果 V8 被调整为 AOT 编译,情况可能会有所不同,但它是 JIT。我自己对为什么 V8 字节码在这种情况下表现较慢感兴趣,希望能得到详细的解释。 - Estus Flask

1

有一个库可以将NodeJS的纯文本JavaScript文件转换为二进制文件。它被称为bytenode。

https://www.npmjs.com/package/bytenode

Bytenode可以将Javascript文件编译成.JSC格式,然后您可以使用require从JavaScript代码中调用它。一旦您将bytenode模块加载到nodejs代码中,就可以使用“require”调用二进制文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接