我正在构建一个用 JavaScript 编写的开发工具。
这将不是一个开源项目,并将(希望)作为商业产品出售。
我正在寻找保护我的投资的最佳方式。使用混淆器(代码管理器)是否足以合理地保护代码?
还有其他我不知道的选择吗?
(我不确定混淆器是否是正确的词,它是获取您的代码并使其非常不可读的应用程序之一。)
我正在构建一个用 JavaScript 编写的开发工具。
这将不是一个开源项目,并将(希望)作为商业产品出售。
我正在寻找保护我的投资的最佳方式。使用混淆器(代码管理器)是否足以合理地保护代码?
还有其他我不知道的选择吗?
(我不确定混淆器是否是正确的词,它是获取您的代码并使其非常不可读的应用程序之一。)
我要告诉你一个秘密。一旦您理解了它,您就会对 Javascript 混淆仅在通过网络发送脚本时真正有助于节省带宽这一事实感觉好很多。
您的源代码不值得窃取。
我知道这对自我来说是一种冲击,但我可以自信地说这句话,而不必看过你编写的一行代码,因为在极少数发生严重魔法的开发领域之外,所有源代码都是如此。
比如说,明天,有人在你家门口丢了一堆 DVD,其中包含 Windows Vista 的源代码。你能用它做什么?当然,您可以编译它并赠送副本,但这只是比复制零售版本多一步的努力。您可以煞费苦心地找到并删除许可证检查代码,但这是一些聪明的孩子已经对二进制文件所做的事情。替换徽标和图形,假装是您自己编写的并将其推销为“Vicrosoft Mista”?你会被抓住的。
您可能会花费大量时间阅读代码,试图理解它并真正“窃取”微软在开发产品时投入的知识产权。但你会失望的。你会发现代码是一长串平凡的决定,一个接一个地做出。有些人会比你想象的更聪明。有些人会让你摇头,想知道他们在那边雇佣什么样的猴子。大多数人只会让你耸耸肩说“是的,你就是这样做的。”
在这个过程中,你会学到很多关于编写操作系统的知识,但这不会伤害微软。
将“Vista”替换为“Leopard”,以上段落一点都没有改变。不是微软,是软件。该站点上的一半人可能会开发 Stack Overflow 克隆,无论是否查看该站点的源代码。他们只是没有。Firefox 和 WebKit 的源代码可供任何人阅读。现在从头开始编写自己的浏览器。几年后见。
软件开发是对时间的投资。想象您正在做的事情是如此特别以至于没有人可以在不查看您的来源的情况下克隆它,或者甚至如果没有可操作(且易于检测)的剪切和粘贴量,它会使他们的工作变得更加容易,这完全是狂妄自大。
我非常不同意上面的大多数答案。
的确,尽管经过混淆处理,每个软件都可能被盗,但至少,提取和重用软件的各个部分变得更加困难,这就是重点。
在有人窃取了我们软件的最佳部分并进行危险的并发之后,使用混淆可能比让代码开放并在法庭上争吵更便宜且风险更小。
未混淆的代码窃窃私语:
混淆代码说:
如果您试图混淆您的代码以希望有人不窃取它,那么您将打一场失败的战斗。您可能会阻止普通浏览器访问它,但几乎可以肯定有人能够克服您使用的任何措施。
在过去,我看到人们做了几件事:
还有很多其他方法。
最后,您的努力可能只会阻止休闲浏览器看到您的内容。如果有专门的人出现,那么您将无能为力。你将不得不忍受这个。
我的建议是制作一个非常棒的产品,吸引最多的人,并通过拥有最好的产品/服务/社区而不是最模糊的代码来击败任何竞争。
您总是面临这样一个事实,即任何访问您网页的用户都会下载您的 Javascript 源代码的某些工作版本。他们将拥有源代码。混淆它可能很难被意图窃取您的辛勤工作的人重用。但是,在许多情况下,甚至有人可以重用混淆的源代码!或者在最坏的情况下,他们可以用手解开它并最终理解它。
像您这样的情况的一个例子可能是Google Maps。Javascript 源代码显然被混淆了。但是,对于真正私有/敏感的逻辑,它们将数据推送到服务器并让服务器使用 XMLHttpRequests (AJAX) 处理该信息。使用这种设计,您可以在服务器端拥有重要的部分,并对其进行更严格的控制。
这可能是你能做的最好的事情。请注意,任何有足够奉献精神的人都可以对您的程序进行去混淆处理。在开始您的项目之前,请确保您对此感到满意。我认为最大的问题是控制谁在他们的网站上使用它。如果有人访问带有您的代码的站点,并且喜欢它的功能,那么当他们可以复制代码时,他们不理解代码的作用或看不懂代码并不重要,并且在他们自己的网站上使用它。
如果有人想弄清楚代码,混淆器根本不会帮助你。该代码仍然存在于客户端计算机上,他们可以获取一份副本并在闲暇时研究它。
根本没有办法隐藏用 Javascript 编写的代码,因为源代码必须交给浏览器执行。
如果你想隐藏你的代码,你有以下选择:
1) 使用将编译后的代码(不是源代码)下载到客户端的环境,例如 Flash 或 Silverlight。我什至不确定这是否万无一失,但它肯定比 Javascript 好得多。
2)在服务器端有一个完成工作的后端和一个只向服务器发出请求的瘦客户端。
我会说是的,如果您还确保使用Dean Edward's Packer或类似工具压缩代码就足够了。如果您考虑使用 .NET Reflector 等工具在 .NET 中逆向工程编译代码/IL 的可能性,您就会意识到您无法完全保护您的投资。
另一方面,请记住,发布源代码的人似乎也做得很好——人们想要的不仅仅是他们的知识产权,而是他们的经验。
代码混淆器对于需要最少保护的东西来说已经足够了,但我认为它绝对不足以真正保护你。如果你有耐心,你可以真正解开整个事情。我相信有程序可以为你做这件事。
话虽如此,您无法阻止任何人盗版您的东西,因为无论如何他们最终都会破坏您创建的任何保护。并且在未编译代码的脚本语言中尤其容易。
如果您使用的是其他语言,可能是 java 或 .NET,您可以尝试执行“calling home”之类的操作来验证许可证号是否与给定的 url 匹配。如果您的应用程序是某种将始终在线连接的在线应用程序,那么这很有效。但是可以访问源代码,人们可以轻松绕过该部分。
简而言之,对于您正在做的事情,javascript 是一个糟糕的选择。
您正在做的一个步骤可能是使用 Web 服务后端来获取您的数据。让 web 服务处理身份验证/验证过程。需要做一些工作才能确保它是防弹的,但它可能会 起作用
如果这是针对一个网站,其本质上只需单击一次菜单即可查看其代码,那么真的有任何理由隐藏任何内容吗?如果有人想窃取您的代码,他们很可能会努力使最受破坏的代码也可读。看看商业网站,他们不会混淆他们的代码,也没有人出去从谷歌应用程序中窃取代码。如果您真的担心代码被盗,我会主张用其他一些编译语言编写它。(这当然会破坏整个 webapp 的东西......)即使那样,你也不是完全安全的,那里有很多反编译器。
所以说真的,面对任何有足够动力的人,没有办法做你想做的事。