如何为试用版软件强制执行到期日期?

时间:2011-03-30 15:13:06

标签: c# c++ encryption installer trial

我需要为自定义软件提供试用期。我有一个64位C#应用程序,它使用64位,多处理器支持DLL。要包含的其他实用程序是用C ++编写的(exes和dlls)。我必须能够加密C#代码,键入软件以仅在特定机器上运行,并强制执行无法通过重置机器时钟来阻止的到期日期。

我评估了几种开源和COTS解决方案:Infralution Licensing System,Protector和ExeShield,仅举几例。它们都不满足我的所有约束。

是否有人知道我应该考虑的全能解决方案?或者我是否需要进行一些注册表潜水并通过自定义代码强制执行?

5 个答案:

答案 0 :(得分:36)

我发现,在多年的尝试不同许可系统的过程中,安全性与潜在客户疏远之间存在强烈的负相关关系。

您需要担心的盗版基本上有两种。一个是随意的盗版 - 用户使用该软件而不付钱只是因为他们并没有真正考虑过付费。另一种是故意盗版 - 那些决心不付钱的人,并且愿意付出实际的努力。

随意盗版可以通过简单的提醒来处理 - 激活密钥,时间限制等。另一方面,故意盗版基本上是无法预防的。正如索尼,苹果,微软,任天堂和其他许多公司都会告诉你的那样,即使你有控制硬件和软件的好处,你的保护方案也会被打破。打破它的人很可能是为了一个有趣的挑战,以及获得自由软件的愿望。因此,对于某个人群来说,保护更强大不会阻止他们,它恰恰相反。

与此同时,你所做的所有尝试和实现强有力保护的东西正在推动合法用户。也许用系统时钟检测发动机管理的行程因为改变了时区而被取消了。或者他们可能不得不更换坏的硬盘或CPU或其他东西,这就引发了系统克隆机制。或者,微软可能会改变Windows的默认安全设置,导致Windows在您的应用程序正在使用时弹出一堆UAC警告,这要归功于它对您曾经试图隐藏存储许可数据的文件的某些技巧不友好。在工作中我们使用商业解决方案,并且我们发现他们的保护机制可能会因为软件中的错误而导致许可证数据被破坏,从而将用户锁定在程序之外。由于他们的系统存储数据的方式,它是一个不可恢复的情况 - 客户必须在不再使用该计算机上的软件和擦除硬盘驱动器之间做出选择。是的,它发生了多次。是的,我们已经失去了很多潜在的收入。是的,我不安地想到它造成的损害,因为我们主要依靠口碑而且它产生了很多不好的口碑。长话短说,早年关于盗版的天真妄想可能让我在加勒比地区度过了相当多的航海假期。

最糟糕的是,这对合法用户来说只是一个问题。破解者可以轻松地 - 轻松地 - 借助于 - 如果涉及到最后的度假村 - 调试器和反编译器来解决它。如果软件位于最终用户拥有的设备上,您可能会开始考虑您的软件已被破解。这就是为什么有一个小屋行业围绕人们破解他们合法拥有的软件的想法,只是为了避免软件保护机制的烦恼。他们会给你钱,但他们仍然会破解软件,因为你的副本保护只是那么令人恼火,而且很容易规避。另一种选择 - 这就是我走过的路线 - 只是购买不那么烦人的软件,或者使用免费软件。

所以请尽量减少 - 观看时钟和演示时间,因为您需要提醒您的用户向您发送支票。但是不要以一种让他们决定不想给你支票的方式来做。如果您的目标是转换销售额,那么请将其视为最优雅,最具成本效益且最有效的系统,以防止用户因违反系统时钟而违反您的演示时间:与使用计算机的计算机相比,真的非常恼火时钟设置错误的日期。这仅适用于家庭用户。对于(合法)企业来说,它甚至不是一个可行的选择。任何不被这种威慑的人都可能是一个脚本小子,他们从来没有真正有能力为你的软件买单。

答案 1 :(得分:1)

使用http://xheo.com/产品。它们提供了一个非常适合保护代码的代码obfiscator,以及一个可以完成您想象的所有事情的许可平台。它们提供了一个可以编译到代码中的版本。

加密 - http://xheo.com/products/code-protection 许可证 - http://xheo.com/products/copy-protection

答案 2 :(得分:1)

为什么不直接使用互联网资源,例如www.time.gov?您可以折叠C ++ Qt应用程序并使用他们的QtWebKit库http://doc.qt.nokia.com/4.7/qtwebkit.html来下载时间。 (我从来没有做过这样的事情,但是看看它看起来很有前途的文档。)第一次运行程序时,你创建一个带有时间戳的小文件,或者为了更加安全,将时间戳写入a program-essential dll并重新编译它。每次运行程序时都会检查此项。如果他们没有连接到互联网,你会警告他们几次,但最终会中断负载。

我认为,许多软件包使用的另一个变体是,您在 服务器上存储用户开始使用软件的日期。使用特定于用户的代码为每个用户重新编译程序(您可以编写脚本),程序会在每次加载时根据服务器上存储的日期进行自我检查。

答案 3 :(得分:1)

如何以不可恢复的方式存储?可以删除注册表项和文件。备用数据流不会被压缩到zip文件中,因此如果您知道包含ADS的文件包含软件的安装数据(用于引用自安装以来计算天数的当前时间),则可以只在zip文件中压缩它然后再次提取它并再见到安装日期参考。将其作为原始数据存储在硬盘驱动器上(未在文件分配表中作为文件引用),当文件保存到硬盘驱动器上的该位置时,它将被覆盖。

所以我确实无法找到一种方法,无法删除copyprotection的试用安装日期。它无法完成。

答案 4 :(得分:0)

或许更好的想法是免费赠送一个只有极少功能的小应用程序。客户然后支付额外的功能或附加组件。

在我的申请中,人们建议我提供更多数据,但需要付费。该应用程序可以免费使用最少的数据。另一个想法是去高级数据访问的订阅费路线。