关于混淆:使用混淆器是否足以保护我的JavaScript代码?

关于混淆:使用混淆器是否足以保护我的JavaScript代码?

Is using an obfuscator enough to secure my JavaScript code?

我正在构建使用JavaScript编写的开发工具。

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

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

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

(我不确定混淆器是否正确,它是采用您的代码并使其变得非常不可读的应用程序之一。)


我要告诉你一个秘密。一旦了解了它,您就会对以下事实感到更好:JavaScript模糊处理仅在通过网络发送脚本时真正用于节省带宽。

您的源代码不值得窃取。

我知道这是对自我的一种震惊,但是我可以自信地说这句话,却从未见过您编写过任何代码,因为在很少发生严重魔术的开发领域之外,所有源代码都是如此。

假设明天,有人在您家门口丢了一堆DVD,其中包含Windows Vista的源代码。您将如何处理?当然,您可以编译它并分发副本,但这仅比复制零售版本多了一步。您可能会费劲地查找并删除许可证检查代码,但这是一些聪明的孩子对二进制文件所做的事情。替换徽标和图形,假装您自己编写并将其作为" Vicrosoft Mista"销售?你会被抓的。

您可能会花费大量时间阅读代码,尝试理解代码并真正"窃取" Microsoft在开发产品上投入的知识产权。但是你会失望的。您会发现代码是一连串平凡的决定,一个接一个地做出。有些会比您想象的要聪明。有些人会让您摇头,想知道他们在那儿租用哪种猴子。大多数人只会让您耸耸肩,然后说:"是的,这就是您的做法。"

在此过程中,您将学到很多有关编写操作系统的知识,但这不会伤害Microsoft。

将" Vista"替换为" Leopard",以上各段均保持不变。不是Microsoft,而是软件。无论是否查看此站点的来源,该站点上的一半人都可能会开发出Stack Overflow克隆。他们只是没有。 Firefox和WebKit的源代码可供任何人阅读。现在,从头开始编写自己的浏览器。几年后见。

软件开发是对时间的投资。完全幻想着您正在做的事情如此特别,以至于没有人可以在不查看您的来源的情况下克隆它,或者甚至可以在没有可操作(且易于检测)的剪切和粘贴的情况下简化工作。


我对上述大多数答案深表不同意。

确实,尽管存在混淆,每个软件都可以被盗,但是至少,这使得提取和重用软件的各个部分变得更加困难,这就是重点。

比起在有人偷走了我们软件的最佳部分并进行危险的并发之后将代码公开并在法庭上进行争吵而言,使用混淆处理可能更便宜且风险更低。

清晰的代码悄悄话:

  • 来吧,分析我,重用我。也许您可以使用我做一个更好的软件。

混淆的代码说:

  • 走开哥们。使用自己的想法要比试图破解我便宜。


如果您试图混淆代码以希望有人不要偷它,那么您将在一场失败的战斗中奋斗。您可以阻止随意的浏览器使用它,但是专职人员几乎可以肯定会克服您使用的任何措施。

过去我看到人们做过几件事:

  • 在页面顶部粘贴很多空白,并显示一条消息,告知人们代码不可用,实际上,您只需要向下滚动几页即可获得代码。
  • 通过某种编码器运行它,是如此有用,因为它可以通过解码器运行。
  • 另一种方法是将变量名简化为一个字符并删除空格(这也是一种有效的做法)。
  • 还有许多其他方法。

    最后,您的努力只会阻止休闲浏览器看到您的东西。如果有人敬业,那么您将无能为力。您将不得不忍受这一点。

    我的建议是,通过拥有最好的产品/服务/社区,而不是最混乱的代码,来制作一款真正超赞的产品,以吸引最多的人并击败任何竞争对手。


    您总是面临这样一个事实,即访问您网页的任何用户都将下载您的Javascript源的某些有效版本。他们将拥有源代码。对其进行混淆可能会导致难以窃取您的辛勤工作的某人重用它。但是,在许多情况下,某些人甚至可以重用混淆的源!或者在最坏的情况下,他们可以手动解散并最终理解它。

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


    如果这是一个网站,就其本质而言,只需单击一下菜单即可查看其代码,是否真的有理由隐藏任何内容?如果有人想窃取您的代码,则他们很可能会努力使即使是最混乱的代码也易于阅读。看看商业网站,他们不会混淆自己的代码,没有人出去从Google应用程序中窃取代码。如果您真的担心代码被盗,我会建议您使用其他编译语言来编写代码。 (这当然会破坏整个webapp的东西...)即使那样,您也不是完全安全的,那里有许多反编译器。

    所以说真的,面对任何有足够动力的人,您都无法做自己想做的事情。


    代码混淆器足以满足需要最少保护的要求,但是我认为这绝对不足以真正保护您。如果您有耐心,您可以将整个事情分解真..我敢肯定,有程序可以为您做这件事。

    话虽如此,您不能阻止任何人盗用您的产品,因为他们最终将破坏您创建的任何保护。在不编译代码的脚本语言中,这尤其容易。

    如果您使用的是其他语言,例如java或.NET,则可以尝试执行"呼唤"之类的操作来验证许可证号是否与给定的URL匹配。如果您的应用程序是某种始终在线连接的在线应用程序,则该方法有效。但是,使用源代码后,人们可以轻松地绕过该部分。

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


    我会说是的,如果您还确保比使用Dean Edward's Packer等工具压缩代码也就足够了。如果您考虑使用.NET Reflector之类的工具从.NET中进行反向工程编译代码/ IL的可能性,您将意识到您无能为力,无法完全保护您的投资。

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


    如果有人想弄清楚代码,混淆器将根本无法帮助您。该代码仍然存在于客户端计算机上,他们可以获取它的副本并在闲暇时研究它。

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

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

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

    2)在服务器端有一个后端来完成工作,并有一个瘦客户机仅向服务器发出请求。


    那大概是您可以做到的最好。请注意,任何有足够奉献精神的人都可能会对您的程序产生混淆。在开始您的项目之前,请确保您对此感到满意。我认为最大的问题是控制谁在他们的网站上使用它。如果有人去了上面载有您的代码的网站,并且喜欢它的功能,那么当他们只复制代码时,他们就不了解代码的作用或无法阅读代码,这没关系。在自己的网站上使用它。


    推荐阅读