我们如何保护软件免于非法分发?
我很好奇我们如何保护软件免于破解,黑客攻击等。
我们是否使用某种序列号检查?硬件按键?
我们是否使用任何第三方解决方案?
我们如何解决许可问题? (例如,管理浮动许可证)
编辑:我不是在谈论任何开源,而是严格的商业软件发行...
解决方案
像《魔兽世界》(WoW)这样的仅在线游戏就已经制作完成,每个人每次都必须连接到服务器,因此可以不断验证帐户。没有其他方法可用于bean。
有几种方法,例如使用处理器ID生成"激活密钥"。
最重要的是,如果有人想让它变得足够糟糕,他们将对我们拥有的任何保护进行反向工程。
最安全的方法是在运行时或者硬件搭扣中使用在线验证。
祝你好运!
使产品的一部分成为需要连接和身份验证的联机组件。这里有些例子:
- 线上游戏
- 病毒防护
- 垃圾邮件防护
- 笔记本电脑追踪软件
但是,这种范例仅适用于很长一段时间,并且可以关闭某些消费者。
软件保护不值钱-如果软件需求旺盛,那么无论如何它都会被击败。
也就是说,硬件保护可以很好地发挥作用。它可以很好地工作的一个示例方式是:找到软件的(相当)简单但必要的组件,并在Verilog / VHDL中实现它。生成一个公钥-私钥对,并制作一个使用质询字符串并使用私钥对其进行加密的Web服务。然后制作一个包含公钥的USB加密狗,并生成随机的质询字符串。软件应询问USB加密狗以获取质询字符串,并将其发送到服务器进行加密。然后,软件将其发送到加密狗。加密狗使用公钥验证加密的质询字符串,并进入"启用"模式。然后,只要需要执行在HDL中编写的操作,软件就会调用加密狗。这样,任何想要盗版软件的人都必须弄清楚该操作是什么,然后重新实现它-比仅仅破坏纯软件保护要困难得多。
编辑:刚刚意识到一些验证工作已经从应有的事情倒退了,但是我很确定这个想法会出现。
如果我们有兴趣保护打算出售给消费者的软件,则建议我们使用多种许可密钥生成库中的任何一种(Google会在许可密钥生成上进行搜索)。通常,用户必须给我们某种种子,例如其电子邮件地址或者名称,然后他们才能获取注册码。
多家公司将托管和分发软件,或者提供一个完整的安装/购买应用程序,我们可以与之集成并自动执行此操作,而无需花费任何额外费用。
我已将软件出售给消费者,我发现这在成本/易用性/保护性之间取得了适当的平衡。
给我们一点时间,软件将永远被破解。我们可以搜索任何知名软件的破解版本来确认。但是,仍然值得为软件添加某种形式的保护。
请记住,不诚实的人永远不会为软件付费,而总会找到/使用破解版。非常诚实的人即使没有许可计划也总是会遵守规则,仅因为那是他们的身份。但是大多数人都处于这两个极端之间。
添加一些简单的保护方案是使大多数中间人以诚实的方式行事的好方法。这是一种让他们记住该软件不是免费的方法,他们应该为适当数量的许可证付费。实际上,很多人对此都做出了回应。企业尤其擅长遵守规则,因为经理不会花费自己的钱。消费者不太可能遵守规则,因为这是他们自己的钱。
但是,最近从《 Electronic Arts》的《孢子》等发行中获得的经验表明,我们可以在许可方面做得更多。如果我们甚至使合法的人因为不断受到验证而感觉像罪犯,那么他们就会开始叛逆。因此,添加一些简单的许可以提醒人们是否不诚实,但仅此而已,就不可能促进销售。
无论走什么路线,都要收取合理的价格,易于激活,提供免费的次要更新,并且永远不要停用其软件。如果我们尊重用户,他们会为此奖励我们。尽管如此,无论我们做什么,有些人最终还是会盗版它。
有很多很多保护可用。关键是:
- 评估目标受众以及他们愿意忍受的东西
- 了解观众对无薪游戏的渴望
- 评估某人愿意破坏保护的金额
- 只需提供足够的保护,以防止大多数人避免付款,而不会惹恼那些使用软件的人。
没有什么是坚不可摧的,因此衡量这些事情并选择良好的保护比简单地掌控我们所能承受的最佳(最差)保护更为重要。
- 简单的注册码(一次在线验证)。
- 使用可撤销密钥进行简单注册,并经常在线验证。
- 加密密钥保存了程序算法的一部分(不能只跳过检查-必须运行该程序才能使程序正常工作)
- 硬件密钥(公共/专用密钥加密)
- 硬件密钥(包括在密钥上运行的程序算法的一部分)
- Web服务运行关键代码(黑客永远看不到它)
以及以上的变化。
-亚当
正如已经指出的那样,永远不能保证软件保护是万无一失的。我们打算使用的内容很大程度上取决于目标受众。例如,游戏并不是我们永远可以保护的东西。另一方面,由于多种原因,服务器软件不太可能在Internet上分发(想到产品渗透率和责任;大型公司不希望对盗版软件负责),以及海盗只会为需求量大的东西而烦恼)。老实说,对于一个引人注目的游戏,最好的解决方案可能是自己(对种子)种子进行种子下载并以某种方式进行修改(例如,这样,在玩了两周之后,它会弹出一条消息,提示我们:请考虑通过购买合法副本来支持开发人员)。
如果我们采取了适当的保护措施,请牢记两点。首先,较低的价格将使人们更倾向于支付购买价格,从而补充了任何版权保护。其次,对于最近的示例,保护绝不能妨碍用户看到Spore。
购买比偷窃更容易。如果我们提供大量的复制保护,那么拥有真正的交易的价值就会非常低。
使用一个简单的激活密钥,并向客户保证他们一旦丢失就可以始终获得激活密钥或者重新下载软件。
我们可以假定的任何复制保护(除了多联机游戏和与银行连接的财务软件等仅在线组件之外)都将被击败。我们至少要非法下载软件,比购买软件要难一些。
我有一个从未玩过的PC游戏,因为上面有太多的复制保护垃圾,实际上下载虚假版本更容易。
通常,有两个系统经常会混淆-
- 许可或者激活跟踪,合法合法使用
- 防止非法使用的安全性
对于使用商业软件包的许可,FlexLM许多公司在许可方面投入了大量资金,认为他们也可以获得安全性,这是一个常见的错误,因为这些商业软件包的密钥生成器数量众多。
如果我们向将根据使用情况合法付款的公司出售产品,我只会建议我们许可,否则,它的努力可能超过其价值。
请记住,随着我们产品的成功,最终将违反所有许可和安全措施。因此,现在就决定是否值得付出努力。
几年前,我们实施了FlexLM的无尘克隆,我们还必须增强应用程序的二进制攻击能力,因为它的过程很漫长,因此我们必须在每个发行版中都对其进行重新访问。这实际上还取决于我们也销售哪些全球市场,或者我们主要的客户群在哪里需要做什么。
请查看我的其他有关保护DLL的答案。
数字"权利"管理是业内最大的软件蛇油产品。要从经典密码学中借用一个页面,典型的情况是Alice希望向Bob发送一条消息,而Charlie却无法读取它。 DRM不起作用,因为在其应用程序中,Bob和Charlie是同一个人!
我们最好提出反问题,即"如何让人们购买我的软件而不是窃取它?"。这是一个非常广泛的问题。但这通常是从进行研究开始的。我们确定谁购买了我们想出售的软件类型,然后生产出对那些人有吸引力的软件。
此操作的添加功能是将更新/附件限制为仅合法副本。这可以像在购买交易期间收到的订购代码一样简单。
看看Stardock软件,WindowBlinds的制造商以及诸如《太阳帝国》的《罪孽》之类的游戏,后者没有DRM,并且从200万美元的预算中获得了可观的利润。
别。
海盗会海盗。无论我们想出什么解决方案,它都可能并且会被破解。
另一方面,实际付费客户是那些被废话困扰的客户。
并不是我们要找的答案,而是游戏开发商提供的大量盗版资源,他们积极地向海盗询问其盗版原因。与我们选择的答案的第一部分有关。
在与海盗交谈中阅读。
我同意许多发布者的观点,即没有任何基于软件的复制保护方案会阻止熟练的软件盗版者。对于基于商业.NET的软件,Microsoft软件许可保护(SLP)是价格非常合理的解决方案。它支持限时和浮动许可证。它们的起价为每月10美元+每次激活5美元,而且保护组件似乎按广告中的说明工作。不过,这是一项相当新的产品,因此请买家当心。
对于小型企业而言,Microsoft软件许可计划的价格非常昂贵。如果我们要自行设置,服务器成本约为12,000美元。我不建议我们这样做。
我们实际上只是在产品中实现了Intellilock。它使我们可以决定所需许可证的严格程度,而且成本效益也很高。此外,它还可以进行混淆处理,防止编译器等。
我见过的小型/中型企业使用的另一个很好的解决方案是SoloServer。它更多地是一个电子商务和许可证控制系统。它是非常可配置的,可能有点太复杂了。但是从我所听到的来看,它做得非常好。
过去,我也将Desaware许可证系统用于点网。与上述两个相比,这是一个非常轻巧的系统。就密码方面而言,这是一个非常好的许可证控制系统。但这是一个非常低级的API,我们必须在其中实现应用程序实际使用的几乎所有功能。
DRM这就是DRM,迫使DRM执行其项目的发布商之所以这样做,是因为它有利可图。他们的经济学家正在我们从未见过的数据上得出结论。 " DRM是邪恶的"巨魔走得太远了。
对于可见度较低的产品,简单的Internet激活将停止随意复制。其他任何复制对底线来说都是微不足道的。
最简单,最好的解决方案是预先收取费用。设定一个适合我们和他们的价格。
要求付费客户证明他们已经付款之后正在付费,这让他们很生气。实施代码使软件无法运行会浪费时间和金钱,并会给合法客户带来错误和烦恼。花时间去做更好的产品会更好。
许多游戏/等都会"保护"第一个版本,然后由于与实际客户的兼容性问题而在第一个补丁中放弃保护。如果我们坚持一定程度的保护,这不是一个不合理的策略。
几乎所有的复制保护都是无效的,也是可用性的噩梦。其中的一些,例如将root-kit放在客户的计算机上,这是完全不道德的
我建议使用简单的激活密钥(即使我们知道它可能会被破坏),我们确实不希望软件妨碍用户的使用,否则他们只会将其推开。
确保他们可以重新下载软件,我建议创建一个网页,让他们可以在付款后登录并下载软件(是的,他们应该能够直接按期望的次数进行多次下载,而不会出现单个问题)关于原因)。
最重要的是,如果我们是付费用户,那么只要我们是合法用户(DVD的反盗版警告任何人),我们就会被指控是犯罪分子,这无非是激怒付费用户。
我们可以添加一项服务,该服务在联机时针对服务器检查密钥,并且如果两个不同的IP使用相同的密钥,则弹出一条建议购买另一个许可证的建议。
但是请不要停用它,它可能是一个乐于助人的用户,向朋友展示软件!!!
非法分发实际上是不可能防止的;只是问RIAA。数字内容只能被复制;模拟内容可以数字化,然后复制。
我们应该集中精力防止未经授权的执行。永远不可能完全阻止在其他人的机器上执行代码,但是我们可以采取某些步骤将门槛提高到足够高的水平,以使购买软件比盗版软件容易。
查看文章"为软件保护和许可而开发",该文章解释了如何在考虑许可的情况下最好地开发应用程序。
强制性免责声明和插件:我与人共同创立的公司为.NET提供了OffByZero Cobalt软件许可解决方案。
只让海盗使用它的想法给他们带来了麻烦,他们无论如何也不会购买它,并且会告诉可能购买它的朋友们是双重的。
- 借助使用第三方服务的软件,盗版副本占用了宝贵的带宽/资源,这给合法用户带来了更糟糕的体验,使我的软件看上去比以前更受欢迎,并且第三方服务要求我为他们的服务支付更多费用,因为使用的带宽的百分比。
- 许多随便的人都不会梦想自己破解瑞士法郎,但是如果在piratebay这样的网站上存在容易评估的漏洞,他们会使用它,如果没有,他们可能会购买。
这种一旦发现就不会禁用盗版软件的概念似乎也很疯狂,我不明白为什么我应该让某人继续使用他们不应该使用的软件,我想这只是盗版者的看法/希望。
另外,值得注意的是,使程序难以破解是一回事,但是我们还需要防止共享合法副本,否则有人可以简单地购买一个副本然后
通过torrent网站与其他数千人共享。在许可证中嵌入其名称/电子邮件地址这一事实不足以劝阻每个人这样做,而实际上只需要一个就可以解决问题。
我看到的防止这种情况的唯一方法是:
- 每次启动时都要让服务器检查并锁定许可证,并在程序退出时释放许可证。如果另一个客户端以相同的许可证启动而第一个客户端具有许可证,则该客户端将被拒绝。这种方式不会阻止许可证被多个用户使用,但会阻止许可证被多个用户同时使用-这已经足够了。它还允许合法用户在其任何计算机上转让许可证,从而提供更好的体验。
- 第一次启动客户端时,客户端会向服务器发送许可证,服务器会对其进行验证,从而导致在客户端软件中设置了一些标志。来自其他具有相同许可证的客户的进一步请求将被拒绝。这种方法的问题在于,如果原始客户端重新安装软件或者想要使用其他计算机,则原始客户端会遇到问题。
我们使用自己出售的许可系统(许可管理工具)来许可商业软件。我们通常会出售订阅许可证,但也可以根据使用情况出售。到目前为止,对我们而言这是安全的:www.agilis-sw.com
即使我们使用了某种生物特征指纹身份验证,也有人会找到破解它的方法。真的没有解决的办法。与其尝试使软件不受黑客攻击,不如考虑通过添加额外的复制保护来带来多少额外的收入,以及实现它所花费的时间和金钱。在某个时候,采用不太严格的复制保护方案会变得更便宜。
这取决于软件产品到底是什么,但是一种可能性是将程序的"有价值"部分移出软件,并由我们独占控制。我们需要为软件支付少量费用(主要用于支付打印和发行成本),并且可以从外部组件获得收入。例如,以低价出售(或者与其他产品免费捆绑在一起)但出售其病毒定义更新服务的订阅的反病毒程序。使用该模型,预订更新服务的盗版副本不会造成太大的财务损失。随着"云"中应用程序的日益普及,此方法变得更易于实现;将应用程序托管在云上,并向用户收费以进行云访问。这不会阻止某人重新实现自己的云以消除对服务的需求,但是这样做的时间和精力很可能会超过收益(如果我们保持合理的定价模型)。