步骤1.6:限制程序的运行时间
自从程序启动那一刻起,您就可以限制它的运行。这对于演示目的很有用:您向用户提供了一个真实的序列号,但程序的运行时间不超过 5 分钟。授权系统不会强制关闭此类程序,而只是设置状态标志。因此,让我们通过在 ini 文件中添加以下行来设置一分钟的最大工作时间:
TimeLimit=1
并修改程序如下:
int main(int argc, char **argv) { char *serial = "Xserialnumber"; // 为简单起见,我们直接在代码中设置序列号。 int res = VMProtectSetSerialNumber(serial); print_state(res); if (res) return 0; VMProtectSerialNumberData sd = {0}; VMProtectGetSerialNumberData(&sd, sizeof(sd)); printf("程序将运行 %d 分钟。\n", sd.bRunningTime); print_state(VMProtectGetSerialNumberState()); Sleep(60 * 1000 * sd.bRunningTime); printf("%d 分钟后:\n", sd.bRunningTime); print_state(VMProtectGetSerialNumberState()); return 0; } }
程序在启动时显示序列号的状态,然后计算最大运行时间并等待它到期。然后再次显示序列号状态。将最大操作时间设置为一分钟,我们应该会收到以下结果:
state = 0 程序将运行 1 分钟。 state = 0 1 分钟后: state = SERIAL_STATE_FLAG_RUNNING_TIME_OVER
受保护程序应定期分析序列号的状态,如果设置了标志,则关闭。授权系统不会自动执行此操作,因为程序可能需要释放内存、将数据保存到文件等。此外,您可能希望程序在操作时间到期后不停止,而是切换到更受限制的模式。授权系统将此设置留给开发人员决定。