如何将我的产品作为试用版制作30天?

时间:2009-10-06 12:47:43

标签: c# security installation trialware

我已创建了我的产品,并为此生成了许可证密钥,但我想在30天后询问该密钥。我已经使用注册表值来存储日期,并添加了30天。但我发现,如果用户在我的逻辑不起作用前30天更改了系统日期。

那么试用版软件是否有任何解决方案,而无需检查系统日期,只允许30天试用?

11 个答案:

答案 0 :(得分:39)

您可以使用另一个在每天使用后增加的注册表项。这样,即使他们更改了计算机的日期,此密钥也会向您的程序表明它正在运行> 30天。

此外,此值可以加密,以便如果用户尝试手动更改它,程序可以拒绝运行,因为它无法解密该值并从中获取有效数字。

要解决重新安装问题,您可以向使用应用程序试用版保存的任何文件添加一些信息,该文件对于该特定版本的应用程序而言是独一无二的(可能是安装时的时间戳)。当您的应用的试用版试图打开文件时,它会检查此签名并确保它是使用同一实例创建的,否则拒绝打开该文件。这基本上是neuters能够简单地重新安装应用程序并继续使用它。

但是,在一天结束时,用户可以完全控制他们的计算机,并且可能找到一种方法可以解决您想要做的事情(在您让用户放弃之前,不能访问保留这些详细信息的Web服务使用该应用程序)。你可能不应该花费太多的精力试图阻止那些愿意经历这个额外麻烦的人,而是花费额外的时间/金钱/精力来改善那些愿意付钱的人的应用程序。

答案 1 :(得分:5)

您可以使用许可组件。您可以自己创建一个(请参阅LicenseManager class),或者从供应商处购买一个(例如CryptoLicensing)。

答案 2 :(得分:5)

我有一个简单的解决方案。

为注册表提取2个变量: 约会 计数器

步骤进行:

  1. 设置计数器= 1

  2. 将系统日期复制到日期

  3. 每次检查日期是否与当前日期不同,而不是将该日期复制到注册日期,也将计数器增加1.如果日期相同,则不要做任何事情。

  4. 现在,您可以查看计数器的试用日到期时间

  5. 通过使用这些技巧,如果用户将系统日期更改为上一个日期而不是它的工作日期。

    对于注册表,您可以加密日期和时间。反制,以便技术人员不会认出你的逻辑!

    ...欢呼声

    <强> ADDED

    只有当用户不更改每一天的日期时,此逻辑才会失败!我们再次为此提供了解决方案!

    我不知道是否可能,但你总能得到一些解决方案:

    1. 计算试用期的总时间&amp;将其存储在注册表中。
    2. 现在计算每次运行的总时间,并将其添加到另一个变量中。 (我希望它可以通过计时器完成)
    3. 比较以上两个值以决定过期。

答案 3 :(得分:2)

您需要有一种方法来检测用户是否更改了首次开始试用时的日期。在我之前使用过的解决方案中,我们已经保存了“最后执行”日期和“第一次执行”日期,如果时钟变为超过“最后执行”两天的时间,我们将使试用期满。你还需要一个“执行日期”的计数器,这样他们就不能在两天前继续移动日期(忘记提及那一部分) - 计数器在每次执行时都会增加。

当然,通过适当刷新注册表来卸载和重新安装,这样的软件许可系统总是可以避免的 - 诀窍是混淆和复制你的许可信息足以使这很困难,但最终,它会被发现(特别是如果您正在使用未经模糊处理的.NET代码库。

答案 4 :(得分:2)

如果不参考系统日期/时钟,很难处理30天。您可以随时保留应用程序启动日期的列表,并在每次与上次不同时计算1。这样,您的用户每次启动应用时都必须设置相同的日期。

除此之外,如果有互联网访问,您可以查询当前日期的已知好时间服务器。这可以通过断开连接来规避,但您可以在应用程序启动之前始终要求连接互联网。

最后,通过硬件加密狗或类似的外部本地时间源,但我认为你正在进入极端,你最好直接管理试验。

答案 5 :(得分:0)

如果您可以保证互联网连接,您可以实施在线计划(检查时间服务器或您自己的身份验证服务器)。当然这引入了另一种依赖 - 如果互联网消失,你的用户将无法工作。

最终我会说购买第三方许可解决方案 - 它仍然不会牢不可破,但它可能比你自己可以做的更强大,而不需要花费大量的时间和精力。

答案 6 :(得分:0)

存储上次运行日期,并且只要系统日期在此之前,就会使试用期到期。

唯一的故障安全方法是针对您托管的服务验证应用程序,假设没有人破解您的连接代码;)

只要他们可以清除注册表值/隔离存储文件/保存设置:他们只需重新启动试用版即可。你无能为力。这就是为什么除了基于时间的试用期外,人们还会选择在试用软件中减少功能。

答案 7 :(得分:0)

如果允许说8小时试用(而不是30天试用),那么一种方法可以消除对系统日期时间的依赖,就是在你的应用程序中使用一个计时器,每分钟都会被解雇。计算这些等等,每次应用程序运行时,它将累计总使用分钟数。然后,您可以将此计数值存储在某处,例如在注册表中。

答案 8 :(得分:0)

这是简单的商店评估结束日期,每天都要检查。为避免日期操作的延长使用,请在应用程序中维护一个小时计数;继续递增并将其写入注册表。应该根据评估结束日期和小时计数进行检查,不超过24小时(可能是30,有一些分辨率)。

答案 9 :(得分:0)

也想想:

保存应用程序关闭的DateTime,下次启动应用程序时,将能够检测Datetime设置是否已更改(至少在关闭时间之前不能更改它)。 示例:

关闭应用程序:

保存时间=&gt; 15:34 03/31/2014(已保存)

下一次启动应用程序:

检查Datime.Now&gt; 2014年3月15日15:34。 (所以他们不能贬低......)

已添加:

尝试以某种方式将系统的日期时间设置集成到您的应用程序中:生成发票,票证,收据......等等!

答案 10 :(得分:0)

您可以使用免费项目Libprot。该网站为https://github.com/libprot/trunk

这个想法是它应该简单易用。您可以将$$$用于保护,但可能会在一周内被黑客攻击。如果有人想对您的代码进行逆向工程,那么没有人可以阻止它。我建议使用有效的简单方法。

写一个字符串,如:

公司X | 10.2.2014 | 1.12.2015

其中10.2.2014是当前日期,如果系统时间较短则有人更改了系统时钟=&gt;我们不应该跑

1.12.2015 - 直到密钥有效的时间

购买/下载的公司名称。

该字符串应使用包含私钥/公钥的非对称算法进行模糊处理,并编码为可通过电子邮件发送的字符串,例如。

您可能还想要一些Web服务进行验证。当互联网连接打开时,您可以验证密钥,如果它被黑客攻击并且可以在互联网上公开,您可以禁用它。或者,如果有人写密钥生成器,您可以验证密钥是否真实。

您可以在站点中添加一些PHP / java脚本以自动发送试用代码。