步骤1.7:限制免费升级期
这个怎么运作
当 VMProtect 保护应用程序时,它会记录日期。授权系统将此日期视为应用程序的构建日期。您可以在序列号中输入该序列号可以使用的最大构建日期。因此,如果您将当前日期加上一年的序列号,它将适用于您将在一年内发布的所有程序版本。一年后发布的版本将无法使用此序列号,用户可以选择:使用旧版本的程序或购买新密钥以使用最新版本的程序再使用一年。
让我们尝试一下
将格式为 MaxBuildDate=YYYYMMDD 的行放入 ini 文件中:
MaxBuildDate = 20000101
在测试模式下,授权系统将今天视为构建日期,因此这一行中指定的日期已经过去很重要。也就是说,最大日期是昨天。修改 main() 函数的代码,使其看起来像这样:
int main(int argc, char **argv) { char *serial = "Xserialnumber"; // 为简单起见,我们直接在代码中设置序列号。 int res = VMProtectSetSerialNumber(serial); print_state(res); if (res) { VMProtectSerialNumberData sd = {0}; VMProtectGetSerialNumberData(&sd, sizeof(sd)); printf("最后编译日期: y = %d, m = %d, d = %d\n", sd.dtMaxBuild.wYear, sd.dtMaxBuild.bMonth, sd.dtMaxBuild.bDay); printf("请注册!\n"); return 0; } printf("已注册\n"); return 0; }
然后,在程序运行后,您应该看到以下内容:
state = SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED 最后编译日期: y = 2000, m = 1, d = 1 请注册!
通过将 ini 文件中的日期替换为今天或明天,我们最终得到了 “工作” 程序:
state = 0 已注册
从 ini 文件中删除 MaxBuildDate=... 行,这样它就不会影响我们的进一步步骤。