VMProtect SDK测试

XXX的时候用得上,记录一下

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的。

#windows程序设计

你可能感兴趣的:(Private)