如何保护软件免受系统日期时间的变化?

时间:2010-08-04 09:04:43

标签: windows security datetime licensing offline

我想将许可系统添加到应用程序中。例如:用户购买许可证1个月后该程序到期(Kinda Anti-Virus风格?)。

问题是应用程序应该在可能或可能未连接到互联网的系统中运行,那么如何防止日期时间变化?

将应用启动和关闭时间存储在加密文件中将不起作用,因为日期可以更改(程序正常运行时间为每天8小时,在理想情况下可以将许可证扩展到近300% - 更改应用程序关闭的时间启动程序前的时间+ 1秒。)

另一个问题 - 有没有办法保护像http://en.wikipedia.org/wiki/Deep_Freeze_(software)这样的软件? (也许扫描司机?)

修改
我目前正在使用智能卡存储许可信息,并将在关键功能上使用代码虚拟器(我知道在API调用上创建断点并检查传递的数据 - 不需要隐藏数据,只是为了确保按计划进行)

13 个答案:

答案 0 :(得分:19)

是的,可以将许可证延长最多300%,但需要付出巨大努力才能完成。坦率地说,如果有人打算花一个月的每一天将他们的时间重新设置为一秒钟,然后再开始再次使用它,那么你就没有什么可以做的了,你需要停下来的时间他们将花费你比以往更多的费用。

答案 1 :(得分:10)

步骤1:在Windows注册表和文件中以加密格式创建trial_tracker条目。

第2步:将应用安装时间戳(yyyy-mm-dd-hh-mm-ss)分配给trial_tracker

每当应用程序启动时,检查当前系统时间戳是否大于trial_tracker且是否小于预期的到期日期

  • 如果是,请将trial_tracker更新为当前系统时间戳并继续。

  • 如果不是,则trial_tracker已被篡改或审判时间已过期。要求用户购买完整版或退出。

注意:用户可以通过删除Windows注册表项和加密文件来解决此问题(如果他能够找到它们)。 在这种情况下,可以添加进一步的检查。例如,创建辅助Windows注册表项,检查是否存在主注册表和加密文件。

除此之外,还可以应用额外的远程检查,这取决于互联网连接(可选)

答案 2 :(得分:8)

声誉良好的游戏开发经理曾在一次会议上表示,即使使用互联网连接,也不可能保护软件超过一个月 - 如果您的软件很受欢迎:-)那么您只需编写无人想要的软件即可尽可能安全: - )))

如果在另一方面你编写了相当受欢迎的软件,那么如果只有一小部分付费用户会花费一些额外的时间,那么你也不会在乎 - 他们无论如何都要续约一周。如果你真的想做短时间许可,你必须把互联网作为先决条件。如果它对某些东西有好处,它仍然会在一个月内被破解:-)但付费客户基本上仍然会以相当轻的执行力向客户付款。

但是,如果你通过做侵入性和可怕的事情来惹恼别人,那么你就会失去付费的客户并为ppl创造更大的动力来破解它。

答案 3 :(得分:3)

创建随应用程序安装的Windows服务,但是自动启动。跟踪经过的时间和偏移量。为您的应用提供API,以便与服务进行通信,以查询使用/已用时间。

答案 4 :(得分:2)

我认为软件电话至少回家一次,以告知您已购买/安装/扩展许可证密钥?

由于他们购买了许可证密钥并且他们没有购买另一个许可证密钥时间已用完,您可以联系他们并询问他们如何进行并让他们知道他们需要续订。如果他们确实选择滥用您的系统,只需简单的聊天就可以让他们停下来。

答案 5 :(得分:2)

也许你可以将日期/时间的使用与滴答计数结合起来?然后,如果您看到具有不兼容的滴答计数的日期/时间,您可以将其标记为违规。这会改变您最糟糕的情况,要求他们在想要操纵时钟滥用您的许可时重新启动计算机。

答案 6 :(得分:2)

从您的程序中创建启动和退出应用程序的时间日志。日志已加密,阻止普通用户欺骗其内容。

使用此日志,您可以查看正常时间是否已经过去。如果没有,那么在这个系统上发生了一些可疑的事情。在这种情况下,显示一个带有电话号码的对话框,他们可以给您打电话。

您还可以通过数据文件确保程序只能运行一个月,因为上述数据文件不包含下个月的数据,这需要更新。

这个想法是时间线性地流向未来,它只能从发布日期增加计数器,并且程序在将来运行时需要外部数据,因此您已经在更新时创建了依赖关系。最后一个策略是Microsoft和co使用的,他们称之为安全更新/补丁......

答案 7 :(得分:1)

您应减少检查之间的时间。您应该使用计时器或后台线程每5,10或15分钟检查一次,而不是仅检查应用程序启动和应用程序关闭。通过这种方式,用户无法更改时间(因为软件将在几分钟内停止)。

但是,我更愿意支付我需要的软件,而不是在我的机器上没有正确的日期/时间。

答案 8 :(得分:0)

创建一个在启动时启动的Windows驱动程序,获取系统日期时间,并运行直到关闭,独立于Windows跟踪时间[sleep(1000); ++时间; ]

当您的应用程序启动时,请检查该服务是否正在运行,并检查日期时间!将它与您安装的日期时间进行比较,您可以判断是否已过期。

注意:如果有任何应用程序执行此操作,我不会首先安装它。如果我的任务是破解它,那将是微不足道的。没有办法阻止逆向工程。没有。无论怎样,它都会被破解。当它发生时,你会后悔任何时间进入这个。

答案 9 :(得分:0)

启用权限使用日志记录(在安装过程中),然后在Windows事件日志中检查时间更改事件,如下所述:

http://www.stevebunting.org/udpd4n6/forensics/timechange.htm

然后,您可以从许可证中扣除时差(而不是使许可证无效,因为某些系统时钟更改是合法的。)

注意:从BIOS更改时,这不能防止系统时钟发生变化。

答案 10 :(得分:0)

你在保护方面投入了太多精力。

相反,您的试用软件应该包含恼人的限制,这些限制不会阻止您的用户对其进行评估,但肯定会阻止他们将其用于业务。

答案 11 :(得分:0)

如果您担心执行许可证,也许您可​​以将此软件作为服务提供?

答案 12 :(得分:0)

一种方法是将软件下载的当前时间和日期存储在加密文件中,该文件应与软件包一起使用。

另一种方法是将文件存储在用户计算机中,并使用该文件继续检查软件中的硬编码日期。