翻譯|使用教程|編輯:龔雪|2019-05-14 10:30:47.623|閱讀 1030 次
概述:要保護代碼的各個片段并保護字符串常量,可以在應用程序的源代碼中插入特殊標記。本文主要介紹保護程序和功能的第二種方式:使用插入應用程序源代碼的標記。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
VMProtect 是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
要保護代碼的各個片段并保護字符串常量,可以在應用程序的源代碼中插入特殊標記。標記是對從外部庫導入的函數的調用(32位應用程序使用VMProtectSDK32.dll,而64位應用程序使用VMProtectSDK64.dll;驅動程序分別使用VMProtectDDK32.sys和VMProtectDDK64.sys) - 也可稱為VMProtectSDK。VMProtectSDK中的過程和函數不執行任何操作,這個特殊標記只是VMProtect用于確定受保護代碼邊界的標簽。受保護塊的開頭和結尾標記如下:
uses VMProtectSDK; VMProtectBegin(MARKER_TITLE); ... VMProtectEnd;
#include "VMProtectSDK.h" VMProtectBegin(MARKER_TITLE); ... VMProtectEnd();
include VMProtectSDK.inc invoke VMProtectBegin,SADD(MARKER_TITLE) ... invoke VMProtectEnd
VMProtectBegin (StrPtr(MARKER_TITLE)) ... VMProtectEnd
VMProtectBegin不是必選項,你也可以選擇使用帶有預定義編譯類型的標記。
標記處理方式:當VMProtect分析受保護應用程序的代碼時,它會定位對VMProtectSDK過程和函數的所有調用。要保護的塊的邊界由標記對VMProtectBegin / VMProtectBeginVirtualization / VMProtectBeginMutation / VMProtectBeginUltra 和 VMProtectEnd定義。 然后,當VMProtect處理受保護應用程序的代碼時,它會刪除標記和對VMProtectSDK的任何調用信息,所以這些庫沒有必要包含在你的安裝程序包中。標記無論是否包含在編譯中,都會被刪除。使用命名標記時,也會刪除其名稱。
如果指定了標記的標題,系統就會為其分配名稱,如“VMProtectMarker MARKER_TITLE”。 如果未指定標記的標題,則會為其分配唯一名稱:“VMProtectMarker”+標記序列號。使用非命名標記有一個明顯的缺點:如果將新標記插入到程序代碼中,則所有非命名標記的編號將全部發生變化。所以我們建議始終使用命名標記。
使用標記時要考慮的一個特別重要的事情是,你不應該允許從標記內的非保護區域跳轉。例如,如果將一部分循環括在標記中,就會發生這種情況。如果使用標記的應用程序在保護后變得不起作用,則可以通過啟用“Debug mode”選項來檢測來自非保護區域和地址的跳轉。在此模式下,當受保護的應用程序在調試器下工作時,如果檢測到從非受保護區域跳轉到受保護的調試器,后者將中斷程序的執行。找到所有這些跳轉后,你應該更改標記的位置,如果不方便,請使用VMProtect的GUI版本將這些地址標記為外部。
VMProtect在線訂購,享受特別優惠噢~ 立即搶購>>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn