如何保护软件免受系统date – 时间变化的影响?

我想向应用程序添加许可系统。 例如:用户购买一个月的许可证,并在该程序过期后(Kinda Anti-Virus style?)。

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

以encryption文件存储应用程序的启动和closures时间将不起作用,因为date可以更改(每天8小时的程序正常运行时间,在理想情况下可以将许可证扩展到近300% – 将时间更改为应用程序closures时间+1第二次启动程序之前)。

另一个问题 – 有什么办法来保护软件,如http://en.wikipedia.org/wiki/Deep_Freeze_(software) ? (也许扫描驱动程序?)

编辑:
我目前正在使用智能卡来存储许可信息,并将在关键function上使用代码虚拟器(我知道关于API调用断点和检查传递的数据 – 不需要隐藏这些数据,只是为了确保事情按计划进行)

Solutions Collecting From Web of "如何保护软件免受系统date – 时间变化的影响?"

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

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

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

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

  • 如果否,trial_tracker已被篡改或试用期过期。 要求用户购买完整版本或退出。

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

随着这些,可以应用额外的远程检查,这取决于互联网连接(可选)

是的,这将有可能延长许可证高达300%,但对用户很大的努力。 坦率地说,如果有人要在一个月的每一天中花费一些时间将他们的时间重新设置为一秒钟,然后再重新开始使用它,那么就没有任何事情要做,停止的时间他们将花费你比以往更多。

有信誉的游戏开发经理在会议上曾经说过,即使连接了互联网,也不可能保护软件的时间超过一个月 – 如果你的软件很受欢迎:-)所以你可以写一个没有人愿意的软件,你要 :-)))

如果在另一方面,你写的是相当流行的软件,那么你可以不在乎少一些付费客户是否有一点额外的时间 – 他们会在一周后续订。 如果你真的想做短时间许可,你必须把互联网作为一个先决条件。 如果对某些东西有好处的话,它仍然会在一个月内被破解,但付费客户大体上仍然会以合理的轻量级执法为客户付款。

不过,如果你通过干扰和吓人的东西来惹恼别人,那么你就会失去付钱的客户,并且会为更多的人创造更大的动力去破解它。

创建一个与您的应用程序一起安装的Windows服务,但是会自动启动。 跟踪时间和偏移量。 为您的应用程序提供一个API来与服务通话以查询使用情况/已用时间。

我假设软件电话至少有一次,让你知道许可证密钥已被购买/安装/扩展?

自从他们购买许可证密钥以来,时间已经耗尽,他们还没有购买另一个,你可以联系他们,询问他们是怎么回事,让他们知道他们需要更新。 如果他们选择滥用你的系统,简单的电话聊天可能足以让他们停下来。

也许你可以结合使用日期/时间和滴答计数? 然后,如果您看到日期/时间不匹配,则可以将其标记为违规。 这将改变你最坏的情况,要求他们重新启动机器,只要他们想操纵时钟来滥用你的许可证。

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

有了这个日志,你可以看到时间是否正常流逝,是时间流逝的未来。 如果没有,那么在这个系统上发生了一些可怕的事情。 在这种情况下,显示一个电话号码的对话框,他们可以打电话给你。

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

这个想法是,时间是线性的向未来流动,它只能增加从发射日期计数器和外部数据是需要的程序将来运行,所以你已经创建了更新的依赖关系。 这最后一个策略是微软和合作使用,他们称之为安全更新/补丁…

你应该减少检查之间的时间。 而不是仅在应用程序启动和应用程序关闭时进行检查,而应使用计时器或后台线程每5或10或15分钟检查一次。 这样用户不能改变时间(因为软件将在几分钟内停止)。

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

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

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

注意:如果任何应用程序这样做,我不会安装在第一位。 如果我的任务是破解它,这将是微不足道的。 没有办法阻止逆向工程。 没有。 无论如何,它都会被破解。 如果真的发生了,你会后悔的。

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

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

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

注:从BIOS更改时,这不会保护系统时钟的更改。

你在保护本身上付出了太多的努力。

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

也许你可以提供这个软件作为服务,如果你担心执行许可证?

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

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