-->

如何使软件在Windows上的某个日期过期吗? [关闭](How to make softwar

2019-06-27 09:10发布

我有一块视窗/ C ++应用程序,它包括一个硬编码有效期限,使得释放期满并停止在某个日期运行2009年8月30等的。

显然,用户可以收回系统时间来解决此限制。

有没有好的办法阻止我的应用程序,如果该日期已过,即使用户已经将系统日期向后运行?

PS我不能使用用于此目的的互联网连接。 我相信写的最后执行时间到文件/注册表也将是太容易折断。

谢谢。

保罗

Answer 1:

不管你做什么都会被破解,所以你最好专注于您的软件,而不是保护。 把事情简单化。 如果人们决心摆脱你保护他们的意志。 他们甚至可以虚拟机,所以当天的审判是不是真的可以强制执行的限制。



Answer 2:

为了让过期日期比较难一点,以避免,你可以存储最近执行的地方“隐藏”的时间并确保用户不能及时返回。 任何像样的“黑客”会解决这个问题,但对于乔普通用户就太麻烦了。

使用依赖于正确的日期/时间等程序时使用错误的日期工作有一些不好的副作用。 因此,当用户足够绝望的他每次启动软件的时间来改变他的日期/时间,他不会买它呢?

改善到期机制进一步就像是在这一点上的游戏拷贝保护。 好游戏反正卖,不好的不要。



Answer 3:

您可以将存储的第一和最后执行日期在文件中还存储它的盐渍校验。 作为@Timbo说,任何像样的黑客会解决这个问题(因为他会与几乎任何其他方法)。

这样,你可以存储这样的事情在文件的任何地方(也许在寄存器)

20090801:20090815:20090901
ca5579e3bacb7557b6ed22b5f553f9d5

存在:

20090801 - the start date
20090815 - the last execution date
20090901 - the final date
ca5579e3bacb7557b6ed22b5f553f9d5 - the salted MD5 checksum

这种方式可以检查校验的合法性验证使用这样的算法

bool CheckExpiry()
{
    string SecretSalt = "Y*##d3F!@g^hk";
    string InitialDate = FetchInitialDate();
    string LastExecutionDate = FetchLastExecutionDate();
    string FinalDate = FetchFinalDate();
    int Checksum = FetchChecksum();

    string FinalString = InitialDate + ":" + SecretSalt + ":" + LastExecutionDate + ":"  + FinalDate;
    int InternalCheckSum = md5sum( FinalString );

    return InternalCheckSum == CheckSum;
}

当然你也可以使用SHA-1或任何其他消化您想了解更多的算法。 只要确保你使用一个不容易被猜到的SecretSalt

你可以检查LastExecutionDate针对当前日期检查日期被向后改变。



Answer 4:

你可以尝试存储(里面的代码,而不是在一个文件中)的到期日期md5summed,这可以从反汇编器增加一些“保护”。 躲在里面的一些其他重要功能的日期校验码,不写一个特定的功能来做到这一点。 您也可以编辑在合约到期的exe文件,只是为了避免“更改日期”的把戏。



Answer 5:

在这种情况下,申请到期时你可以在系统中的一些变化。 换句话说获取所有正在运行的系统日期,而不是系统的变化应该有应用。

当它被过期,您可以添加注册表项。 或者可以是文件的删除。

这是我一个解决问题呈三角发起的previoud讨论。 这将是可能有用的..

许可



文章来源: How to make software expire on a certain date on Windows? [closed]