VMProtectSDK使用教程

一.    接口說明


//開始保護處標記(對應於功能設置:反調試、內存保護等等)
VMProtectBegin(const char *);
//開始虛擬化代碼處標記(包括保護設置)
VMProtectBeginVirtualization(const char *);
//開始變異代碼處標記(包括保護設置)
VMProtectBeginMutation(const char *);
//開始虛擬+代碼變異標記處
VMProtectBeginUltra(const char *);
VMProtectBeginVirtualizationLockByKey(const char *);
VMProtectBeginUltraLockByKey(const char *);
//保護結束處標記
VMProtectEnd(void);
//檢測調試
BOOL VMProtectIsDebuggerPresent(BOOL);
//檢測虛擬機
BOOL VMProtectIsVirtualMachinePresent(void);
//映像文件CRC校驗
BOOL VMProtectIsValidImageCRC(void);
//解密被保護的名爲字符串A
char * VMProtectDecryptStringA(const char *value);
//解密被保護的名爲字符串W
wchar_t * VMProtectDecryptStringW(const wchar_t *value);


二.    使用方法
1.    保護函數必須有始有終出現

VMProtectBegin、
VMProtectBeginVirtualization、
VMProtectBeginMutation、
VMProtectBeginUltra
必須有相對應的VMProtectEnd結束。

比如:
void FunName()
{
VMProtectBegin(“FunName”); //最好用函數名,否則會出現重名衝突
.....
VMProtectEnd();
}

2.    保護的單元是函數,而不是整個EXE代碼
比如:

//不保護
void fun1(char* msg)
{
    char* szmsg = "fun1 none vm";
    OutputDebugString( szmsg );
}

//虛擬化保護
int fun2( int x, int y )
{
    int n = x + y;
    VMProtectBeginVirtualization("fun2");
    OutputDebugString( "x+y= %d" );
    VMProtectEnd();
    return n;
}

//虛擬化和變異保護
void fun3()
{
    VMProtectBeginUltra("fun3");
    fun1("fun3 call fun1");
    VMProtectEnd();
    fun2( 2, 4 );
}

3.    保護嵌套情況

void main()
{
    char* szMsg = "proxxb vm sapmle!";        //不被保護
    
    VMProtectBegin("main"); //被保護
    OutputDebugString( "vm protect test." );    //被保護
    fun1(szMsg);     //函數內部自己去保護
    fun2( 2, 4 ); //函數內部自己去保護
    fun1(szMsg);  //函數內部自己去保護
    fun3();        //不被保護
    VMProtectEnd();
    getchar(); //不被保護
}
4.    字符串保護
應使用VMProtectDecryptStringA或VMProtectDecryptStringW函數保護名爲字符串,被保護後,明晚字符串不再出現在內存,除非被解密的那一刻!

char* Decrypt( char* key, char* buffer, long length )
{
    VMProtectBeginUltra("Decrypt");
    ....
VMProtectEnd();
}

調用方法:
Decrypt(
VMProtectDecryptStringA(“DecryptKey”),    //此時密文密鑰被解密
buffer,
512

);



本文內容轉載自:https://blog.csdn.net/loooooooi1/article/details/50133675

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章