【问题标题】:How Can I Check To See If the User Set His Clock Back?如何检查用户是否将时钟调回?
【发布时间】:2010-12-17 08:51:23
【问题描述】:

在我的桌面程序中,我想检查用户是否已将时钟调回。

为此,我将某些操作系统文件的时间戳与当前计算机日期进行比较。如果有任何晚于计算机认为的当前日期,那么他一定是把时钟调回来了。

对于 Windows XP,我一直在使用这样的文件:

c:\win386.swp
c:\windows\user.dat
and several others.

两个问题:

  1. 这是一种不错的方法,还是有更好的方法?

  2. (假设 1 的答案是“体面”)有哪些好的 Windows Vista 和 Windows 7 文件可以与之比较?


结论:Priyank 说了一些让我难以理解的显而易见的话:与其使用任何系统文件,最简单和最简单的方法可能是只使用程序本身的时间戳。毕竟,它的安装日期正是您希望试用开始的日期。

事实证明,您的回答以及我对其他相关 StackOverflow 问题和提到的文章的研究使我决定采用一个更简单的方案。我的试用版用户已经获得了使用试用版的密钥。我已将注册日期嵌入到密钥中。我真的不必检查是否将时钟调回。相反,我可以查看当前时间是否介于注册日期和注册日期加上 n 天之间。

如果他们想麻烦绕过那个计划,那就让他们来吧。我同意那些人无论如何都不会付钱。使您的程序成为人们喜欢和想要使用并且大多数人愿意付费的东西。

【问题讨论】:

    标签: windows windows-7 windows-vista windows-xp clock


    【解决方案1】:

    Windows 文件总是有较早的日期,最好用系统日期检查程序的创建或修改日期。或者在您的程序退出时,请务必记下时间戳并将其与下次启动程序时进行比较,并且始终存在 NTP:http://en.wikipedia.org/wiki/Network_Time_Protocol

    【讨论】:

    • @Konamiman & @Priyank 这些解决方案仅适用于某些互联网连接...
    • 大多数用户都有互联网连接,无论如何我也提出了其他方法来比较文件的时间戳并在退出编程时记录时间戳并在启动时检查相同的内容。虽然我不推荐注册表,但它很容易找到和修改。
    • @Priyank:这只是一个评论,但你们都是对的,我会选择 NTP 解决方案,因为那是最好的
    • @Ragez:我知道。我在答案中提到了这一点。
    【解决方案2】:

    恕我直言,更好的方法是在第一次运行程序时将当前时间戳存储在注册表中,然后在下次运行时将其与当前时间戳进行比较,如果一切正常,则更新时间戳。

    【讨论】:

    • 我可能会存储几个时间戳,如果我想变得偏执,我也会对它们进行加密。
    • 你会将加密密钥存储在哪里,以便你的程序可以解密它而用户不能?
    • 如果他找到了注册表项(使用注册表监控程序很容易做到),那么他可以将它们全部删除,程序会认为它是新安装的。很多黑客都这样做。
    • @Ikessler:我认为几乎所有的安全/锁定都可能被破解,所以在实现之后更容易以及有多少人不会试图将其破解到死亡,必须达成共识。
    • @Ikessler: 像@Priyank & @Konamiman 指出 NTP 解决方案是最好的,因为用户无法破解 NTP 服务器(但用户可以破解自己的 TCP 堆栈并晕倒......但是与普通用户技能相去甚远),但它要求您的用户具有连接性,这从用户的角度来看并不好。
    【解决方案3】:

    这不是一个直接的答案,只是提供一些意见和参考。太长了,我无法添加为评论。

    如果目的是创建一个用于演示/试用的限时软件,我们需要在您实施它的程度与用户“破解”通过它的趋势之间找到一个平衡点。

    我经常告诉人们,如果您的软件吸引了黑客,那么它可能是有用/好的东西。保护没有人认为有用的软件毫无意义。

    不管怎样,抛开哲学讨论,以下是关于这个主题的一些不错的读物:

    How to Implement time-limited trial 在 Joel 的论坛上
    Time limited trial and Windows Certification 在 SO
    Need Advice on Implementing a Time-limited Trial 在 SO

    【讨论】:

      【解决方案4】:

      一个选项是从网络服务或时间服务器获取日期。这里的问题是,这仅在有可用的互联网连接时才有效,因此这只是一种更安全的补充方法。

      【讨论】:

        【解决方案5】:

        Windows 提供 API 用于通知系统时间更改。一个例如是 sysinfo.ocx activex 控件提供的here。

        【讨论】:

        • 这只有在windows在时间改变时运行时才有效。如果用户通过 BIOS 或他可能正在运行的其他操作系统安装更改时间,则此 API 不会触发。
        猜你喜欢
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        相关资源
        最近更新 更多