1,复制VMProtectSDK32.lib和VMProtectSDK.h到工程目录,并添加头文件和库的引用:
#include "VMProtectSDK.h"
#pragma comment(lib,"VMProtectSDK32.lib")
2,然后用VMProtectBegin、VMProtectBeginVirtualization、VMProtectBeginMutation、VMProtectBeginUltra的其中一个和VMProtectEnd包含要保护的代码,例如这样:
int _tmain(int argc, _TCHAR* argv[])
{
VMProtectBeginUltra;
printf("VMProtect SDK Test.\n");
system("pause");
VMProtectEnd;
return 0;
}
有的sdk里面那些是dll的导出函数,有的是宏,如果是宏的话,那个地方就会插入一个字符串作为标记。初看,宏都是一样的,都是一个跳转加上个字符串"VMProtect Begin",仔细一看,原来VMP是靠最后一个字节来区分的,宏都在这:
#define VMProtectBegin \
__asm _emit 0xEB \
__asm _emit 0x10 \
__asm _emit 0x56 \
__asm _emit 0x4D \
__asm _emit 0x50 \
__asm _emit 0x72 \
__asm _emit 0x6F \
__asm _emit 0x74 \
__asm _emit 0x65 \
__asm _emit 0x63 \
__asm _emit 0x74 \
__asm _emit 0x20 \
__asm _emit 0x62 \
__asm _emit 0x65 \
__asm _emit 0x67 \
__asm _emit 0x69 \
__asm _emit 0x6E \
__asm _emit 0x00 \
#define VMProtectBeginVirtualization \
__asm _emit 0xEB \
__asm _emit 0x10 \
__asm _emit 0x56 \
__asm _emit 0x4D \
__asm _emit 0x50 \
__asm _emit 0x72 \
__asm _emit 0x6F \
__asm _emit 0x74 \
__asm _emit 0x65 \
__asm _emit 0x63 \
__asm _emit 0x74 \
__asm _emit 0x20 \
__asm _emit 0x62 \
__asm _emit 0x65 \
__asm _emit 0x67 \
__asm _emit 0x69 \
__asm _emit 0x6E \
__asm _emit 0x01 \
#define VMProtectBeginMutation \
__asm _emit 0xEB \
__asm _emit 0x10 \
__asm _emit 0x56 \
__asm _emit 0x4D \
__asm _emit 0x50 \
__asm _emit 0x72 \
__asm _emit 0x6F \
__asm _emit 0x74 \
__asm _emit 0x65 \
__asm _emit 0x63 \
__asm _emit 0x74 \
__asm _emit 0x20 \
__asm _emit 0x62 \
__asm _emit 0x65 \
__asm _emit 0x67 \
__asm _emit 0x69 \
__asm _emit 0x6E \
__asm _emit 0x02 \
#define VMProtectBeginUltra \
__asm _emit 0xEB \
__asm _emit 0x10 \
__asm _emit 0x56 \
__asm _emit 0x4D \
__asm _emit 0x50 \
__asm _emit 0x72 \
__asm _emit 0x6F \
__asm _emit 0x74 \
__asm _emit 0x65 \
__asm _emit 0x63 \
__asm _emit 0x74 \
__asm _emit 0x20 \
__asm _emit 0x62 \
__asm _emit 0x65 \
__asm _emit 0x67 \
__asm _emit 0x69 \
__asm _emit 0x6E \
__asm _emit 0x03 \
3,编译之后,用VMProtect打开程序,点New Procedure在All Procedures里面就可以看到了标记的函数:
然后就是编译了。
SDK好啊~等下试试WL的。