軟件保護(hù)工具VMProtect將許可系統(tǒng)集成到應(yīng)用程序(6)——限制免費(fèi)升級(jí)期限
VMProtect是一種很可靠的工具,可以保護(hù)應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護(hù)機(jī)制正確構(gòu)建且沒(méi)有可能破壞整個(gè)保護(hù)的嚴(yán)重錯(cuò)誤的情況下,才能實(shí)現(xiàn)最好的效果。
建筑保護(hù)總是經(jīng)歷兩個(gè)主要步驟:開(kāi)發(fā)和發(fā)布。至于許可,首先創(chuàng)建一個(gè)應(yīng)用程序,將保護(hù)集成到其中,然后添加檢查和功能限制。只有經(jīng)過(guò)全面測(cè)試,才能將產(chǎn)品提供給用戶并開(kāi)始第二階段。測(cè)試受保護(hù)的應(yīng)用程序是一個(gè)復(fù)雜的過(guò)程,因?yàn)樾枰_保所有檢查和條件跳轉(zhuǎn)都能正常運(yùn)行。
許可系統(tǒng)提供“開(kāi)發(fā)者模式”(AKA“測(cè)試模式”),在此工作模式下,不對(duì)應(yīng)用程序應(yīng)用任何保護(hù),并且在配置文件中調(diào)整系統(tǒng)對(duì)提供的序列號(hào)的反應(yīng)。當(dāng)應(yīng)用程序沒(méi)有錯(cuò)誤并且它正確地與許可系統(tǒng)一起使用時(shí),VMProtect將“測(cè)試”許可模塊替換為執(zhí)行實(shí)際序列號(hào)檢查的真實(shí)模塊。
致改變世界的程序員——10月在線購(gòu)買VMProtect低至801元起,更有現(xiàn)金抵扣紅包邀您來(lái)領(lǐng)!更多活動(dòng)詳情可哦~
測(cè)試模式
在測(cè)試模式中,許可系統(tǒng)(它返回的狀態(tài)和數(shù)據(jù))對(duì)提供的序列號(hào)的所有反應(yīng)都在配置文件中描述。該文件名為VMPLicense.ini,應(yīng)位于應(yīng)用程序的工作文件夾中。在下面提供的10個(gè)步驟中,將從創(chuàng)建最簡(jiǎn)單的應(yīng)用程序到在測(cè)試模式下全面使用許可系統(tǒng),具有硬件鎖定和限制免費(fèi)升級(jí)的時(shí)間。
▲步驟七:限制程序的運(yùn)行時(shí)間
VMProtect保護(hù)應(yīng)用程序時(shí),它將記錄日期。 許可系統(tǒng)將此日期視為應(yīng)用程序的生成日期。 您可以在序列號(hào)中輸入該序列號(hào)可以使用的最大構(gòu)建日期。 因此,如果將當(dāng)前日期加上一年作為序列號(hào),它將與一年中要發(fā)布的程序的所有版本一起使用。 您一年后一天發(fā)布的版本將無(wú)法使用該序列號(hào),用戶可以選擇:使用程序的舊版本或購(gòu)買新密鑰,以使用該程序的最新版本一年。
將格式為MaxBuildDate = YYYYMMDD的行放入ini文件中:
MaxBuildDate=20000101
在測(cè)試模式下,許可系統(tǒng)將今天視為構(gòu)建日期,因此,必須通過(guò)此行中指定的日期,這一點(diǎn)很重要。即,最大日期是昨天。修改main()函數(shù)的代碼,使其如下所示:
將格式為MaxBuildDate = YYYYMMDD的行放入ini文件中:
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!
通過(guò)將ini文件中的日期替換為今天或明天,我們得到了“工作”程序:
state = 0 I'm registered
從ini文件中刪除MaxBuildDate =…行,以免影響我們的后續(xù)步驟。
-- 未完待續(xù) --
掃描關(guān)注“慧聚IT”微信公眾號(hào),及時(shí)獲取最新動(dòng)態(tài)及最新資訊
