軟件保護工具VMProtect用戶手冊——將許可系統集成到應用程序(1)
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
建筑保護總是經歷兩個主要步驟:開發和發布。至于許可,首先創建一個應用程序,將保護集成到其中,然后添加檢查和功能限制。只有經過全面測試,才能將產品提供給用戶并開始第二階段。測試受保護的應用程序是一個復雜的過程,因為需要確保所有檢查和條件跳轉都能正常運行。許可系統提供“開發者模式”(AKA“測試模式”),在此工作模式下,不對應用程序應用任何保護,并且在配置文件中調整系統對提供的序列號的反應。當應用程序沒有錯誤并且它正確地與許可系統一起使用時,VMProtect將“測試”許可模塊替換為執行實際序列號檢查的真實模塊。
測試模式
在測試模式中,許可系統(它返回的狀態和數據)對提供的序列號的所有反應都在配置文件中描述。該文件名為VMPLicense.ini,應位于應用程序的工作文件夾中。在下面提供的10個步驟中,將從創建最簡單的應用程序到在測試模式下全面使用許可系統,具有硬件鎖定和限制免費升級的時間。
▲步驟一:創建受保護的應用程序
第一步是創建一個應用程序。這將是一個簡單的應用程序,沒有任何用戶界面,沒有嚴重的功能。我們的目標是將序列號傳遞給許可系統并獲得答案。
#include <windows.h> #include <stdio.h> #include#includebool is_registered(const char * serial) { return serial && serial [0] =='X'; } int main(int argc,char ** argv) { char * serial =“Xserialnumber”; //為簡單起見,我們直接在代碼中設置序列號 if(!is_registered(serial)) { printf(“請注冊!\ n”); 返回0; } printf(“我們已注冊。\ n”); 返回0; }
該程序使用一種非常簡單的方法來檢查序列號。該is_registered()函數比較有“X”的序列號的第一個符號,并認為該號碼是正確的,如果這兩者匹配。對于錯誤的序列號,將顯示注冊消息,而如果用戶輸入正確的密鑰,則顯示“我們已注冊。”
▲步驟二:添加許可證檢查代碼
如果您之前沒有這樣做,是時候將VMProtect SDK包含在您的項目中。SDK是三個文件:頭文件(VMProtectSDK.h),庫文件(VMProtectSDK32.lib)和帶實現的dll文件(VMProtectSDK32.dll)。有各自的庫實現和64位系統的dll文件。將dll文件,頭文件和庫文件放到我們的應用程序的工作文件夾中,源文件位于該文件夾中,并將頭文件包含在主文件中:
#include <windows.h> #include <stdio.h> #include“VMProtectSDK.h”
將序列號發送到許可系統
現在,在帶有序列號的行下方,我們添加了對許可系統的SDK功能的調用:
char * serial =“Xserialnumber”; //為簡單起見,我們直接在代碼中設置序列號 int res = VMProtectSetSerialNumber(serial); printf(“res = 0x%08X \ n”,res);
如果在執行此操作后,程序將停止并顯示缺少所需的dll文件的錯誤,請確保將相應的DLL文件放入應用程序的工作文件夾中。如果執行成功,您應該看到以下消息:
res = 0x00000002
2對應于API中描述的SERIAL_STATE_FLAG_INVALID標志。這意味著許可系統認為我們的密鑰不正確,這是非常正確的,因為我們沒有向系統“解釋”哪些密鑰是正確的,哪些不是。
指定“正確”的序列號
在測試模式下,許可系統會分析VMProtectLicense.ini文件,并根據指定的設置對函數調用做出反應。將在后面的步驟中徹底檢查該文件,現在只需創建這樣一個文件并在其中添加以下文本:
[TestLicense] AcceptedSerialNumber = Xserialnumber
現在,再次運行我們的程序。如果仍然收到“2”錯誤代碼,請確保ini文件位于應用程序的工作文件夾中。這次我們應該收到“0”。這是許可系統接受并批準序列號的標志。現在我們可以從代碼中刪除is_registered()函數 - 許可系統現在負責檢查序列號
#include <windows.h> #include <stdio.h> #include#include#include“VMProtectSDK.h” int main(int argc,char ** argv) { char * serial =“Xserialnumber”; //為簡單起見,我們直接在代碼中設置序列號 int res = VMProtectSetSerialNumber(serial); printf(“res = 0x%08X \ n”,res); 如果(res) { printf(“請注冊!\ n”); 返回0; } printf(“我們已注冊。\ n”); 返回0; }
-- 未完待續 --
VMProtect正版授權專享在線訂購特享超低價格!更有免費現金抵扣券領取,還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買
掃描關注“慧聚IT”微信公眾號,及時獲取最新動態及最新資訊
