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

——————-下面是另一个帮助

呵呵!看帮助文件呀!
在易中加入dll命令即可直接在易中调用sdk中的函数
帮你整理一下吧
普通保护:VMProtectBegin 对应库VMProtectSDK32.lib中的命令_VMProtectBegin@4 参数MarkerName
虚拟保护:VMProtectBeginVirtualization 对应库VMProtectSDK32.lib中的命令_VMProtectBeginVirtualization@4 参数MarkerName
变异保护:VMProtectBeginMutation 对应库VMProtectSDK32.lib中的命令_VMProtectBeginMutation@4
虚拟+变异:VMProtectBeginUltra 对应库VMProtectSDK32.lib中的命令_VMProtectBeginUltra@4
结束:VMProtectEnd 对应库VMProtectSDK32.lib中的命令_VMProtectEnd@0
CRC校验:VMProtectIsValidImageCRC 对应库VMProtectSDK32.lib中的命令_VMProtectIsValidImageCRC@0
检测反调试:VMProtectIsDebuggerPresent 对应库VMProtectSDK32.lib中的命令_VMProtectIsDebuggerPresent@4

等等,还有一些,自己看一下帮助文件自己在易语言中添加dll命令,然后直接在易语言程序中调用相关函数即可,无需使用置入代码命令,当然,你熟悉的话也可以置入代码命令。



发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 2