0

我对这个问题的第一个解决方案是使用 OS/BIOS 计时器并使用加密的日期文件检查它(见下面的伪代码)

public void CheckFrequently()
{ 
   DateTime registeredDate = ReadFromBiosOrOSTimer(); 
   DateTime readEncryptedDate = ReadFromEncryptedFile(); 

   if(registeredDate >= readEncryptedDate) 
   { 
      ShowExpireDateForm();
      CloseProgram();
   }
}

在这种情况下,很明显用户可以轻松更改 OS/BIOS 计时器,而我的方法不起作用。

我的问题是:

  1. 有什么方法可以解决用户操作系统/BIOS 定时器更改问题?
  2. 有没有更好的方法来为 .Net 项目设置到期日期?
4

1 回答 1

4

(我的回答是假设你想要一个“到期”的某种程序。)

最终的老大哥答案是从外部来源(例如 Web 服务)检索受信任的时间。当然,连通性(或缺乏连通性)可能会使这成为不可能。

除此之外,如果知道有人要欺骗时钟,他们很可能会在接近到期时做这件事,定期在某处写入当前时间的时间戳。如果您遇到检索(通过系统调用)时间小于最后一个时间戳的情况,则可能有人试图欺骗时钟,您可以使用适当的错误消息使会话/实例无效。一旦你检测到“过期”的情况,很容易拨动开关并拒绝继续运行。

综上所述,像这样的对策很可能总是被足够坚定的对手击败。

于 2012-07-16T16:38:01.103 回答