許可系統(tǒng) API 功能
VMProtect 是新一代軟件盜版保護解決方案。VMProtect 是目前強大的反盜版解決方案之一,許多領(lǐng)先的軟件發(fā)行商都在使用它。VMProtect允許保護可執(zhí)行文件(EXE,SCR),動態(tài)鏈接庫(DLL,OCX,BPL)和驅(qū)動程序(SYS)。
加密解密技術(shù)交流群(766135708)
許可系統(tǒng) API 功能
許可系統(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ù)必須包含一個指針,指向一個包含base-64編碼的序列號的空尾字符串('\0′)。該函數(shù)返回一個序列號狀態(tài)標志的位掩碼,與VMProtectGetSerialNumberState()返回的相同。你可以在下面閱讀更多關(guān)于標志的信息。如果該函數(shù)返回0,則序列號為 "good"。
VMProtectGetSerialNumberState
該函數(shù)為調(diào)用VMProtectSetSerialNumber()指定的序列號返回狀態(tài)標志。
int VMProtectGetSerialNumberState();
如果至少有一個標志被設(shè)置,說明序列號有問題,程序就不應(yīng)該工作。標志和它們的值的詳細描述列在下表中:
Flag | Value | Description |
---|---|---|
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 | 序列號已經(jīng)過期。你可以通過調(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 | 硬件標識符與密鑰中規(guī)定的硬件標識符不一致。 |
SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED | 0×00000040 | 序列號與被保護程序的當前版本不匹配。你可以通過調(diào)用 VMProtectGetSerialNumberData()獲得與該序列號匹配的程序的最大構(gòu)建日期。 |
VMProtectGetSerialNumberData
該函數(shù)獲取調(diào)用VMProtectSetSerialNumber()獲得的序列號的內(nèi)容信息。調(diào)用語法;
bool VMProtectGetSerialNumberData(VMProtectSerialNumberData *Data, int Size);
第一個參數(shù)是一個指向VMProtectSerialNumberData結(jié)構(gòu)的指針,所有必要的信息都將被寫入該結(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)的成分:
Element | Type | Description |
---|---|---|
nState | int | 表示一個鍵的狀態(tài)的位標志掩碼。類似于VMProtectGetSerialNumberState() |
wUserName | wchar_t[256] | 以UNICODE為單位的客戶名稱,以空結(jié)尾 |
wEMail | wchar_t[256] | 密鑰過期日期。VMProtectDate結(jié)構(gòu)的格式描述如下。 |
dtExpire | VMProtectDate | 密鑰過期日期。VMProtectDate結(jié)構(gòu)的格式描述如下。 |
dtMaxBuild | VMProtectDate | 給定的密鑰可以使用的最大產(chǎn)品構(gòu)建日期。VMProtectDate結(jié)構(gòu)的格式描述如下。 |
bRunningTime | int | 程序?qū)⒐ぷ鞯姆昼姅?shù)(一個療程的最長時間)。以分鐘為單位的數(shù)值從程序開始時算起。. |
nUserDataLength | unsigned char | bUserData字段中用戶數(shù)據(jù)的長度。 |
bUserData | unsigned char[255] | 放入密鑰的用戶數(shù)據(jù)。實際的字節(jié)數(shù)在nUserDataLength中指定。 |
VMProtectDate結(jié)構(gòu)通過一個緊湊的日期表示。它的字段在下表中列出:
Element | Type | Description |
---|---|---|
wYear | unsigned short | 年 |
bMonth | unsigned char | 月,從一開始 |
bDay | unsigned char | 日,從一開始 |
VMProtectGetCurrentHWID
該函數(shù)獲取程序所工作的PC的硬件標識符。調(diào)用句法:
int VMProtectGetCurrentHWID(char * HWID, int Size);
第一個參數(shù)是一個指針,指向標識符被寫入的內(nèi)存區(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