如何检查用户是否调回了时钟?
-
20-09-2019 - |
题
在我的桌面程序中,我想检查用户是否已将时钟调回。
为此,我将某些操作系统文件的时间戳与当前计算机日期进行比较。如果有任何晚于计算机认为的当前日期,那么他一定已经将时钟调慢了。
对于 Windows XP,我一直使用以下文件:
c:\win386.swp
c:\windows\user.dat
and several others.
两个问题:
这是一个不错的方法吗,还是有更好的方法?
(假设 1 的答案是“不错”)有哪些好的 Windows Vista 和 Windows 7 文件可供比较?
结论:普里扬克说了一些我听不懂的话:最简单的方法可能是仅使用程序本身的时间戳,而不是使用任何系统文件。毕竟,它的安装日期正是您希望试用的开始日期。
事实证明,您的回答以及我对其他相关 StackOverflow 问题和提到的文章的研究使我决定采用一个更简单的方案。我的试用用户已经必须获得密钥才能使用试用版。我已将注册日期嵌入到密钥中。我真的不需要检查是否将时钟拨回。相反,我可以查看当前时间是否在注册日期和注册日期加 n 天之间。
如果他们想不厌其烦地绕过这个计划,那就随他们去吧。我同意那些人无论如何都不会付钱。让您的程序变得有价值,让人们喜欢、想要使用,并且大多数人愿意付费。
解决方案
Windows 文件总是有较早的日期,最好是用系统日期检查程序的创建或修改日期。或者,每次程序退出时,请务必记下时间戳并将其与下次启动程序时进行比较,并且始终存在 NTP: http://en.wikipedia.org/wiki/Network_Time_Protocol
其他提示
恕我直言,更好的方法是在程序第一次运行时将当前时间戳存储在注册表中,然后将其与下次运行时的当前时间戳进行比较,如果一切正常则更新时间戳。
这不是直接回答,只是提供一些意见和参考。我太长了,无法添加评论。
如果目的是创建一个有时间限制的软件以供演示/试用,我们需要在实施它的程度和用户“破解”它的倾向之间找到平衡。
我经常告诉人们,如果你的软件吸引了黑客,那么它可能是有用的/好的。保护一个没有人觉得有用的软件是没有意义的。
不管怎样,撇开哲学讨论不谈,下面是一些关于这个话题的好读物:
如何实施限时试用 在乔尔的论坛上
限时试用和 Windows 认证 上SO
需要有关实施限时试用的建议 上SO
一种选择是从网络服务或时间服务器获取日期。这里的问题是,这只有在有互联网连接可用的情况下才有效,因此这只是更安全的补充方法。
Windows 提供了用于通知系统时间更改的 API。一个例如是否提供了 sysinfo.ocx activex 控件 这里.