软件保护工具VMProtect用户手册——将许可系统集成到应用程序(1)
VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
建筑保护总是经历两个主要步骤:开发和发布。至于许可,首先创建一个应用程序,将保护集成到其中,然后添加检查和功能限制。只有经过全面测试,才能将产品提供给用户并开始第二阶段。测试受保护的应用程序是一个复杂的过程,因为需要确保所有检查和条件跳转都能正常运行。许可系统提供“开发者模式”(AKA“测试模式”),在此工作模式下,不对应用程序应用任何保护,并且在配置文件中调整系统对提供的序列号的反应。当应用程序没有错误并且它正确地与许可系统一起使用时,VMProtect将“测试”许可模块替换为执行实际序列号检查的真实模块。
测试模式
在测试模式中,许可系统(它返回的状态和数据)对提供的序列号的所有反应都在配置文件中描述。该文件名为VMPLicense.ini,应位于应用程序的工作文件夹中。在下面提供的10个步骤中,将从创建最简单的应用程序到在测试模式下全面使用许可系统,具有硬件锁定和限制免费升级的时间。
▲步骤一:创建受保护的应用程序
第一步是创建一个应用程序。这将是一个简单的应用程序,没有任何用户界面,没有严重的功能。我们的目标是将序列号传递给许可系统并获得答案。
#include <windows.h> #include <stdio.h> #include#includebool is_registered(const char * serial) { return serial && serial [0] =='X'; } int main(int argc,char ** argv) { char * serial =“Xserialnumber”; //为简单起见,我们直接在代码中设置序列号 if(!is_registered(serial)) { printf(“请注册!\ n”); 返回0; } printf(“我们已注册。\ n”); 返回0; }
该程序使用一种非常简单的方法来检查序列号。该is_registered()函数比较有“X”的序列号的第一个符号,并认为该号码是正确的,如果这两者匹配。对于错误的序列号,将显示注册消息,而如果用户输入正确的密钥,则显示“我们已注册。”
▲步骤二:添加许可证检查代码
如果您之前没有这样做,是时候将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文件,并根据指定的设置对函数调用做出反应。将在后面的步骤中彻底检查该文件,现在只需创建这样一个文件并在其中添加以下文本:
[TestLicense] AcceptedSerialNumber = Xserialnumber
现在,再次运行我们的程序。如果仍然收到“2”错误代码,请确保ini文件位于应用程序的工作文件夹中。这次我们应该收到“0”。这是许可系统接受并批准序列号的标志。现在我们可以从代码中删除is_registered()函数 - 许可系统现在负责检查序列号
#include <windows.h> #include <stdio.h> #include#include#include“VMProtectSDK.h” int main(int argc,char ** argv) { char * serial =“Xserialnumber”; //为简单起见,我们直接在代码中设置序列号 int res = VMProtectSetSerialNumber(serial); printf(“res = 0x%08X \ n”,res); 如果(res) { printf(“请注册!\ n”); 返回0; } printf(“我们已注册。\ n”); 返回0; }
-- 未完待续 --
VMProtect正版授权专享在线订购特享超低价格!更有免费现金抵扣券领取,还不赶紧加入你的订购清单?>>更多详情可点击咨询购买
扫描关注“慧聚IT”微信公众号,及时获取最新动态及最新资讯