翻譯|使用教程|編輯:陳津勇|2019-12-10 14:50:01.413|閱讀 812 次
概述:本系列教程的五個步驟說明了使用基于軟件保護工具VMProtect和許可系統的全功能保護來保護簡單應用程序的過程。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在實模式下,VMProtect許可系統向受保護的應用程序放置一個特殊的許可模塊。該模塊執行與SDK中的測試功能相同的功能,但是使用序列號的內容而不是配置ini文件。本系列教程的五個步驟說明了使用基于VMProtect和許可系統的全功能保護來保護簡單應用程序的過程。
步驟一 創建控制臺應用程序
在第一階段,我們制作了幾個簡單的應用程序來測試許可系統的API。現在,在第二階段,創建一個帶有foo()函數的控制臺應用程序,該函數僅在注冊版本中有效。這是測試應用程序的代碼:
#include #include #include“ VMProtectSDK.h” #定義PRINT_HELPER(狀態,標志)如果(狀態和標志)printf(“%s”,#flag) 無效print_state(INT狀態) { 如果(狀態== 0) { printf(“ state = 0 \ n”); 返回; } printf(“ state =”); PRINT_HELPER(狀態,SERIAL_STATE_FLAG_CORRUPTED); PRINT_HELPER(狀態,SERIAL_STATE_FLAG_INVALID); PRINT_HELPER(狀態,SERIAL_STATE_FLAG_BLACKLISTED); PRINT_HELPER(狀態,SERIAL_STATE_FLAG_DATE_EXPIRED); PRINT_HELPER(狀態,SERIAL_STATE_FLAG_RUNNING_TIME_OVER); PRINT_HELPER(狀態,SERIAL_STATE_FLAG_BAD_HWID); PRINT_HELPER(狀態,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()方法非常簡短,但我們需要將其作為單個函數 //因此,我們要求編譯器不要內聯編譯 __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(“序列號正確,調用foo()\ n”); foo(); printf(“ done \ n”); 返回0; }
在沒有調試信息的情況下編譯程序,但是在鏈接器設置中,我們創建了MAP文件–需要將它與VMProtect一起使用。運行程序后,應該看到以下文本:
序列號為錯誤 狀態= SERIAL_STATE_FLAG_INVALID
當前,許可系統仍在測試模式下工作,因為該文件未由VMProtect處理,并且其中不包含許可模塊。
步驟二 創建VMProtect保護項目
當測試應用程序準備就緒、已編譯且在同一文件夾中有分配的MAP文件時,就可以運行VMProtect Ultimate并打開可執行文件。需要向項目添加兩個函數:_main(這是Visual Studio重命名main())和foo()的方式。可以在VMProtect的“Functions”部分的功能列表中看到這兩個功能。
有關VMProtect更多資源,請聯系了解
12月,慶圣誕,迎元旦,上“慧都網”小程序簽到兌軟件商城無門檻抵價券>>> 領優惠券購VMProtect享折上折>>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: