• <menu id="w2i4a"></menu>
  • logo VMProtect用戶手冊

    文檔首頁>>VMProtect用戶手冊>>將VMProtect集成到應用程序教程:許可API函數(shù)

    將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)建日期。
    VMProtectGetSerialNumberData

    此函數(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中指定。
    VMProtectDate結(jié)構(gòu)是一個緊湊的日期表示。其字段如下表所示:

    元素 類型 描述
    wYear
    無符號短
    bMonth
    無符號字符
    月份,從1開始
    bDay
    無符號字符
    天,從1開始
    VMProtectGetCurrentHWID
    該功能獲取程序正在運行的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享折上折>>>
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();