易语言教程_易语言源码_易语言写挂_易语言论坛_看流星社区

 找回密码
 注册
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
查看: 705|回复: 0

VMProtect使用说明以及调用方法

[复制链接]
发表于 2017-4-4 19:05:52 | 显示全部楼层 |阅读模式

VMProtect使用说明以及调用方法

一. 接口说明

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

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

);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|看流星社区  |网站地图

GMT+8, 2017-11-24 09:40 易语言论坛 易语言导航

Powered by 看流星社区 X3.2

©2011-2016 最好的辅助编程技术论坛

快速回复 返回顶部 返回列表