步驟 1.3:檢索序列號(hào)狀態(tài)標(biāo)志
VMProtect 是保護(hù)應(yīng)用程序代碼免遭分析和破解的可靠工具,但只有在正確構(gòu)建應(yīng)用程序內(nèi)保護(hù)機(jī)制并且沒(méi)有可能破壞整個(gè)保護(hù)的典型錯(cuò)誤的情況下才能最有效地使用。
VMProtect 是保護(hù)應(yīng)用程序代碼免遭分析和破解的可靠工具,但只有在正確構(gòu)建應(yīng)用程序內(nèi)保護(hù)機(jī)制并且沒(méi)有可能破壞整個(gè)保護(hù)的典型錯(cuò)誤的情況下才能最有效地使用。
打印標(biāo)志的便捷功能
首先,我們需要一個(gè)方便的函數(shù)來(lái)將標(biāo)志的數(shù)值轉(zhuǎn)換為序列號(hào)的可理解狀態(tài)。下面是這個(gè)函數(shù)的代碼:
#define PRINT_HELPER(state, flag) if (state & flag) printf("%s ", #flag) void print_state(INT state) { if (state == 0) { printf("state = 0\n"); return; } printf("state = "); PRINT_HELPER(state, SERIAL_STATE_FLAG_CORRUPTED); PRINT_HELPER(state, SERIAL_STATE_FLAG_INVALID); PRINT_HELPER(state, SERIAL_STATE_FLAG_BLACKLISTED); PRINT_HELPER(state, SERIAL_STATE_FLAG_DATE_EXPIRED); PRINT_HELPER(state, SERIAL_STATE_FLAG_RUNNING_TIME_OVER); PRINT_HELPER(state, SERIAL_STATE_FLAG_BAD_HWID); PRINT_HELPER(state, SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED); printf("\n"); }
盡管大小不一,但功能非常簡(jiǎn)單——一一檢查所有位標(biāo)志并打印狀態(tài)變量中存在的所有內(nèi)容。在檢查調(diào)用print_state的序列號(hào)后替換代碼中的printf,并更改我們傳遞給許可系統(tǒng)的序列號(hào):
char *serial = "Xserialnumber1"; // we set the serial number directly in the code, for simplicity int res = VMProtectSetSerialNumber(serial); print_state(res);
現(xiàn)在,如果我們運(yùn)行這個(gè)程序,下面的消息將被打印到控制臺(tái):
state = SERIAL_STATE_FLAG_INVALID please register!
現(xiàn)在,我們通過(guò)刪除“1”放回舊密鑰并再次運(yùn)行程序:
state = 0 We are registered.
現(xiàn)在,我們可以看到序列號(hào)的狀態(tài)標(biāo)志,讓我們開(kāi)始從序列號(hào)中檢索標(biāo)志和數(shù)據(jù)。
檢索序列號(hào)狀態(tài)
您可以通過(guò)三種方式獲取序列號(hào)的狀態(tài):通過(guò)調(diào)用VMProtectSetSerialNumber()、通過(guò)調(diào)用VMProtectGetSerialNumberState()或通過(guò)調(diào)用VMProtectGetSerialNumberData() – 狀態(tài)標(biāo)志被放入結(jié)構(gòu)的字段之一。每種方法都旨在在特定時(shí)間使用。第一次檢查序列號(hào)是在安裝期間執(zhí)行的。此時(shí)應(yīng)拒絕錯(cuò)誤號(hào)碼、過(guò)期號(hào)碼、黑名單號(hào)碼等。一些限制,例如,程序的最長(zhǎng)運(yùn)行時(shí)間或序列號(hào)到期日期也應(yīng)在運(yùn)行時(shí)檢查。和VMProtectGetSerialNumberState()方法是這里最快和最方便的方法。如果您需要接收有關(guān)序列號(hào)的完整信息,您可以使用更強(qiáng)大的VMProtectGetSerialNumberData()函數(shù)。