步驟 1.2:添加許可證檢查代碼
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ò)誤的情況下才能最有效地使用。
如果您以前沒有這樣做,是時(shí)候?qū)?VMProtect SDK 包含到您的項(xiàng)目中了。SDK包含三個(gè)文件:頭文件(VMProtectSDK.h)、庫文件(VMProtectSDK32.lib)和帶實(shí)現(xiàn)的dll文件(VMProtectSDK32.dll)。對(duì)于 64 位系統(tǒng),庫和 dll 文件有單獨(dú)的實(shí)現(xiàn)。
將 dll 文件、頭文件和庫文件放入我們應(yīng)用程序的工作文件夾中,源文件所在的位置,并將頭文件包含到主文件中:
#include <windows.h> #include <stdio.h> #include "VMProtectSDK.h"
構(gòu)建項(xiàng)目并確保它像以前一樣編譯和運(yùn)行。許可系統(tǒng)尚未激活。
將序列號(hào)發(fā)送到許可系統(tǒng)
現(xiàn)在,在序列號(hào)行的正下方,我們添加對(duì)許可系統(tǒng)的 SDK 函數(shù)的調(diào)用:
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity int res = VMProtectSetSerialNumber(serial); printf("res = 0x%08X\n", res);
如果執(zhí)行此操作后程序停止并提示缺少所需的 dll 文件,請確保將相應(yīng)的 DLL 文件放入我們應(yīng)用程序的工作文件夾中。如果執(zhí)行成功,您應(yīng)該會(huì)看到以下消息:
2 對(duì)應(yīng)于API 中描述的SERIAL_STATE_FLAG_INVALID 標(biāo)志。這意味著許可系統(tǒng)認(rèn)為我們的密鑰不正確,這是真的,因?yàn)槲覀儧]有向系統(tǒng)“解釋”哪些密鑰是正確的,哪些不是。
[TestLicense] AcceptedSerialNumber=Xserialnumber
現(xiàn)在,再次運(yùn)行我們的程序。如果您仍然收到“2”錯(cuò)誤代碼,請確保 ini 文件位于應(yīng)用程序的工作文件夾中。這次我們應(yīng)該收到“0”。這是許可系統(tǒng)接受并批準(zhǔn)序列號(hào)的標(biāo)志。現(xiàn)在我們可以從代碼中刪除is_registered()函數(shù)——許可系統(tǒng)現(xiàn)在負(fù)責(zé)檢查序列號(hào):
#include <windows.h> #include <stdio.h> #include "VMProtectSDK.h" int main(int argc, char **argv) { char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity int res = VMProtectSetSerialNumber(serial); printf("res = 0x%08X\n", res); if (res) { printf("please register!\n"); return 0; } printf("We are registered.\n"); return 0; }