步骤 1.2:添加许可证检查代码
VMProtect 是保护应用程序代码免遭分析和破解的可靠工具,但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。
VMProtect 是保护应用程序代码免遭分析和破解的可靠工具,但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。
如果您以前没有这样做,是时候将 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"; // we set the serial number directly in the code, for simplicity int res = VMProtectSetSerialNumber(serial); printf("res = 0x%08X\n", res);
如果执行此操作后程序停止并提示缺少所需的 dll 文件,请确保将相应的 DLL 文件放入我们应用程序的工作文件夹中。如果执行成功,您应该会看到以下消息:
2 对应于API 中描述的SERIAL_STATE_FLAG_INVALID 标志。这意味着许可系统认为我们的密钥不正确,这是真的,因为我们没有向系统“解释”哪些密钥是正确的,哪些不是。
[TestLicense] 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"; // we set the serial number directly in the code, for simplicity int res = VMProtectSetSerialNumber(serial); printf("res = 0x%08X\n", res); if (res) { printf("please register!\n"); return 0; } printf("We are registered.\n"); return 0; }