我正致力于创建一个功能齐全的软件试用版。现在,因为我不想要时间有限(如30天试用期)或功能有限的试用版,所以最好选择'用户可以执行软件'试用的次数。
它是一个基于C#的.NET应用程序,我正在努力找到实现它的方法。尝试过注册表项,基于文件的跟踪等,但它们似乎不太可靠。
非常感谢有关此主题的帮助。
谢谢, 罗汉
答案 0 :(得分:5)
试用期跟踪的正常两种方式是使用注册表项和Web服务:
注册表项:实现一些将程序启动次数持久保存到Windows注册表中的密钥的方法,可能需要进行某种混淆。一个“盐渍”加密方案,您加密一个包含您的值的方案加上一些与机器相关的值,如NIC的MAC地址,可能效果最好;使用Dotfuscator之类的东西确保您的代码难以反编译。最好使用安装程序将密钥放在适当的位置,这样程序就可以简单地将缺少密钥视为篡改。
然后,在启动时,检索密钥,解密并检查它。如果它是您所期望的,请将值加1,将其写回注册表,如果新值大于允许的启动数,则将用户锁定。如果注册表项永远是您不期望的值(意味着它们被篡改),包括根本不存在,只需将用户锁定即可。
这种方法的优点是无需Internet即可提供非常强大的安全性。缺点是“机器相关”细节可能因合法原因而改变,当发生这种情况时,您的用户在使用所有启动之前就会被锁定,这会让用户感到沮丧。此外,用户计算机上还存在盐析和加密的实现;即使你混淆了代码,一个老练的黑客也会有办法检查你的程序,并且可以发现你的实现并模仿它来“重置”计数器。它只需要一个人可以做到这一点,并且会有一个简单的Warez应用程序允许其他人这样做。
Web服务:在您控制的服务器上实施WCF服务。将其锁定得很紧,因此进出局域网的唯一方法是通过WCF端口完全按照WCF的预期方式。现在在程序及其安装程序中实现客户端。安装时,安装程序将调用一种服务方法,说明软件正在安装在具有特定MAC地址或硬件ID的计算机上。如果您没有在数据库中列出该唯一计算机,请添加它;否则什么都不做。然后,在程序启动时,从程序中调用Web服务,传入相同的信息,Web服务将更新启动次数,并返回一个值,告诉客户端是否允许启动。
网络服务的优势在于,通过Warez进行大规模营销的方式很难绕行;攻击这样一个系统的主要方法是破解许可证服务器,或者放入一个“中间人”,可以将程序的Web服务请求重定向到他控制的计算机。缺点是计算机硬件ID的更改仍然可能导致早期锁定,或者更糟糕的是,通过允许攻击者简单地欺骗您以前从未见过的新MAC地址或硬件ID来允许解决方法,并重新安装您的软件用户在“新”机器上启动一组新的启动。有一些方法可以防止这种情况,但是你添加的每个级别的混淆和反黑客检查都是一层复杂性。
无论你做什么,记住80/20规则;通过最基本的措施确保试用过程的80%,您的用户将保持诚实。 20%的用户会找到解决方法。在这20%中,80%的人会因为你采取的任何额外措施而受到阻碍。这个过程是递归的;关键在于,有人会在某处采取任何措施,但如果数学成立,96%的用户只会在面对移位加密的注册表项和混淆程序时付费并支付全部访问权限码。您可以通过添加任何其他内容来获得99.2%的用户,例如使用特定于机器的内容来模糊混淆密钥。