首先是看懂接口
#pragma once
#if defined(__APPLE__) || defined(__unix__)
#define VMP_IMPORT
#define VMP_API
#define VMP_WCHAR unsigned short
#else
#define VMP_IMPORT __declspec(dllimport)
#define VMP_API __stdcall
#define VMP_WCHAR wchar_t
#ifdef _WIN64
#pragma comment(lib, "VMProtectSDK64.lib")
#else
#pragma comment(lib, "VMProtectSDK32.lib")
#endif // _WIN64
#endif // __APPLE__ || __unix__
#ifdef __cplusplus
extern "C" {
#endif
// protection
// 保护相关
// 开始常规保护
VMP_IMPORT void VMP_API VMProtectBegin(const char *);
// 开始虚拟保护
VMP_IMPORT void VMP_API VMProtectBeginVirtualization(const char *);
// 开始变异保护
VMP_IMPORT void VMP_API VMProtectBeginMutation(const char *);
// 开始超级保护(虚拟保护 + 变异保护)
VMP_IMPORT void VMP_API VMProtectBeginUltra(const char *);
// 开始虚拟按键保护
VMP_IMPORT void VMP_API VMProtectBeginVirtualizationLockByKey(const char *);
// 开始超级按键保护
VMP_IMPORT void VMP_API VMProtectBeginUltraLockByKey(const char *);
// 结束保护(上面的每一个函数都要对应一个结束保护)
VMP_IMPORT void VMP_API VMProtectEnd(void);
// utils
// 杂项
// 判断是否处于保护代码中
VMP_IMPORT bool VMP_API VMProtectIsProtected();
// 判断是否处于调试器中
VMP_IMPORT bool VMP_API VMProtectIsDebuggerPresent(bool);
// 判断是否处于虚拟机中
VMP_IMPORT bool VMP_API VMProtectIsVirtualMachinePresent(void);
// 判断程序CRC是否正确
VMP_IMPORT bool VMP_API VMProtectIsValidImageCRC(void);
// 获取加密后的char字符串
VMP_IMPORT const char * VMP_API VMProtectDecryptStringA(const char *value);
// 获取加密后的wchar_t字符串
VMP_IMPORT const VMP_WCHAR * VMP_API VMProtectDecryptStringW(const VMP_WCHAR *value);
// 释放加密后的字符串
VMP_IMPORT bool VMP_API VMProtectFreeString(const void *value);
// licensing
// 许可标识
enum VMProtectSerialStateFlags
{
SERIAL_STATE_SUCCESS = 0, // 成功状态
SERIAL_STATE_FLAG_CORRUPTED = 0x00000001, // 损坏状态
SERIAL_STATE_FLAG_INVALID = 0x00000002, // 无效状态
SERIAL_STATE_FL