关于安全性:您如何保护您的软件免受非法分发?

How do you protect your software from illegal distribution?

我很好奇你如何保护你的软件不被破解、黑客攻击等。

你用什么序列号检查吗?硬件密钥?

您是否使用任何第三方解决方案?

如何解决许可问题?(例如,管理浮动许可证)

编辑:我说的不是任何开源软件,而是严格的商业软件发行…


有很多,很多,很多的保护措施。关键是:

  • 评估你的目标受众,以及他们愿意容忍的内容
  • 了解观众无薪娱乐的欲望
  • 评估某人愿意拿出多少钱来破坏你的保护
  • 应用足够的保护,以防止大多数人逃避付款,而不是烦扰那些使用您的软件。

没有什么东西是牢不可破的,所以衡量这些东西并选择一个好的保护比简单地施加你能承受的最好(最坏)的保护更重要。

  • 简单的注册码(在线验证一次)。
  • 简单的注册和可撤销的密钥,经常在线验证。
  • 加密密钥持有程序算法的一部分(不能跳过检查-必须运行它才能使程序工作)
  • 硬件密钥(公钥/私钥加密)
  • 硬件密钥(包括在密钥上运行的程序算法的一部分)
  • Web服务运行关键代码(黑客永远看不到它)

以及上述的变化。

-亚当


无论你走哪条路,都要以合理的价格收费,让它更容易激活,提供免费的小更新,永远不要停用他们的软件。如果你尊重你的用户,他们会奖励你的。不过,不管你做什么,有些人最终还是会盗版。


不要。

海盗会海盗。无论你提出什么解决方案,它都会被破解。

另一方面,你的实际付费客户是那些被垃圾给不便的客户。


使购买比偷窃更容易。如果你放置成堆的拷贝保护,那么它只会使拥有真正的交易的价值非常低。

使用一个简单的激活密钥,并向客户保证,如果他们丢失了激活密钥,他们可以随时获取激活密钥或重新下载软件。

任何拷贝保护(除了在线组件,如多人游戏和金融软件连接到您的银行等),您可以假设将失败。你想要非法下载你的软件,至少要比购买它稍微困难一点。

我有一个电脑游戏,我从来没有打开过,因为它有太多的复制保护垃圾,它实际上更容易下载假版本。


软件保护不值得花这么多钱——如果你的软件有需求,不管怎样,它都会被击败。

也就是说,硬件保护可以很好地工作。它可以很好地工作的一个例子是:找到一个(相当)简单但必要的软件组件,并在verilog/vhdl中实现它。生成一个public-private密钥对,生成一个接受质询字符串并用私钥加密的WebService。然后制作一个包含公钥的USB加密狗并生成随机挑战字符串。您的软件应该向USB加密狗请求一个挑战字符串,并将其发送到服务器进行加密。然后软件将其发送到加密狗。加密狗用公钥验证加密的质询字符串,并进入"启用"模式。然后,您的软件在需要执行用HDL编写的操作时随时调用加密狗。这样,任何想盗版你的软件的人都必须弄清楚这个操作是什么,并重新实现它——这比仅仅破坏一个纯粹的软件保护要困难得多。

编辑:刚意识到一些验证的东西是从它应该是什么向后的,但我很肯定这个想法会出现。


对于小企业来说,微软的软件许可计划是极其昂贵的。如果你想自己设置,服务器的成本大约是12000美元。我不建议你装作心不在焉。

实际上,我们只是在产品中实现了IntelliLock。它可以让您做出所有关于您希望您的许可证有多严格的决定,而且它也是非常划算的。此外,它还具有模糊、编译器保护等功能。

我见过的另一个很好的解决方案是solosever。它更像是一个电子商务和许可证控制系统。它是非常可配置的,可能有点过于复杂。但据我所知,它做得很好。

我以前也用过网络的去软件许可系统。与上述两个系统相比,它是一个相当轻的系统。从密码学的角度来看,它是一个非常好的许可证控制系统。但它是一个非常低级的API,在这个API中,您必须实现几乎所有应用程序实际使用的东西。


数字"权限"管理是业内最大的单一软件蛇油产品。借用经典密码学中的一页,典型的场景是爱丽丝想在查理看不到的情况下给鲍勃发一条信息。DRM不起作用,因为在其应用程序中,Bob和Charlie是同一个人!

你最好问一个相反的问题,那就是"我如何让人们购买我的软件而不是窃取它?"这是一个非常广泛的问题。但它通常是从做研究开始的。你找出谁购买了你想要销售的软件类型,然后生产出能吸引那些人的软件。

另外一个方面是将更新/附加组件限制为合法副本。这可以是一些简单的东西,比如在采购交易中收到的订单代码。

看看Stardock软件,窗户百叶窗和太阳帝国罪恶等游戏的制造商,后者没有数字版权管理,并从200万美元的预算中获得了可观的利润。


有几种方法,例如使用处理器ID生成"激活密钥"。

底线是,如果有人想要它足够糟糕——他们会对你拥有的任何保护进行逆向工程。

最安全的方法是在运行时使用在线验证或硬件HASP。

祝你好运!


只要一点时间,你的软件就会一直被破解。您可以搜索任何已知软件的破解版本以确认这一点。但它仍然值得为您的软件添加某种形式的保护。

记住,不诚实的人永远不会为你的软件买单,总是会发现/使用一个破解版。非常诚实的人会一直遵守规则,即使没有许可证计划,仅仅因为他们是那种人。但大多数人处于这两个极端之间。

增加一些简单的保护方案是一个很好的方法,可以让大多数处于中间的人以诚实的方式行事。这是一种促使他们记住软件不是免费的,他们应该支付适当数量的许可证。许多人确实对此作出了回应。企业尤其擅长遵守规则,因为经理没有花自己的钱。消费者不太可能遵守规则,因为这是他们自己的钱。

但最近发布的电子艺术的孢子等产品的经验表明,您可以在许可方面走得更远。如果你让即使是合法的人都觉得自己是罪犯,因为他们不断得到验证,那么他们就会开始反抗。因此,添加一些简单的许可来提醒人们他们是否不诚实,但任何超过这一点的事情都不太可能促进销售。


这并不是你想要的答案,而是一个伟大的盗版资源,它来自一个游戏开发者,他主动询问他们的盗版者为什么要这样做。与你选择的答案的第一部分有关。

在和海盗谈话时读。


只有像魔兽世界(wow)这样的在线游戏才有它,每个人每次都必须连接到服务器,这样账户就可以不断验证。对于豆子来说,没有其他方法有效。


通常有两个系统经常被混淆-

  • 许可或激活跟踪,合法使用
  • 防止非法使用的安全性

对于授权使用商业软件包,flexlm许多公司投入巨资进行授权,认为他们也获得了安全性,这是一个常见的错误,这些商业软件包的关键生成器非常丰富。

我只建议你向那些将根据使用情况合法支付费用的公司出售许可证,否则它可能比它的价值付出更多的努力。

请记住,随着产品的成功,最终将违反所有许可和安全措施。所以现在就决定是否真的值得付出努力。

我们在几年前实现了flexlm的无尘室克隆,我们还必须增强我们的应用程序以抵御二进制攻击,这是一个漫长的过程,您必须在每次发布时都重新访问它。它还真的取决于你销售的是哪个全球市场,或者你的主要客户群在哪里,你需要做什么。

查看我关于保护DLL的另一个答案。


非法分销几乎是不可能阻止的;问问RIAA就知道了。数字内容可以直接复制;模拟内容可以数字化,然后再复制。

你应该集中精力防止未经授权的执行。永远不可能完全阻止在别人的机器上执行代码,但是你可以采取某些步骤将代码条提高到足够高的高度,这样购买你的软件比盗版软件更容易。

请看一看为软件保护和许可而开发的文章,它解释了如何最好地在考虑许可的情况下开发应用程序。

强制性免责声明和插件:我共同创建的公司为.NET生产OffByZero Cobalt软件许可解决方案。


即使你使用某种生物特征指纹认证,也会有人找到破解的方法。真的没有切实可行的办法。不要试图让你的软件防黑客,想想增加额外的拷贝保护会带来多少额外的收入,而不是花多少时间和金钱来实现它。在某种程度上,采用不那么严格的拷贝保护方案会更便宜。

这取决于你的软件产品到底是什么,但有一种可能是将程序中"有价值的"部分移出软件,并将其保持在你的专属控制之下。您将对软件收取适度的费用(主要用于支付打印和分发成本),并从外部组件产生收入。例如,一个反病毒程序以便宜的价格出售(或与其他产品免费捆绑),但出售对其病毒定义更新服务的订阅。有了这个模型,订阅更新服务的盗版不会造成很大的经济损失。随着"云中"应用程序的日益普及,这种方法变得更容易实现;将应用程序托管在云中,并向用户收取云访问费用。这并不能阻止某些人重新实现自己的云来消除对您服务的需求,但是这样做所花费的时间和精力很可能会超过好处(如果您保持定价模型合理)。


正如已经指出的,软件保护从来没有保证是万无一失的。你打算使用什么在很大程度上取决于你的目标受众。例如,一个游戏不是你能永远保护的东西。另一方面,服务器软件是一种不太可能在互联网上发布的软件,原因有很多(产品渗透和责任意识到了;一个大公司不想为盗版软件承担责任,而盗版者只关心有足够大需求的东西)。老实说,对于一个知名度很高的游戏,最好的解决办法可能是自己播下洪流(秘密!)并以某种方式对其进行修改(例如,在播放两周后,弹出消息告诉您,请考虑通过购买合法副本来支持开发人员)。

如果你把保护放在适当的位置,记住两件事。首先,较低的价格将通过使人们更倾向于支付购买价格来补充任何版权保护。第二,保护不应妨碍用户——请参阅最近的一个例子。


drm这个,drm那个-出版商迫使drm在他们的项目上这样做是因为它是有利可图的。他们的经济学家是根据我们都看不到的数据得出这一结论的。"DRM是邪恶的"巨魔走得有点太远了。

对于低可见性产品,简单的互联网激活将停止随意复制。任何其他的复制对您的底线来说都可能是微不足道的。


让海盗使用它的想法的麻烦在于,他们无论如何都不会买它,并且会让他们的朋友知道谁会买它是双重的。

  • 使用使用第三方服务的软件,盗版拷贝会消耗宝贵的带宽/资源,这会给合法用户带来更糟糕的体验,使我的软件看起来比现在更受欢迎,并且第三方服务会要求我为他们的服务支付更多的费用,因为使用的是带宽。

  • 很多休闲的人不会梦想自己破解软件,但是如果像海盗湾这样的网站有一个容易评估的漏洞,他们会使用它,如果没有,他们可能会购买它。

  • 这个不禁用盗版软件的概念一旦被发现也显得疯狂,我不明白为什么我要让别人继续使用他们不应该使用的软件,我想这只是海盗的看法/希望。

    另外,值得注意的是,使程序难以破解是一回事,但您还需要防止合法的副本被共享,否则,有人可以简单地购买一个副本,然后通过Torrent网站与成千上万的其他人分享。把他们的姓名/电子邮件地址嵌入到许可证中还不足以阻止每个人这样做,而且只有一个地址才会出现问题。

    我唯一能防止这种情况的方法是:

  • 每次程序启动时都要进行服务器检查和锁定许可证,并在程序退出时释放许可证。如果另一个客户机在第一个客户机拥有许可证的同时使用相同的许可证,那么它将被拒绝。这种方式不会阻止多个用户使用许可证,但会阻止多个用户同时使用许可证—这已经足够好了。它还允许合法用户在任何计算机上转让许可证,从而提供更好的体验。

  • 在第一次客户机启动时,客户机向服务器发送许可证,服务器对其进行验证,从而在客户机软件中设置一些标志。来自具有相同许可证的其他客户端的进一步请求将被拒绝。这种方法的问题在于,如果原始客户机重新安装软件或想使用其他计算机,他们可能会遇到问题。


  • 最简单、最好的解决方案就是预先给它们充电。为你和他们设定一个合适的价格。

    让付费客户证明他们已经付款了,然后再向他们付款,这会激怒他们。实现代码使您的软件不运行会浪费您的时间和金钱,并且会给合法客户带来错误和麻烦。你最好把时间花在生产更好的产品上。

    很多游戏/etc会"保护"第一个版本,然后由于与真实客户的兼容性问题而放弃第一个补丁中的保护。如果你坚持一点点保护,这不是不合理的策略。


    如果你对保护你打算卖给消费者的软件感兴趣,我会推荐任何一种许可证密钥生成库(Google搜索许可证密钥生成库)。通常,用户必须给你一些种子,比如他们的电子邮件地址或姓名,然后他们才能取回注册码。

    一些公司将托管和分发您的软件,或者提供一个完整的安装/购买应用程序,您可以与之集成并自动执行此操作,可能不会给您带来额外费用。

    我已经把软件卖给了消费者,我发现这是成本/易用性/保护的正确平衡。


    几乎所有的拷贝保护都是无效的,而且是可用性的噩梦。其中的一些,比如在客户的机器上安装根工具包,完全是不道德的。


    我建议您使用简单的激活密钥(即使您知道它可能会被破坏),您确实不希望您的软件妨碍您的用户,否则他们只会把它推开。

    确保他们可以重新下载软件,我建议他们在付费后才可以登录和下载您的软件(是的,他们应该可以下载任意多次,直接下载,而无需对您的原因提出任何问题)。

    把你的付费用户推到最重要的位置,当你是合法用户时,没有什么比被指控为罪犯更令人恼火的了(DVD的反盗版警告任何人)。

    您可以添加一个在联机时对照服务器检查密钥的服务,如果两个不同的IP使用相同的密钥,则弹出购买另一个许可证的建议。

    但请不要停用它,它可能是一个快乐的用户向朋友展示您的软件!!!!!


    如果您是一个软件开发人员,其中一个可能的解决方案是将元数据直接嵌入到您的产品中。从TheredUnrise中签出实例销毁安全工具。


    我们使用我们自己的许可系统来许可我们的商业软件——这就是我们销售的(许可管理工具)。我们通常销售订阅许可证,但如果愿意,也可以根据使用情况进行销售。到目前为止,它对我们来说是安全的:www.agilis-sw.com


    我同意许多海报的观点,即没有一个基于软件的版权保护方案能够阻止一个熟练的软件盗版者。对于基于.NET的商业软件,Microsoft软件许可保护(SLP)是一个价格合理的解决方案。它支持限时和浮动许可证。他们的定价是10美元/月+5美元每激活和保护组件似乎工作的广告。不过,这是一个相当新的报价,所以买家要小心。


    使产品的一部分成为需要连接和身份验证的联机组件。以下是一些例子:

    • 网络游戏
    • 病毒防护
    • 垃圾邮件保护
    • 笔记本电脑跟踪软件

    不过,这种模式只能走到目前为止,并能关闭一些消费者。