將VMProtect集成到應用程序教程:許可API函數(shù)
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現(xiàn)最好的效果。
本文介紹許可API函數(shù)的相關(guān)內(nèi)容。
免費下載VMProtect體驗版 優(yōu)惠購買VMProtect正式版
許可系統(tǒng)API是VMProtect API及其SDK的組成部分。使用API可以指定序列號并檢索有關(guān)它的所有信息,包括是否適合該程序、序列號是否已過期、該產(chǎn)品注冊到的名稱等等。同樣,API提供了程序在其上運行的計算機的硬件標識符。
VMProtectSetSerialNumber
此函數(shù)將序列號加載到許可系統(tǒng)。調(diào)用語法:
int VMProtectSetSerialNumber(const char * SerialNumber);輸入的SerialNumber參數(shù)必須包含一個指向以null結(jié)尾的字符串('\ 0')的指針,該字符串包含以64為基數(shù)的序列號。該函數(shù)返回序列號狀態(tài)標志的位掩碼,與VMProtectGetSerialNumberState()返回的掩碼相同。您可以在下面閱讀有關(guān)標志的更多信息。如果函數(shù)返回0,則序列號為“good”。
VMProtectGetSerialNumberState
此函數(shù)返回通過調(diào)用VMProtectSetSerialNumber()指定的序列號的狀態(tài)標志。
int VMProtectGetSerialNumberState();如果至少設(shè)置了一個標志,則序列號有問題。如果設(shè)置了至少一位,該程序?qū)o法運行。下表列出了標志及其值的詳細說明:
Flag |
值 | 描述 |
SERIAL_STATE_FLAG_CORRUPTED |
0×00000001 |
許可系統(tǒng)已損壞。原因可能是:保護項目的設(shè)置錯誤,嘗試破解。 |
SERIAL_STATE_FLAG_INVALID |
0×00000002 |
序列號不正確。如果許可系統(tǒng)無法解密序列號,則設(shè)置該標志。 |
SERIAL_STATE_FLAG_BLACKLISTED |
0×00000004 |
序列號與產(chǎn)品匹配,但在VMProtect中列為黑色。 |
SERIAL_STATE_FLAG_DATE_EXPIRED |
0×00000008 |
序列號已過期??赏ㄟ^調(diào)用VMProtectGetSerialNumberData()獲得有關(guān)到期日期的詳細信息。 |
SERIAL_STATE_FLAG_RUNNING_TIME_OVER |
0×00000010 |
該程序的運行時間已用完。您可以通過調(diào)用VMProtectGetSerialNumberData()獲得有關(guān)程序運行時間的詳細信息。 |
SERIAL_STATE_FLAG_BAD_HWID |
0×00000020 |
硬件標識符與密鑰中指定的硬件標識符不匹配。 |
SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED |
0×00000040 |
序列號與受保護程序的當前版本不匹配。可通過調(diào)用VMProtectGetSerialNumberData()獲得此序列號匹配的程序的最大構(gòu)建日期。 |
此函數(shù)獲取有關(guān)通過調(diào)用VMProtectSetSerialNumber()獲得的序列號內(nèi)容的信息。調(diào)用語法:
bool VMProtectGetSerialNumberData(VMProtectSerialNumberData * Data,int Size);第一個參數(shù)是指向VMProtectSerialNumberData結(jié)構(gòu)的指針,將在其中寫入所有必要的信息。第二個參數(shù)是第一個參數(shù)中傳遞的結(jié)構(gòu)的大小。需要控制結(jié)構(gòu)的格式。如果許可系統(tǒng)已損壞(請參見SERIAL_STATE_FLAG_CORRUPTED標志)、提供的結(jié)構(gòu)地址為零或傳遞的結(jié)構(gòu)大小不正確,則該函數(shù)返回FALSE。在其他情況下,該函數(shù)返回TRUE,并將有關(guān)序列號的所有信息記錄到提供的地址中。以下是該結(jié)構(gòu)的要素:
元素 | 類型 | 描述 |
nState |
int |
指示密鑰狀態(tài)的位標志掩碼。與VMProtectGetSerialNumberState()返回的類似。 |
wUserName |
wchar_t[256] |
UNICODE中的客戶名稱,以空值結(jié)尾。 |
wEMail |
wchar_t[256] |
客戶使用UNICODE的電子郵件,以零結(jié)尾。 |
dtExpire |
VMProtectDate |
密鑰到期日期。VMProtectDate結(jié)構(gòu)的格式如下所述。 |
dtMaxBuild |
VMProtectDate |
給定密鑰可以使用的最大產(chǎn)品生產(chǎn)日期。VMProtectDate結(jié)構(gòu)的格式如下所述。 |
bRunningTime |
int |
該程序?qū)⑦\行的分鐘數(shù)(一個會話的最長持續(xù)時間)。以分鐘為單位的值,從程序啟動時算起。 |
nUserDataLength |
unsigned char |
bUserData字段中用戶數(shù)據(jù)的長度。 |
bUserData |
unsigned char[255] |
用戶數(shù)據(jù)放入密鑰中。實際的字節(jié)數(shù)在nUserDataLength中指定。 |
元素 | 類型 | 描述 |
wYear |
無符號短 |
年 |
bMonth |
無符號字符 |
月份,從1開始 |
bDay |
無符號字符 |
天,從1開始 |
該功能獲取程序正在運行的PC的硬件標識符。調(diào)用語法:
int VMProtectGetCurrentHWID(char * HWID,int大小);第一個參數(shù)是指向?qū)懭霕俗R符的存儲區(qū)的指針。第二個參數(shù)是該區(qū)域的大小。該函數(shù)返回寫入的字節(jié)數(shù),包括尾隨的零字節(jié)('\ 0')。如果第一個參數(shù)中提供了NULL,則該函數(shù)返回存儲硬件標識符所需的字節(jié)數(shù)。下面是使用該函數(shù)的正確方法:
int nSize = VMProtectGetCurrentHWID(NULL, 0); // get the required buffer size char *pBuf = new char[nSize]; // allocate memory for the buffer VMProtectGetCurrentHWID(pBuf, nSize); // obtain the identifier // use the identifier delete [] pBuf; // release memory
有關(guān) VMProtect 更多資源,請聯(lián)系【慧都客服】了解
雙“旦”狂歡鉅惠,領(lǐng)優(yōu)惠券購VMProtect享折上折>>>