对于简单的产品密钥库,我需要可靠地检查某个日期是否过去了 我想做一些比检查系统时钟稍微微不足道的事情,因为用户可以很容易地改变它。
这样做的标准方法是什么?
有人建议的一种方法是检查在检查日期之后是否有修改过的文件。这听起来不错,但我应该查看哪些文件?显然,我不想随意开始扫描用户的磁盘。
修改 - 我想避免使用基于网络的解决方案。
答案 0 :(得分:2)
我正在读行间。我想你想制作一个“试用软件”版本。特别是因为你提到“破解”。
我可以想象的“试用期”日期最好的非网络解决方案是不要担心绝对日期过去,而是实施倒数日。即使您被用户更改CMOS / BIOS日期时间失败了几天,您仍然可以存储上次启动时的日期和时间以及系统滴答计数,以及下次启动时如果看起来日期已经做了除了前进少于一天的少量时间之外的任何事情,那么减少你的“试用期”。您还可以计算应用程序处于活动状态的小时数,并将其计算在内。有人可以通过让您的应用程序远离网络,并通过回滚时钟来无限延长试用版的生命周期,但如果您运行的服务始终在后台运行,您可能能够捕获时钟回滚,并在后台服务检测到一些数字(比方说三个)时钟回滚后停用。
我可能想出一种方法,可以比日期更精确地锁定应用程序中使用的活动小时数。
事实上,如果您正在考虑该软件的“试用版”,为什么不考虑只给用户“xx小时的试用时间”,而不是“30天”。如果30天过去且您的用户没有提及延长日期/时间,他可能会非常恼火,以至于您的试用版在您花费任何时间使用您的软件之前已经过期,您可能会失去销售。
Google的草图专家使用“小时倒计时”技术,我发现评估它更容易。
我认为对另一个问题的答案是我见过的最好的答案: What is the Best way to create a program which works only in the predefined trial period(evaluation period)?
真正的答案是“你能做的任何事情,有很多人会试图打败并破解它”。认真。您希望在加密和混淆上花多少时间?你不会这样赚钱。
答案 1 :(得分:1)
依靠操作系统检查可以更改的日期 - > 你已经输掉了比赛
任何方法都可以而且将会被打破,从失去的位置开始加重侮辱伤害。基于外部网络将是明智的选择,但即使这样也可能被挫败。
您问题的关键词是
而简单的答案是 NO ,没有必要将方形钉子钉入圆孔中。
编辑1:弱解决方案
好的,明白这几乎是一场失败的战斗,如果你仍然坚持在这里有一些非常弱的解决方案是一种可能性:
我们知道时间应该只是向上增加,因此基于这个假设,这可能是我们的“测试”。违反此规则我们可以假设有人篡改了时间,因此阻止了这种情况。
(1)在首次运行应用程序时,使用当前日期(时间戳)创建一个加密文件。
(2)每次运行应用程序时,首先检查此文件并检查操作系统的当前时间。
(3)从我们的基本假设来看,我们应该期望当前时间应该总是大于存储的时间。如果是,我们可以弱地假设操作系统时间是“可靠的”。
(3)如果当前时间小于存储时间,则某人已经篡改了OS时间 - >坏人。
(5)关闭加密当前时间。
(6)如果缺少加密文件也假设坏人。
答案 2 :(得分:0)
您可以查询公司的ntp服务器。当然,用户可能会破坏您的ntp服务器,因此您必须决定使用严苛的安全策略或试图绕过许可技术的用户支持用户的工作量。
答案 3 :(得分:0)
您可以查看时钟,但也可以在注册表中存储您获得的任何其他支票的最新日期。这样,至少一旦用户停用程序一次,就不能再次重新激活它。我能看到的唯一选择是查询某种互联网服务以获得时间,但这并不好。
答案 4 :(得分:0)
您可以请求任何公开的网络服务器(例如www.com)并从响应标题中获取日期。
答案 5 :(得分:-1)
如果应用程序是跟踪版本方案,您可以允许用户仅使用该应用程序一定次数。
答案 6 :(得分:-2)
我不确定没有基于网络的解决方案是什么意思。有一个网络服务可以获取任何位置的日期和时间。
<强> EarthTools 强>
应用程序可以在安装应用程序时以及启动应用程序时在创建者的位置获取日期和时间。
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>