必威体育Betway必威体育官网
当前位置:首页 > IT技术

VMProtect使用说明以及调用方法

时间:2019-08-15 06:14:23来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

vmprotect

vmprotect使用说明以及调用方法

文章转载自:http://www.moguizuofang.com/bbs/

一. 接口说明

//开始保护处标记(对应于功能设置:反调试、内存保护等等)

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();

}

  1. 保护的单元是函数,而不是整个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 );

}

  1. 保护嵌套情况

    void main()

    {

    char* szMsg = “proxxb vm sapmle!”; //不被保护

    VMProtectBegin(“main”); //被保护

    OutputDebugString( “vm protect test.” ); //被保护

    fun1(szMsg); //函数内部自己去保护

    fun2( 2, 4 ); //函数内部自己去保护

    fun1(szMsg); //函数内部自己去保护

    fun3(); //不被保护

    VMProtectEnd();

    getchar(); //不被保护

    }

  2. 字符串保护

    应使用VMProtectDecryptStringA或VMProtectDecryptStringW函数保护名为字符串,被保护后,明晚字符串不再出现在内存,除非被解密的那一刻!

    char* Decrypt( char* key, char* buffer, long length )

    {

    VMProtectBeginUltra(“Decrypt”);

    VMProtectEnd();

    }

调用方法:

Decrypt(

VMProtectDecryptStringA(“DecryptKey”), //此时密文密钥被解密

buffer,

512

);

相关阅读

VMProtect使用说明

VMProtect使用说明一.    接口说明//开始保护处标记(对应于功能设置:反调试、内存保护等等)VMProtectBegin(const char *);//开始虚

分享到:

栏目导航

推荐阅读

热门阅读