VMProtect使用说明以及调用方法

本文介绍了VMProtect的使用及调用方法。阐述了其接口,如开始保护、虚拟化代码等标记函数,以及检测调试、虚拟机等功能函数。说明了使用时保护函数需有始有终,保护单元为函数,还提及了保护嵌套情况和字符串保护方法及调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值