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

    文檔首頁>>VMProtect用戶手冊>>將VMProtect集成到應(yīng)用程序教程之實模式(一):創(chuàng)建新的受保護的應(yīng)用程序

    將VMProtect集成到應(yīng)用程序教程之實模式(一):創(chuàng)建新的受保護的應(yīng)用程序


    在實模式下,VMProtect許可系統(tǒng)向受保護的應(yīng)用程序放置一個特殊的許可模塊。該模塊執(zhí)行與SDK中的測試功能相同的功能,但是使用序列號的內(nèi)容而不是配置ini文件。本系列教程的五個步驟說明了使用基于VMProtect和許可系統(tǒng)的全功能保護來保護簡單應(yīng)用程序的過程。

    免費下載VMProtect  優(yōu)惠購買VMProtect


    步驟一  創(chuàng)建控制臺應(yīng)用程序

    在第一階段,我們制作了幾個簡單的應(yīng)用程序來測試許可系統(tǒng)的API。現(xiàn)在,在第二階段,創(chuàng)建一個帶有foo()函數(shù)的控制臺應(yīng)用程序,該函數(shù)僅在注冊版本中有效。這是測試應(yīng)用程序的代碼:

    #include #include #include“ VMProtectSDK.h”
    
    #定義PRINT_HELPER(狀態(tài),標志)如果(狀態(tài)和標志)printf(“%s”,#flag)
    無效print_state(INT狀態(tài))
    {
            如果(狀態(tài)== 0)
            {
                    printf(“ state = 0 \ n”);
                    返回;
            }
    
            printf(“ state =”);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_CORRUPTED);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_INVALID);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_BLACKLISTED);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_DATE_EXPIRED);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_RUNNING_TIME_OVER);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_BAD_HWID);
            PRINT_HELPER(狀態(tài),SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED);
            printf(“ \ n”);
    }
    
    char * read_serial(const char * fname)
    {
            文件* f;
            如果(0!= fopen_s(&f,fname,“ rb”))返回NULL;
            fseek(f,0,SEEK_END);
            int s = ftell(f);
            fseek(f,0,SEEK_SET);
            char * buf =新的char [s + 1];
            fread(buf,s,1,f);
            buf [s] = 0;
            fclose(f);
            返回buf;
    }
    
    // foo()方法非常簡短,但我們需要將其作為單個函數(shù)
    //因此,我們要求編譯器不要內(nèi)聯(lián)編譯
    __declspec(noinline)void foo()
    {
            printf(“我是foo!\ n”);
    }
    
    int main(int argc,char ** argv)
    {
            char * serial = read_serial(“ serial.txt”);
            int res = VMProtectSetSerialNumber(序列);
            刪除[]序列號;
            如果(res)
            {
                    printf(“序列號錯誤\ n”);
                    print_state(res);
                    返回0;
            }
            printf(“序列號正確,調(diào)用foo()\ n”);
            foo();
            printf(“ done \ n”);
            返回0;
    }

    在沒有調(diào)試信息的情況下編譯程序,但是在鏈接器設(shè)置中,我們創(chuàng)建了MAP文件–需要將它與VMProtect一起使用。運行程序后,應(yīng)該看到以下文本:

    序列號為錯誤
    狀態(tài)= SERIAL_STATE_FLAG_INVALID

    當(dāng)前,許可系統(tǒng)仍在測試模式下工作,因為該文件未由VMProtect處理,并且其中不包含許可模塊。

    步驟二 創(chuàng)建VMProtect保護項目

    當(dāng)測試應(yīng)用程序準備就緒、已編譯且在同一文件夾中有分配的MAP文件時,就可以運行VMProtect Ultimate并打開可執(zhí)行文件。需要向項目添加兩個函數(shù):_main(這是Visual Studio重命名main())和foo()的方式。可以在VMProtect的“Functions”部分的功能列表中看到這兩個功能。


    有關(guān)VMProtect更多資源,請聯(lián)系【慧都客服】了解


    12月,慶圣誕,迎元旦,上“慧都網(wǎng)”小程序簽到兌軟件商城無門檻抵價券>>>   領(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); })();