14

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

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

有没有人知道我应该考虑一个包罗万象的解决方案?还是我需要做一些注册表潜水并通过自定义代码执行它?

4

5 回答 5

36

经过几年尝试不同许可系统的过程,我发现安全性与潜在客户的疏远之间存在很强的反比关系。

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

临时盗版可以通过基本上归结为温和提醒的方式处理 - 激活密钥、时间限制等。另一方面,故意盗版基本上无法防止。正如索尼、苹果、微软、任天堂和许多其他公司会告诉你的那样,即使你拥有对硬件和软件的控制权,你的保护计划也会被打破。破坏它的人很可能是为了一个有趣的挑战而这样做,也可能是为了获得免费软件。因此,对于某些人口而言,加强保护并不会阻止他们,反而会适得其反。

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

最糟糕的是,这只是合法用户的问题。Crackers 可以很容易地 - 非常容易地 - 借助调试器和反编译器 - 如果它是最后的手段 - 解决它。如果该软件位于最终用户拥有的设备上,您不妨开始思考,好像您的软件已经被破解了。到了一定程度,围绕人们破解他们合法拥有的软件的想法建立了一个家庭手工业,只是为了避免软件保护机制的烦恼。他们会给你钱,但他们仍然会破解软件,因为你的复制保护就是那么令人讨厌,而且很容易绕过。另一种选择——这就是我走的路——是去购买不那么烦人的不同软件,

因此,请使用最低限度 - 观看时钟并暂停演示,因为您确实需要提醒您的用户向您发送支票。但不要以让他们决定不想给你支票的方式这样做。如果您的目标是转化销售,请将此视为最优雅、最具成本效益和最有效的系统,以防止用户通过破坏系统时钟来违反您的演示期:使用具有时钟设置为错误的日期。这仅适用于家庭用户。对于(合法的)企业来说,这甚至不是一个可行的选择。任何不被它吓倒的人都可能是一个脚本小子,他们从一开始就没有能力为你的软件付费。

于 2011-03-30T15:51:47.320 回答
1

为此,请使用http://xheo.com/ products。他们提供了一个非常擅长保护代码的代码混淆器,以及一个可以完成您所能想象的一切的许可平台。他们提供了一个可以编译到您的代码中的版本。

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

于 2011-03-30T15:23:05.243 回答
1

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

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

于 2011-03-30T15:28:35.483 回答
1

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

所以我真的看不出有一种方法可以删除复制保护的试用安装日期。就是做不到。

于 2012-02-01T23:09:42.460 回答
0

也许更好的主意是免费赠送一个只有最少功能的较小应用程序。然后客户为额外的功能或附加组件付费。

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

于 2011-03-30T16:55:51.223 回答