我正在致力于创建功能齐全的软件试用版。现在,因为我不想要时间有限(例如 30 天试用)或功能有限的试用,所以最好选择“用户可以执行软件的次数”试用。

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

非常感谢有关此主题的帮助。

谢谢,罗汉

有帮助吗?

解决方案

跟踪试用期的常用两种方法是使用注册表项和使用 Web 服务:

  • 注册表项: 实现某种方法,将程序启动次数保存到 Windows 注册表中的一个键中,可能需要进行某种混淆。“加盐”加密方案可能效果最好,其中您可以加密包含您的值以及一些与机器相关的值(例如 NIC 的 MAC 地址)的方案;使用 Dotfuscator 之类的工具确保您的代码难以反编译。最好使用安装程序将密钥放置在适当的位置,这样程序就可以将缺少密钥的情况简单地视为试图篡改。

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

    这种方法的优点是无需互联网即可提供非常强大的安全性。缺点是“依赖于机器”的细节可能会因合法原因而改变,当发生这种情况时,您的用户在使用完所有启动之前就被锁定,这可能会让用户感到沮丧。此外,您的加盐和加密实现也存在于用户的计算机上;即使您混淆了代码,老练的黑客也有办法检查您的程序,并且可以发现您的实现并模仿它来“重置”计数器。只需一个人就可以做到这一点,并且将会有一个简单的 Warez 应用程序允许其他任何人做到这一点。

  • 网络服务: :在您控制的服务器上实现 WCF 服务。紧紧锁定它,因此进出 LAN 外部的唯一途径是通过 WCF 端口,这正是 WCF 所期望的方式。现在在您的程序及其安装程序中实现一个客户端。安装时,安装程​​序将调用一个服务方法,表明该软件正在安装在具有特定 MAC 地址或硬件 ID 的计算机上。如果您的数据库中没有列出该唯一的计算机,请添加它;否则什么都不做。然后,在程序启动时,从程序中调用 Web 服务,传入相同的信息,Web 服务将更新启动次数,并返回一个值,告诉客户端是否允许启动。

    Web 服务的优点是很难通过 Warez 进行大规模营销;攻击此类系统的主要方法是破解许可证服务器,或者放置一个“中间人”,他可以将程序对 Web 服务的请求重定向到他控制的计算机。缺点是,对计算机硬件 ID 的更改仍然可能导致早期锁定,或者更糟糕的是,允许攻击者简单地欺骗您以前从未见过的新 MAC 地址或硬件 ID,然后重新安装您的软件,从而提供变通办法在“新”机器上使用一组新的启动。也有一些方法可以防止这种情况,但是您添加的每一级混淆和反黑客检查都会增加一层复杂性。

无论你做什么,请记住 80/20 规则;您的 80% 的用户将通过最基本的措施保持诚实,以确保试用过程的安全。20% 的用户会找到解决方法。在这 20% 中,其中 80% 会因您采取的任何额外措施而受到阻碍。这个过程是递归的;关键是,某个地方的某人会绕过您采取的任何措施,但如果数学成立,当面对移位加密的注册表项和混淆的程序时,96% 的用户会屈服并付费给您完全访问权限代码。您可以通过添加其他任何内容来为 99.2% 的用户提供这一服务,例如使用特定于机器的内容对模糊密钥进行加盐处理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top