VMProtect 是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
SDK功能可以集成到受保護應用程序的源代碼中,用來設置受保護區域的邊界、檢測調試器或虛擬化工具。
代碼標記
- VMProtectBegin
- VMProtectBeginVirtualization
- VMProtectBeginMutation
- VMProtectBeginUltra
- VMProtectBeginVirtualizationLockByKey
- VMProtectBeginUltraLockByKey
- VMProtectEnd
服務功能
- VMProtectIsProtected
- VMProtectIsDebuggerPresent
- VMProtectIsVirtualMachinePresent
- VMProtectIsValidImageCRC
- VMProtectDecryptStringA
- VMProtectDecryptStringW
- VMProtectFreeString
許可功能
- VMProtectSetSerialNumber
- VMProtectGetSerialNumberState
- VMProtectGetSerialNumberData
- VMProtectGetCurrentHWID
VMProtectBegin
void VMProtectBegin(const char *MarkerName);
標識代碼保護區開頭的標記。必須在受保護代碼塊的第一個命令(或者過程或或者函數調用)之前放置對VMProtectBegin的調用。 MarkerName定義在VMProtect中看起來像“VMProtectMarker”+MarkerName的標記的名稱。例如,標記VMProtectBegin('CheckRegistration')將看起來像VMProtectMarker“CheckRegistration”。如果未設置標記的名稱,則會以“VMProtectMarker”+ marker_serial_number的形式爲其指定唯一名稱。你可以在VMProtect中設置給定受保護塊的編譯類型。
VMProtectBeginVirtualization
void VMProtectBeginVirtualization(const char *MarkerName);
標識符使用預定義的“虛擬化”編譯類型標識代碼的受保護區域的開頭。MarkerName定義標記的名稱。VMProtect目前無法更改此標記的編譯類型。
VMProtectBeginMutation
void VMProtectBeginMutation(const char *MarkerName);
標識符使用預定義的“變異”編譯類型標識代碼的受保護區域的開頭。MarkerName定義標記的名稱。VMProtect目前無法更改此標記的編譯類型。
VMProtectBeginUltra
void VMProtectBeginUltra(const char *MarkerName);
標記用預定義的“ultra(虛擬化+變異)”編譯類型標識代碼的受保護區域的開始。MarkerName定義標記的名稱。VMProtect目前無法更改此標記的編譯類型。
VMProtectBeginVirtualizationByKey
void VMProtectBeginVirtualizationLockByKey(const char *MarkerName);
標記使用預定義的“虛擬化”編譯類型和啓用的“Lock to key”選項標識代碼的受保護區域的開頭。 MarkerName定義標記的名稱。VMProtect目前無法更改此標記的編譯類型。
VMProtectBeginUltraLockByKey
void VMProtectBeginUltraLockByKey(const char *MarkerName);
標識使用預定義的“ultra(虛擬化+變異)”編譯類型和啓用的“Lock to key”選項標識代碼的受保護區域的開頭。MarkerName定義標記的名稱。VMProtect目前無法更改此標記的編譯類型。
VMProtectEnd
void VMProtectEnd(void);
標識代碼保護區末尾的標記。必須在受保護代碼塊的最後一個命令(過程或函數調用)之後放置對VMProtectEnd的調用。
VMProtectIsProtected
bool VMProtectIsProtected(void);
如果文件由VMProtect處理,則MProtectIsProtected函數返回True。
VMProtectIsDebuggerPresent
bool VMProtectIsDebuggerPresent(bool CheckKernelMode);
VMProtectIsDebuggerPresent函數允許在調試器下檢測應用程序的啓動。可以使用應用內保護機制處理結果(True / False)。如果CheckKernelMode = False,則該函數檢查用戶模式調試器(OllyDBG,WinDBG等)。如果CheckKernelMode = True,則爲用戶模式和內核模式調試器(SoftICE,Syser等)。在保護驅動程序時,CheckKernelMode的值沒有意義,因爲驅動程序始終在內核模式下工作,因此始終檢查是否存在內核模式調試程序。
VMProtectIsVirtualMachinePresent
bool VMProtectIsVirtualMachinePresent(void);
VMProtectIsVirtualMachinePresent功能允許在虛擬機工具下檢測應用程序的啓動:VMware,Virtual PC,VirtualBox,Sandboxie。 可以使用應用內保護機制處理結果(True / False)。
VMProtectIsValidImageCRC
bool VMProtectIsValidImageCRC(void);
VMProtectIsValidImageCRC函數檢測可執行模塊已在進程的內存中更改的事實(僅檢查不可更改的代碼和數據段)。 可以使用應用內保護機制處理結果(True / False)。
VMProtectDecryptStringA
const char * VMProtectDecryptStringA(const char *Value);
VMProtectDecryptStringA函數解密ANSI字符串常量。要解密常量,必須將其包含在受保護對象列表中。
VMProtectDecryptStringW
const wchar_t * VMProtectDecryptStringW(const wchar_t *Value);
VMProtectDecryptStringW函數解密Unicode字符串常量。 要解密常量,必須將其包含在受保護對象列表中。
VMProtectFreeString
bool VMProtectFreeString(const void *Value);
VMProtectFreeString函數釋放爲解密字符串分配的動態內存。其實沒有必要釋放內存,但是如果你一定要釋放內存,就必須使用這個功能。如果 VMProtectDecryptStringA / VMProtectDecryptStringW 第二次使用相同的參數而不破壞以前解密的字符串,則不會分配額外的內存。