步骤1.2:添加授权检查代码
包括 VMProtect SDK
如果您以前没有这样做过,那么是时候将 VMProtect SDK 包含到您的工程中了。SDK 包含三个文件:头文件 (VMProtectSDK.h)、库文件 (VMProtectSDK32.lib) 和带有实现的 dll 文件 (VMProtectSDK32.dll)。对于 64 位系统,库和 dll 文件有单独的实现。
将 dll文件、头文件和库文件放到我们应用程序的工作文件夹中,即源文件所在的位置,并将头文件包含在主文件中:
#include <windows.h> #include <stdio.h> #include "VMProtectSDK.h"
构建工程并确保其像以前一样编译和运行。授权系统尚未启用。
将序列号发送到授权系统
现在,在序列号行的正下方,我们添加了对授权系统 SDK 函数的调用:
char *serial = "Xserialnumber"; // 为简单起见,我们直接在代码中设置序列号。 int res = VMProtectSetSerialNumber(serial); printf("res = 0x%08X\n", res);
如果执行此操作后程序停止并显示缺少所需的 dll 文件的错误,请确保将相应的 DLL 文件放入我们应用程序的工作文件夹中。如果执行成功,您应该会看到以下消息:
res = 0x00000002
这里的 2 对应在API中描述 的 SERIAL_STATE_FLAG_INVALID 标志。这意味着授权系统认为我们的密钥不正确,这是非常正确的,因为我们没有向系统 “解释” 哪些密钥是正确的,哪些不是。
指定 “正确” 序列号
在测试模式下,授权系统分析 VMProtectLicense.ini 文件并根据指定的设置对函数调用作出反应。我们将在后面的步骤中彻底审查该文件,现在我们只需创建这样一个文件并在其中添加以下文本:
[测试授权] AcceptedSerialNumber=Xserialnumber
现在,再次运行我们的程序。如果您仍然收到 “2” 错误代码,请检查并确保 ini 文件位于应用程序的工作文件夹中。这次我们应该收到 “0” 。这是授权系统接受并批准序列号的标志。现在我们可以从代码中删除is_registered() 函数 – 授权系统现在负责检查序列号:
#include <windows.h> #include <stdio.h> #include "VMProtectSDK.h" int main(int argc, char **argv) { char *serial = "Xserialnumber"; // 为简单起见,我们直接在代码中设置序列号。 int res = VMProtectSetSerialNumber(serial); printf("res = 0x%08X\n", res); if (res) { printf("请注册!\n"); return 0; } printf("已注册。\n"); return 0; }