1

对于一个简单的产品密钥库,我需要可靠地检查某个日期是否已过。
我想做一些比检查系统时钟更简单的事情,因为用户可以轻松更改它。

这样做的标准方法是什么?

有人建议的一种方法是检查是否有在检查日期之后修改的文件。这听起来不错,但我应该检查哪些文件?显然我不想开始随意扫过用户的磁盘。

编辑- 我想避免基于网络的解决方案。

4

7 回答 7

2

我在字里行间阅读。我想你想制作一个“试用软件”版本。特别是因为你提到“开裂”。

对于“试用期”日期,我能想象的最好的非网络解决方案是不要担心绝对日期的过去,而是实施一天倒计时。即使您因用户更改 CMOS/BIOS 日期时间而失败了数天,您仍然可以存储上次启动和下次启动时的日期和时间以及系统滴答计数向上,如果看起来该日期除了向前推进少于一天的一小段时间之外还做了其他任何事情,那么请减少您的“试用剩余天数”计数器。您还可以计算应用程序处于活动状态的小时数,并将其倒数。通过使您的应用程序远离网络并回滚时钟,某人可以无限期地延长试用版的生命周期,

我可能想出一种方法来非常准确地锁定应用程序中使用的活动时间,比日期更准确。

事实上,如果您正在考虑软件的“试用版”,为什么不考虑只给用户“xx 小时的试用时间”,而不是“30 天”。如果 30 天过去了,而您的用户没有摆弄日期/时间来延长它,他可能会很生气,以至于您的试用期在他花任何时间使用您的软件之前就过期了,您可能会失去一笔销售。

谷歌的草图专家使用“小时倒计时”技术,我发现评估它更容易。

我认为这个对另一个问题的回答是我见过的最好的回答: 创建一个只在预定义的试用期(评估期)有效的程序的最佳方法是什么?

真正的答案是“你能做的任何事情,都会有很多人试图打败它并破解它”。严重地。您想在加密和混淆上花费多少时间?这样你就赚不到钱了。

于 2010-07-19T14:30:13.177 回答
1

依赖操作系统检查可以更改的日期-->你已经输掉了游戏

任何方法都可以并且将会被打破,以增加对您从失去位置开始的伤害的侮辱。基于外部网络将是明智的选择,但即使这样也可能会受到阻挠。

你问题的关键词是

可靠的

简单的答案是否定的,将方形钉锤入圆孔是没有意义的。

编辑1:弱解决方案

好的,理解这几乎是一场失败的战斗,如果你仍然坚持有一些非常弱的解决方案,这是一种可能性:

我们知道时间应该只会向上增加,因此基于这个假设,这可以是我们的“测试”。违反此规则,我们可以假设有人在篡改时间并因此阻止此案例。

(1) 在应用程序第一次运行时,使用当前日期(时间戳)创建一个加密文件。

(2) 每次运行应用程序时,首先检查该文件并从操作系统检查当前时间。

(3) 从我们的基本假设来看,我们应该期望当前时间应该总是大于存储时间。如果是,我们可以弱假设操作系统时间是“可靠的”。

(3) 如果当前时间小于存储时间,那么有人已经在篡改 OS 时间 -> 坏人。

(5) 关闭时加密当前时间。

(6) 如果加密文件丢失也假设是坏人。

于 2010-07-19T10:55:32.207 回答
0

您可以查询您公司的 ntp 服务器。当然,用户可能会通过防火墙使您的 ntp 服务器不存在,因此您必须决定要进行多少工作来支持具有严格安全策略的用户或试图绕过您的许可技术的用户。

于 2010-07-19T10:17:59.707 回答
0

您可以查看时钟,还可以将最新日期存储在注册表中的任何其他检查中。这样,至少一旦用户停用了程序一次,就不能再次重新激活它。我能看到的唯一选择是查询某种互联网服务来获取时间,但这并不好。

于 2010-07-19T10:27:37.070 回答
0

您可以请求任何公开可用的 Web 服务器(例如 www.com)并从响应标头中获取日期。

于 2010-07-19T10:28:32.337 回答
-1

如果是试用版场景,您可以只允许用户使用应用程序一定次数。

于 2010-07-19T10:29:46.613 回答
-2

我不确定没有基于网络的解决方案是什么意思。有一个 Web 服务可用于获取任何位置的日期和时间。

地球工具

当应用程序安装和启动时,应用程序可以在创建者的位置获取日期和时间。

EarthTools 要求您每秒提交的请求不要超过一个,这对于大多数用途来说应该足够了。

这是纽约的示例查询:http ://www.earthtools.org/timezone/40.71417/-74.00639

这是示例响应:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://www.earthtools.org/timezone.xsd">
    <version>1.1</version>
    <location>
        <latitude>40.71417</latitude>
        <longitude>-74.00639</longitude>
    </location>
    <offset>-5</offset>
    <suffix>R</suffix>
    <localtime>4 Dec 2005 12:06:56</localtime>
    <isotime>2005-12-04 12:06:56 -0500</isotime>
    <utctime>2005-12-04 17:06:56</utctime>
    <dst>False</dst>
</timezone>
于 2010-07-19T13:36:33.967 回答