2012-02-29 89 views
2

我正在创建软件的全功能试用版。现在,因为我不想有时间限制(比如30天试用版)或者功能有限的试用版,所以用'用户可以执行软件的次数'试用版会很好。软件试用 - 限制使用次数

它是一个基于C#的.NET应用程序,我正在努力想出一个方法来实现这一点。尝试过的注册表项,基于文件的跟踪等,但他们似乎不是很可靠。

真的很感谢这个话题的帮助。

感谢, 罗汉

+3

什么问题? – 2012-02-29 18:46:34

+0

产品密钥和基于Web的授权,产品被锁定,直到Auth完成?比我聪明的人可能会有更好的想法。 – FGhilardi 2012-02-29 18:47:28

+2

您选择了最不可靠的试用模式之一,那么您为什么惊讶它不是很可靠? – CodesInChaos 2012-02-29 19:06:28

回答

5

正常的两种方式试用期保持跟踪的是一个注册表项,并使用Web服务:

  • 注册表项:实现一些方法在Windows注册表中将一些程序启动项存入一个密钥中,可能会造成某种混淆。一种“盐味”加密方案,在这种方案中,你加密一个包含你的价值的方案加上一些与机器有关的值,比如网卡的MAC地址,可能效果最好;确保你的代码很难反编译,使用Dotfuscator之类的东西。最好将密钥放在使用安装程序的地方,以便程序可以简单地将密钥的缺失视为篡改的尝试。

    然后,在启动时,检索密钥,解密并检查它。如果这是您所期望的,请将该值加1,将其写回注册表,如果新值大于允许的启动次数,则锁定用户。如果注册表项永远是您不期望的值(意味着它们被篡改了),包括根本不存在,只需将用户锁定即可。

    这种方法的优点是它提供了非常强大的安全性,无需互联网。缺点是“机器相关”细节可能会因合法原因而发生变化,如果发生这种情况,用户在使用所有开始之前就会被锁定,这可能会阻止用户。此外,用户的计算机上还存在用于腌制和加密的实施;一个复杂的黑客将有办法检查你的程序,即使你混淆了代码,并且可以发现你的实现并模仿它来“重置”柜台。只需要一个人就可以做到这一点,并且会有一个简单的Warez应用程序来允许其他人执行此操作。

  • Web服务:在您控制的服务器上实现WCF服务。将其锁定严密,所以从局域网外部进出的唯一方法就是通过WCF端口完全按照WCF预期的方式进行。现在在你的程序和安装程序中实现一个客户端。在安装时,安装程​​序将调用一种服务方法,说明该软件正在安装在具有特定MAC地址或硬件ID的计算机上。如果您的数据库中没有列出该独特的机器,请添加它;否则不要做任何事情。然后,在程序启动时,从您的程序中调用Web服务,传入相同的信息,Web服务将更新启动次数,并返回一个值,告诉客户端是否允许启动。

    Web服务的优势在于,通过Warez可以大规模销售的方式非常困难;攻击这种系统的主要方式是破解许可证服务器,或者放入一个“中间人”,他可以将程序请求的Web服务重定向到他控制的计算机。缺点是对计算机硬件ID的更改仍然可能导致过早锁定,或者更糟糕的是,允许攻击者仅仅伪造一个您以前从未见过的新MAC地址或硬件ID,然后重新安装软件用户在“新”机器上启动一组新的启动。也有办法可以防止这种情况发生,但是每增加一层混淆和反黑客检查都会增加复杂性。

无论你做什么,请记住80/20规则;通过确保试用过程的最基本措施,80%的用户将会保持诚实。 20%的用户会找到解决办法。在这20%中,其中80%将受到您采取的任何额外措施的阻碍。这个过程是递归的;重点在于某个人会在任何地方避开任何措施,但如果数学成立,96%的用户会面对转移加密的注册表键和混淆程序时付出全额访问权限码。你可以通过添加其他任何东西来达到99.2%的用户,比如用特定机器来诋毁密钥。

+0

非常感谢你的想法。我相信注册表方法应该这样做,因为无线认证可能会削弱我的服务器,并且肯定会减慢用户体验,因为每次用户打开软件时都需要进行认证;有时候他们不会连接到互联网。 – Rohan 2012-03-02 06:47:04