使用足够的混淆器来保护我的JavaScript代码?

时间:2008-08-27 02:44:58

标签: javascript obfuscation

我正在开发一个用JavaScript编写的开发工具。

这不是一个开源项目,将作为商业产品出售(希望)。

我正在寻找保护我投资的最佳方法。使用混淆器(代码管理器)足以合理地保护代码吗?

还有其他我不知道的替代方案吗?

(我不确定混淆器是否是正确的词,它是使用您的代码并使其非常难以理解的应用程序之一。)

9 个答案:

答案 0 :(得分:139)

我要告诉你一个秘密。一旦你理解了它,你就会觉得Javascript混淆只对通过网络发送脚本时节省带宽非常有用这一事实会更好。

您的源代码不值得偷窃。

我知道这对自我来说是一种震撼,但是我可以自信地说出这一点而你没有看过你编写过的一行代码,因为在极少数发展领域之外发生了严重的魔法,所有来源都是如此-code。

说明天,有人在家门口丢弃了一堆DVD,其中包含Windows Vista的源代码。你能用它做什么?当然,你可以编译并赠送副本,但这比复制零售版只要多一步。您可以费力地找到并删除许可证检查代码,但这是一些聪明的孩子已经对二进制文件做过的事情。替换徽标和图形,假装自己编写并将其作为“Vicrosoft Mista”推销?你会被抓住的。

你可能花费大量时间阅读代码,试图理解它并真正“窃取微软投资开发产品的知识产权”。但是你会失望的。你会发现代码是一系列世俗的决定,一个接一个地做出来。有些人会比你想象的更聪明。有些人会让你摇头,想知道他们在那里招聘的猴子是什么样的。大多数人会耸耸肩说“是的,你就是这样做的。”

在这个过程中,你将学到很多关于编写操作系统的知识,但这不会对微软造成伤害。

将“Vista”替换为“Leopard”,上述段落不会改变一位。它不是微软,而是软件。这个站点上有一半的人可能会开发Stack Overflow克隆,无论是否查看此站点的来源。他们只是没有。 Firefox和WebKit的源代码可供任何人阅读。现在从头开始编写自己的浏览器。几年后见。

软件开发是时间的投入。想象你正在做的事情是如此特别以至于没有人可以在不看你的来源的情况下克隆它,甚至没有可操作(并且易于检测)的剪切和粘贴就能使他们的工作变得更容易,这是完全的傲慢。

答案 1 :(得分:31)

我非常不同意上面的大多数答案。

尽管有混淆,但每个软件都可以被窃取,但至少,它更难以提取和重用软件的各个部分,这就是重点。

使用混淆可能比使某些人偷走我们软件中最好的部分并制造危险的并发性而使代码公开并在法庭上打架更便宜且风险更小。

未经混淆的代码窃窃私语:

  • 来吧,分析我,重用我。也许你可以使用我制作更好的软件。

混淆代码说:

  • 老兄。使用自己的想法比试图破解我更便宜。

答案 2 :(得分:3)

如果你试图混淆你的代码,希望有人不偷它,那么你将要打一场失败的战斗。你可以阻止随意的浏览器进入它,但专门的人几乎肯定能够克服你使用的任何措施。

过去我见过人们会做几件事:

  1. 在页面顶部粘贴大量空格,并显示一条消息,告诉人们代码不可用,实际上您只需要向下滚动几页即可获得它。
  2. 通过某种编码器运行它,这非常有用,因为它可以通过解码器运行。
  3. 另一种方法是将变量名称减少为一个字符并删除空格(这也是一种有效的方法)。
  4. 还有很多其他方法。

    最后,您的努力只会阻止随意浏览器看到您的内容。如果有人专注,那么你将无法做到。你必须忍受这个。

    我的建议是制作一款非常棒的产品,吸引最多的人,并通过拥有最好的产品/服务/社区而不是最混淆的代码来打败任何竞争对手。

答案 3 :(得分:1)

您总是面临这样一个事实:任何访问您网页的用户都会下载您的Javascript源的某些工作版本。他们拥有源代码。对它进行模糊处理可能会使那些意图窃取你的辛勤工作的人很难重复使用它。但是,在许多情况下,有人甚至可以重用混淆的源代码!或者在最坏的情况下,他们可以手工解开它并最终理解它。

像你这样的情况的例子可能是Google Maps。 Javascript源代码显然是混淆的。但是,对于真正的私有/敏感逻辑,他们将数据推送到服务器并让服务器使用XMLHttpRequests(AJAX)处理该信息。通过这种设计,您可以在服务器端拥有重要部件,并且可以更加严格地控制它们。

答案 4 :(得分:0)

这可能是你能做的最好的事情。请注意,任何有足够奉献精神的人都可以对您的程序进行去混淆。在开始您的项目之前,请确保您对此感到满意。我认为最大的问题是控制谁在他们的网站上使用它。如果有人带着你的代码访问某个网站,并且喜欢它的功能,那么当他们只能复制代码时,他们无法理解代码的功能或无法读取代码并不重要,在自己的网站上使用它。

答案 5 :(得分:0)

如果有人想弄清楚代码,混淆器根本不会帮助你。代码仍然存在于客户端计算机上,他们可以抓取它的副本并在闲暇时进行研究。

根本无法隐藏用Javascript编写的代码,因为必须将源代码交给浏览器执行。

如果要隐藏代码,可以使用以下选项:

1)使用将编译代码(非源代码)下载到客户端的环境,例如: Flash或Silverlight。我甚至不确定这是万无一失的,但肯定比Javascript好得多。

2)在服务器端有一个完成工作的后端和一个只向服务器发出请求的瘦客户端。

答案 6 :(得分:0)

我会说是的,如果您确定使用Dean Edward's Packer之类的工具或类似工具来压缩代码,那就足够了。如果您考虑使用.NET Reflector等工具在.NET中编译代码/ IL的逆向工程方面可行,您会发现无法完全保护您的投资。

另一方面,请记住,发布源代码的人似乎也做得非常好 - 他们的经验是人们想要的不仅仅是他们的知识产权。

答案 7 :(得分:0)

代码混淆器对于需要最少保护的东西就足够了,但我认为它绝对不足以真正保护你。如果你有耐心,你可以真正地去除整个事情..我相信有一些程序可以为你做。

话虽如此,你无法阻止任何人盗用你的东西,因为他们最终会破坏你创造的任何保护。并且在编写代码的脚本语言中非常容易。

如果您使用的是其他语言,可能是java或.NET,您可以尝试执行“回家”等操作来验证许可证号是否与给定的URL匹配。如果你的应用程序是某种在线应用程序,它将一直在线连接,这是有效的。但是,访问源代码,人们可以轻松绕过该部分。

简而言之,javascript对于你正在做的事情来说是一个糟糕的选择 与您正在做的事情相比,可能是使用Web服务后端来获取您的数据。让webservice处理身份验证/验证过程。需要一些工作来确保它是防弹的,但可能工作

答案 8 :(得分:0)

如果这是针对一个网站,其本质上是查看其代码的一个菜单点击,是否真的任何隐藏任何东西的理由?如果有人想窃取您的代码,他们很可能会努力使即使是最受损害的代码变得人类可读。看看商业网站,他们不会混淆他们的代码,没有人出去窃取谷歌应用程序的代码。如果您真的担心代码被盗,我会主张用其他编译语言编写代码。 (这当然会破坏整个webapp的东西......)即使这样,你也不是完全安全的,那里有很多去编译器。

实际上,面对任何有足够动力的人,都没有办法做你想做的事。