Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何检查最终用户快进Windows系统日期_C#_.net_Windows_Winforms_Datetime - Fatal编程技术网

C#如何检查最终用户快进Windows系统日期

C#如何检查最终用户快进Windows系统日期,c#,.net,windows,winforms,datetime,C#,.net,Windows,Winforms,Datetime,我正在编写一个C#Windows窗体应用程序,将提供试用版和完整版。对于试用版,我想提供最终用户每日使用积分(即每天使用应用程序中特定功能的3个积分) 我看过很多关于防止系统日期篡改的文章和讨论,但我看到的都是关于提供试用期的;禁止将系统日期更改为以前的日期。以下是一些: 但就我而言,我有相反的商业理由。如果用户通过快速转发到未来的某一天来篡改系统日期,那么只需更改日期就可以轻松获得使用信用。很明显,我不想要这个 作为经验法则,你有什么建议来检查C#Winforms应用程序中的日期篡改,不仅

我正在编写一个C#Windows窗体应用程序,将提供试用版和完整版。对于试用版,我想提供最终用户每日使用积分(即每天使用应用程序中特定功能的3个积分)

我看过很多关于防止系统日期篡改的文章和讨论,但我看到的都是关于提供试用期的;禁止将系统日期更改为以前的日期。以下是一些:

但就我而言,我有相反的商业理由。如果用户通过快速转发到未来的某一天来篡改系统日期,那么只需更改日期就可以轻松获得使用信用。很明显,我不想要这个

作为经验法则,你有什么建议来检查C#Winforms应用程序中的日期篡改,不仅是向后的,而且是向前的

另外,我需要在离线状态下完全实现这一点。NTP或外部API调用将是一个很好的解决方案,但此应用程序可能主要用于脱机客户端

Ps2我正在考虑检查Windows操作系统特定系统文件的“上次修改时间”属性。例如,如果有这样一个Windows系统文件,它的“上次修改时间”在每次Windows重新启动时都会更新,那么我觉得我可以快速识别系统日期。有什么想法吗?

许多评论说,在本地管理它不是傻瓜式的,通过这种类比,任何开发的软件也是如此。但是,我必须承认,当您将沙盒放到用户完全控制的本地pc上时,事情并不是那么容易

这里的问题是,您愿意添加多少层以使其难以打破。软件对环境修改的容忍度是多少,这需要用户体验的成本。具有多层次的安全性和最小的容忍度。 有了这些,你已经很好地强化了它


一些安全层我可以想到:

  • 将注册表配置单元中的计时器逻辑加密为二进制值
  • 在事件查看器中查找事件,查找您怀疑与篡改系统属性有关的任何特定更改。(可以在此处捕获对系统日期的更改)
  • 实现一个自动启动的服务(如果您想监视某些内容)
  • 注意反编译器并终止许可证,必要时调用自动删除
  • 被怀疑破坏软件的已知PC的MAC地址(可在下次建立internet连接时存储并发送回远程服务器)
您可以设置容差级别,即您的应用程序如何响应可疑操作

示例:如果您怀疑有人试图停止服务或操纵/删除注册表,您可以发出警告或终止许可证,或者采取任何您想要执行的反措施

免责声明:其中一些可能具有侵入性,这是您必须牺牲的代价

p.S:


我相信有更多的方法来强化它,你的想法是什么

你可以创建一个内部计时器来计时,而不是对照一个时钟?如果有人在afk时打开应用程序,您可能希望在应用程序未被有效使用时添加某种暂停功能。除非您可以在线查看权威时间源,否则您将无法区分用户关闭计算机两周的情况,他们重新启动BIOS,并在重新启动前两周将时钟向前拨。@saygley所有的拷贝保护系统都会崩溃是有原因的。如果您自己无法存储许可证状态,最终用户总是可以破坏它。除非修改文件,否则文件修改日期不会更改。您可以保留自己的计时器并对其进行加密,但精明的用户可以使用eg ProcMon查看应用程序启动时的功能。您可以通过执行各种随机操作、修改多个文件等来混淆这一点,但是。。。。20世纪90年代和00年代的游戏也是如此,但它们仍然被破坏。有人可以随时使用反编译器来查看您的保护代码是如何工作的。你可以混淆这一点,执行许多随机操作,但同样,过去的游戏也是如此。此外,模糊处理通常会引入自己的、难以修复的错误。那么你的问题就是一个典型的基于观点的问题。实施DRM/拷贝保护的创意永无止境,对此有意见的人也永无止境。每种方法的质量都与它的知名度和想要规避它的人的积极性密切相关。作为第一条经验法则,离线机器上的管理员用户完全可以控制,而您的软件则不能,并且将会丢失。尽你所能地聪明(比如“他们肯定不会这么做”)。谁知道呢,你甚至可能是对的。你的答案假设什么软件会改变系统。在安装软件之前拍摄系统快照,然后使用它,然后恢复-现在如果你运行软件,它的行为就像它从未在这里出现过一样..任何一层本身都不会对整体安全性产生太大影响,当它们协同行动时,它们会意识到潜在的危险亲爱的@Clint,您列表中的第一项将是满足我需求的最具成本/效益的方式。我无法解决的问题是如何构建这样的“计时器逻辑”。显然,我应该依赖计算机中存储的日期时间值;我认为最可靠的值应该是Windows操作系统使用的文件的“创建/上次修改”信息,可能是用于引导过程。我不寻求“完美的”/“过度工程化的”解决方案,我只需要一些逻辑,这些逻辑对于许多普通用户来说是很难打破的。当然,毕竟我会加密/混淆相关数据/代码。@saygley,一旦你发布了确切的任务,你可以在这里告诉我