我如何使我的产品作为30天的试用版?
我已经创build了我的产品,也为此生成了许可证密钥,但是我想在30天后询问该密钥。 我已经做了与registry值存储date,添加30天在那。 但我发现如果用户在我的逻辑不工作之前30天更改系统date。
那么是否有任何解决scheme的试用版软件没有检查系统date,只允许30天的试用?
你可以有另一个registry键,每天使用后增加。 这样,即使他们改变了计算机的date,这个键也会向你的程序表明它已经运行了30天以上。
此外,可以对此值进行encryption,以便如果用户尝试手动更改该值,程序可能会拒绝运行,因为它无法解密该值并从中获取有效的号码。
为了避免重新安装,您可以添加一些信息到您的应用程序的试用版本保存的任何文件,这是该应用程序的特定版本(可能是安装时的时间戳)所特有的。 当您的应用程序的试用版尝试打开文件时,它将检查此签名并确保它是使用同一实例创build的,否则拒绝打开文件。 这基本上是neuters能够简单地重新安装应用程序,并继续使用它。
尽pipe如此,用户可以完全控制自己的机器,也可以find解决办法的任何方法(在用户使用应用程序之前,无法访问Web服务,在这些服务中保留这些细节) )。 你可能不应该花费太多的精力试图阻止那些愿意经历这个额外麻烦的人,而是花费那些额外的时间/金钱/精力为那些愿意支付的人改进应用程序。
您可以使用许可组件。 您可以自己创build一个(请参阅LicenseManager类 ),或者从供应商处购买一个(例如CryptoLicensing )。
我有一个简单的解决scheme给你。
以registry的2个variables:1.date2.计数器
脚步:
-
设置一个计数器= 1
-
将系统date复制到date
-
每次检查date是否与当前date不同,比将该date复制到registrydate,还将计数器增加1.如果date相同,则不要执行任何操作。
-
现在你可以检查你的审判日到期的计数器
通过使用这些技巧,如果用户将系统date更改为以前的date,也可以使用。
对于registry,您可以encryptiondate和计数器,以便技术人员不会识别您的逻辑!
干杯…
添加
只有当用户不改变每天的date时,这个逻辑才会失败! 我们再次为此提供解决scheme!
我不知道是否有可能,但你总是可以有一些解决scheme:
- 计算试用期的总时间并将其存储在registry中。
- 现在计算每次运行的总时间并将其添加到另一个variables中。 (我希望可以通过计时器来完成)
- 比较以上两个值来判断是否到期。
您需要有一种方法来检测用户是否从首次开始试用期间更改date。 在我之前使用过的解决scheme中,我们保存了“上次执行”date和“首次执行”date,如果时钟更改为“最后执行”超过两天的任何date,我们将过期。 你还需要一个“日子执行”的计数器,以便他们不能在两天之后继续移动date(忘记提及该部分) – 计数器在每次执行时都会增加。
当然,像这样的软件许可系统总是可以通过卸载和重新安装适当的刷新registry来避免 – 诀窍是混淆和复制你的许可证信息足以使这个困难,但最终,它会被发现(特别是如果你使用unobfuscated .NET代码库)。
很难处理30天而不参考系统date/时钟。 您可以随时保存应用程序启动date的列表,并且每次与上次时间不同时计为1。 这样,您的用户每次启动应用程序时都必须设置相同的date。
除此之外,您可以提供互联网访问,查询当前date的已知好时间服务器。 这可以通过断开连接来避开,但是在应用程序启动之前,您总是可以要求连接到互联网。
最后,通过硬件encryption狗(dongle)或类似软件的外部本地时间源,但是我认为你正在进入极端,直接pipe理试验。
如果你能保证互联网连接,你可以实现在线scheme(检查时间服务器或你自己的authentication服务器)。 当然,这引入了另一个依赖 – 如果互联网消失,你的用户不能工作。
最终我会说买一个第三方许可解决scheme – 它仍然不是牢不可破的,但它可能会比没有很多时间和精力的事情更强大。
存储上次运行的date,并且每当系统date在此之前,就会过期。
唯一的故障安全方法是根据您所托pipe的服务validation应用程序,假设没有人破解您的连接代码;)
只要他们可以清除registry值/隔离的存储文件/保存的设置:他们可以重新开始试用。 关于这一点你可以做的不多。 这就是为什么除了基于时间的试用期之外,人们select在试用软件中减lessfunction。
如果可以允许说8个小时的试用(而不是30天的试用),那么删除对系统date时间的依赖的一种方法是在你的应用程序中使用一个定时器,每分钟发一个定时器。 对这些进行计数,所以每次应用程序运行时,它都会累积一个总的使用分钟数。 然后,您可以将此计数值存储在某个位置,例如registry中。
这是简单的商店评估结束date,并每天检查它。 为了避免date操作的延长使用,请在应用程序中保持小时数; 不断增加,并写入registry。 对照评估结束date和小时数检查不得超过24(可能有一些偏差30)。
关于:
保存应用程序closures的date时间,下次应用程序可以检测date时间设置是否已更改(至less在closures时间之前它们不能更改)。 例如:
申请截止date:
Saving The Time => 15:34 03/31/2014(已保存)
下一步开始申请:
检查Datime.Now> 15:34 03/31/2014。 (所以他们不能去轰炸…)
添加 :
尝试以某种方式将系统的date时间设置集成到您的应用程序使用:生成发票,票证,收据…无论如何!
你可以使用免费的项目Libprot。 该网站是https://github.com/libprot/trunk 。
这个想法是它应该简单易用。 您可以花费$$$来保护,但可能会在一周内被黑客入侵。 如果有人想要对代码进行逆向工程,那么没有人可以阻止它。 我的build议是使用简单的方法。
写一个string,如:
X公司| 10.2.2014 | 1.12.2015
其中2014年10月12日是当前date,如果系统时间less于某人更改系统时钟=>我们不应该运行
1.12.2015 – 直到钥匙有效的时间
以及购买/下载公司的名称。
该string应该使用带有私钥/公钥的非对称algorithm进行混淆处理,然后编码为可以通过电子邮件发送的string。
您可能还想要一些Web服务进行validation。 当互联网连接时,你可能会validation密钥,如果它被黑客入侵并且可以在互联网上公开,你可以禁止它。 或者如果有人写密钥生成器,你可以validation该密钥是真实的。
您可以在您的网站中添加一些PHP / Java脚本来自动发送试用代码。