步驟 1.7:限制免費(fèi)升級(jí)期限
VMProtect 是保護(hù)應(yīng)用程序代碼免遭分析和破解的可靠工具,但只有在正確構(gòu)建應(yīng)用程序內(nèi)保護(hù)機(jī)制并且沒有可能破壞整個(gè)保護(hù)的典型錯(cuò)誤的情況下才能最有效地使用。
VMProtect 是保護(hù)應(yīng)用程序代碼免遭分析和破解的可靠工具,但只有在正確構(gòu)建應(yīng)用程序內(nèi)保護(hù)機(jī)制并且沒有可能破壞整個(gè)保護(hù)的典型錯(cuò)誤的情況下才能最有效地使用。
怎么運(yùn)行的
當(dāng) VMProtect 保護(hù)應(yīng)用程序時(shí),它會(huì)記錄日期。許可系統(tǒng)將此日期視為應(yīng)用程序的構(gòu)建日期。您可以將此序列號(hào)可以使用的最大構(gòu)建日期放入序列號(hào)中。因此,如果您將當(dāng)前日期加上一年作為序列號(hào),它將適用于您將在一年內(nèi)發(fā)布的所有程序版本。一年零一天后發(fā)布的版本將無法使用此序列號(hào),用戶可以選擇:使用舊版本的程序或購買新密鑰以使用最新版本的程序再使用一年.
讓我們試試
將格式為 MaxBuildDate=YYYYMMDD 的行放入 ini 文件中:
MaxBuildDate=20000101
在測試模式下,許可系統(tǒng)將今天視為構(gòu)建日期,因此這一行中指定的日期已經(jīng)過去很重要。也就是說,最大日期是昨天。修改main()函數(shù)的代碼,使其看起來像這樣:
int main(int argc, char **argv) { char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity int res = VMProtectSetSerialNumber(serial); print_state(res); if (res) { VMProtectSerialNumberData sd = {0}; VMProtectGetSerialNumberData(&sd, sizeof(sd)); printf("max. build date: y = %d, m = %d, d = %d\n", sd.dtMaxBuild.wYear, sd.dtMaxBuild.bMonth, sd.dtMaxBuild.bDay); printf("please register!\n"); return 0; } printf("I'm registered\n"); return 0; }
然后,在程序運(yùn)行時(shí),您應(yīng)該看到以下內(nèi)容:
state = SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED max. build date: y = 2000, m = 1, d = 1 please register!
通過將 ini 文件中的日期替換為今天或明天,我們最終得到了“工作”程序:
state = 0 I'm regis從 ini 文件中刪除 MaxBuildDate=… 行,這樣它就不會(huì)影響我們的進(jìn)一步步驟。