Pau*_*aul 5 windows licensing date
我有一个Windows/C++应用程序,其中包含一个硬编码的到期日期,以便发布到期并停止在特定日期运行,如2009年8月30日.
显然,用户可以收回系统时间来解决此限制.
如果日期已经过去,即使用户已将系统日期恢复,有没有一种方法可以阻止我的应用程序运行?
PS我不能为此目的使用互联网连接.我相信将最后一次执行时间写入文件/注册表也很容易打破.
谢谢.
保罗
为了使到期日期更难以避免,您可以将最近执行的时间存储在"隐藏"的某个位置,并确保用户无法及时返回.任何体面的"黑客"都会解决这个问题,但对于普通用户而言,这将是一件很麻烦的事情.
在使用依赖于正确日期/时间的其他程序时,使用错误的日期会产生一些不良副作用.因此,当用户每次启动软件时都非常绝望地改变他的日期/时间时,他总是不会买它...
进一步改善到期机制就像此时游戏的复制保护一样.好的游戏无论如何都会出售,有些则不然.
您可以将第一个和最后一个执行日期存储在一个文件中,并存储它的盐渍校验和.正如@Timbo所说,任何体面的黑客都会绕过这个(就像他几乎任何其他方法一样).
像这样,你可以在任何地方(可能在寄存器中)存储这样的东西
20090801:20090815:20090901
ca5579e3bacb7557b6ed22b5f553f9d5
Run Code Online (Sandbox Code Playgroud)
存在:
20090801 - the start date
20090815 - the last execution date
20090901 - the final date
ca5579e3bacb7557b6ed22b5f553f9d5 - the salted MD5 checksum
Run Code Online (Sandbox Code Playgroud)
这样你就可以使用这样的算法检查校验和的有效性
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;
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以使用SHA-1或您喜欢的任何其他摘要算法.只要确保你使用一个不容易猜到的SecretSalt.
您可以检查LastExecutionDate当前日期以检查日期是否向后更改.
| 归档时间: |
|
| 查看次数: |
18593 次 |
| 最近记录: |