2

假设出于某种特殊原因,我想要一个健壮的 node.js 代码保护,即强制使用 javascript 源代码的 node.js 部署只能完全通过 v8 汇编语言进行分析,这使得重建非常困难/几乎不可能原始源代码。

换句话说,如果有人假设以某种未经授权的方式获得了 node.js 程序(即假设所讨论的 node.js 程序应该保留在服务器上,而不是直接分发给客户端 - 假设服务器受到客户端破坏等的保护,但假设服务器不是 100% 受信任的,例如云服务器,不能 100% 确定没有人因为某种原因真的想要得到它),那该代码将仅包含 V8 汇编程序,不包含任何原始 js 源代码。我的意思不是丑化、缩小、加密或“源仍然隐藏在字符串中”V8 快照 js 源等 - 但根本没有任何 js 源代码,只有“优化的汇编程序” - 并且以这样的方式对整个源代码进行处理,即源代码将消失并且不包含在此 node.js 实例中 - 未加密,未缩小 - 只是不存在,期间。在这种情况下,如果适用的话,任何性能损失都不是问题,只有源 js 无法恢复,除非通过对整个硬件特定的优化 V8 程序集进行繁琐的研究。

首先想到的一个想法是以某种方式迫使 V8 以某种方式将所有 node.js 源 js 代码优化为“特定于硬件”的汇编程序(但“硬件”将在某种薄 VM 中),然后以某种方式删除 JIT 一直携带的源代码(如果可能的话),并仅依赖这个优化的汇编程序。然后,瘦 VM 将不包含对任何源代码的引用,并将仅使用生成的 V8 汇编程序继续运行程序。不过,我不确定在这种情况下该怎么做。

可能更喜欢可以在 Linux 上运行的东西,但如果只能在 Windows 上运行 - 也会考虑它。

4

2 回答 2

2

如果没有在 V8 内部进行大量修改,这是不可能的,因为它依赖于在多个地方从源代码重新编译函数的能力(例如:惰性编译、Crankshft 优化管道、主要 GC 期间的代码刷新)。此外,如果不跨类似生产的数据实际运行您的应用程序,就不可能产生良好的优化代码,因为除了内联缓存之外,V8 没有其他方法可以收集有关您的代码的类型信息。

于 2012-09-23T16:14:51.127 回答
1

PHP 有很多混淆器。所有流行的 PHP 混淆器都有反混淆器。结果比谷歌闭包给出的更具可读性。您可以使用google 关闭 如果您不信任它,请不要使用云托管。大多数带有字节码的应用程序都非常容易反编译。(Java、Android、.NET)

简而言之,不要在混淆上浪费时间。反编译然后混淆和调试它处理的所有问题通常更容易。我这么说是因为我用 Java 和 .NET 混淆了许多应用程序

于 2012-09-23T11:33:25.490 回答