我需要为我的自定义软件提供一个试用期。我有一个64位的C#应用程序,它使用64位的多处理器支持DLL。要包含的其他实用程序是用C++ (exes和dlls)编写的。我必须能够加密C#代码,使软件只在特定的机器上运行,并强制执行一个不能通过重置机器时钟来阻止的过期日期。
我已经评估了几个开源和COTS解决方案: Infralution Licensing System、Protector和ExeShield,仅举几例。它们都不能满足我的所有约束。
有没有人知道一个我应该考虑的全生态解决方案?或者我需要做一些注册表跳水,并通过自定义代码强制执行它?
发布于 2011-03-30 23:51:47
几年来,我在尝试各种许可系统的过程中发现,安全性和潜在客户的疏远之间存在很强的负相关关系。
基本上,你需要担心两种盗版行为。一个是偶然的盗版--用户不付费地使用软件,只是因为他们并没有真正想过要付费。另一种是故意盗版--他们决心不付钱,并愿意付出真正的努力来不这样做。
偶然的盗版可以通过温和的提醒来处理-激活密钥,时间限制,等等。另一方面,故意盗版,基本上是无法防止的。正如索尼、苹果、微软、任天堂和许多其他公司会告诉你的那样,即使你有控制硬件和软件的好处,你的保护方案也会被破坏。破坏它的人很可能是为了一个有趣的挑战而这样做,就像是为了获得自由软件的愿望一样。因此,对于特定的人群来说,加强保护并不会让他们泄气,相反,它会起到相反的作用。
与此同时,你所做的所有试图实现强大保护的事情都会把合法用户逼上绝路。也许用系统时钟检测选区重新划分的行程被触发了,因为它们改变了时区。或者他们不得不更换坏掉的硬盘或者CPU之类的东西,这引发了系统克隆机制。或者,也许微软改变了Windows的默认安全设置,导致Windows在您的应用程序使用时弹出一堆UAC警告,这要归功于它对您试图隐藏存储许可数据的文件的一些技巧不友好。在工作中,我们使用商业解决方案,我们发现他们的保护机制可能会因软件中的错误而出错,从而导致许可证数据被破坏,从而将用户锁定在程序之外。由于他们的系统存储数据的方式,这是一个无法恢复的情况-客户必须在不再使用该计算机上的软件和擦除硬盘之间做出选择。是的,这已经发生过很多次了。是的,我们为此损失了很多潜在的收入。是的,我一想到它造成的损害就感到反胃,因为我们主要依靠口碑传播,而它却产生了很多糟糕的口碑。长话短说,早年对海盗的天真偏执可能让我在加勒比海失去了相当多的航海度假机会。
最糟糕的是,这只是合法用户的问题。如果到了万不得已的地步,黑客可以很容易地通过调试器和反编译器来绕过它。如果软件在最终用户拥有的设备上,那么您不妨开始思考,就好像您的软件已经被破解了一样。这就是说,有一个家庭手工业已经建立在人们破解他们合法拥有的软件的想法上,只是为了避免软件保护机制的恼人。他们会给你钱,但他们仍然会破解软件,因为你的版权保护是那么令人恼火,而且很容易绕过。另一种选择--这就是我所走的路线--就是去购买不那么烦人的不同软件,或者使用自由软件。
因此,最低限度的做法是观看时钟并超时演示,因为您确实需要提醒您的用户给您发送一张支票。但是不要让他们觉得他们不想给你一张支票。如果您的目标是转换销售,请将此视为最优雅、最具成本效益和最有效的系统,它可以防止用户通过摆弄系统时钟而违反您的演示周期:在时钟设置错误的计算机上工作真的非常令人恼火。这只适用于家庭用户。对于(合法)企业来说,这甚至不是一个可行的选择。任何没有被这种情况吓倒的人都可能是一个脚本孩子,他们从一开始就没有能力为你的软件买单。
发布于 2011-03-30 23:23:05
为此,请使用http://xheo.com/产品。他们提供了一个在保护代码方面很棒的代码拦截器,以及一个可以做任何你能想象到的事情的许可平台。他们提供了一个可以编译成你的代码的版本。
加密- http://xheo.com/products/code-protection许可证- http://xheo.com/products/copy-protection
发布于 2011-03-30 23:28:35
为什么不使用互联网来源的时间,比如www.time.gov?你可以折叠一个C++ Qt应用程序,然后使用他们的QtWebKit库http://doc.qt.nokia.com/4.7/qtwebkit.html来下载时间。(我实际上从来没有做过这样的事情,但是看一下文档,它看起来很有希望。)程序第一次运行时,您会创建一个带有时间戳的小文件,或者,为了更安全起见,将时间戳写入程序必需的dll并重新编译它。每次程序运行时都会检查这一点。如果你,他们没有连接到互联网,你警告他们几次,但最终放弃加载。
另一个变体,我想很多软件包都在使用,那就是在你的服务器上存储用户开始使用你的软件的日期。使用特定于用户的代码为每个用户重新编译程序(您可以编写脚本),程序在每次加载时都会根据存储在服务器上的日期进行自我检查。
https://stackoverflow.com/questions/5488249
复制相似问题