其他分享
首页 > 其他分享> > VMProtect SDK完全避坑指南

VMProtect SDK完全避坑指南

作者:互联网

文章目录

前言

在编写软件的时候,通常会有这样一个需求,需要对自己写的软件实现一机一码加密保护,并且最好能够限制使用时间。抛开现有的网络验证系统之外,最安全可靠的莫过于VMP的加密系统了。

但是网上关于SDK的使用资料几乎没有一套完整的说明文档,清一色全是各种坑。这里笔者整理一下在研究VMP SDK过程中遇到的各种坑,手把手教你实现一个带时间验证的加密系统和注册机。

编译VMProtect Demo

https://bbs.pediy.com/thread-201173.htm

首先需要去看雪下载这个SDK的Demo,上面演示了几乎所有的VMP SDK功能。这个工程作者是用VS2013写的,我这里用VS2017编译

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AJ8xNCTQ-1615006331516)(VMP SDK完全避坑指南.assets/1614959989942.png)]

接着安装一下VMP,我这里用最新的3.4版本

在这里插入图片描述

然后开始编译工程,首先来解决第一个报错

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C1047	对象或库文件“KeyGen32.lib”是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库	VMProtect	C:\Users\87321\Desktop\VMProtect演示SDK加密DEMO\VMProtect\VMProtect\LINK	1	

将下面这个路径中的文件全部复制到工程目录中

C:\Users\Public\Documents\VMProtect\KeyGen\DLL\Lib

在这里插入图片描述

直接替换即可,然后再次编译

在这里插入图片描述

出现第二个错误

#ifdef _WIN64
#pragma comment(lib, "KeyGen64.lib")
#else
#pragma comment(lib, "KeyGen32.lib")
#endif // _WIN64

这里需要将上面这段代码复制到工程的主对话框类中

在这里插入图片描述

然后再次编译

在这里插入图片描述

即可编译通过

生成机器码

接着我们需要将生成的exe放到VMP中进行编译,因为代码中的API实际上只是一个标记,只有通过VMP编译之后,才会产生实际效果

在这里插入图片描述

直接将生成的exe拖入软件,在授权里选择通用

在这里插入图片描述

然后编译Demo

在这里插入图片描述

编译完成之后运行,然后点击获取硬件码。这样就获取到了我们的硬件ID。

替换密钥对

我们不光需要对文件进行加密,还需要有一个自己的注册机,用于生成序列号,所以这里就需要用到密钥对。

在这里插入图片描述

在菜单->项目->导出密钥对中,将密钥对导出

在这里插入图片描述

然后将密钥对替换到上面的代码里,进行重新编译之后再用VMP进行加壳。

生成序列号

接着我们需要通过密钥对来生成注册码

在这里插入图片描述

注意不要用这上面的创建注册文件,这个Demo创建的注册文件始终是校验不通过的,具体原因未知,这里算是一个坑。

我们直接用官方的Demo来生成序列号

C:\Users\Public\Documents\VMProtect\KeyGen\DLL\MSVC

在这里插入图片描述

这个路径下的工程就是序列号的生成Demo

在这里插入图片描述

同样将导出的密钥对复制到工程中,并且注释掉原先的代码。接着修改代码

在这里插入图片描述

VMProtectSerialNumberInfo si = {0};
si.flags = HAS_HARDWARE_ID | HAS_TIME_LIMIT;
si.nRunningTimeLimit = 1;
si.pHardwareID = "fDRhHcnVyCnHFwrfCgl17hbady4GpPOlljzXmQ==";

flags设置为硬件绑定和时间限制,nRunningTimeLimit时间限制为1分钟,接着pHardwareID填入自己的机器码

在这里插入图片描述

然后生成一个密钥对

在这里插入图片描述

创建一个名为license.lic的文件,放到同路径下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcdyVdSa-1615006331531)(VMP SDK完全避坑指南.assets/1614961554506.png)]

点击检测注册文件,密钥验证通过

在这里插入图片描述

接着过一会再次点击检测注册文件,提示密钥验证失败,这是因为密钥的有效时间过了。关于到期时间,可以通过分解注册码进行获取。

总结

到这里就完成了一个完整的带时间限制的VMP虚拟机保护软件+注册机,各位可以任意为自己写的软件添加保护功能了。其余的功能请自行探索。如果发现其他新奇好玩的功能或者踩过的坑请务必一起分享交流。

标签:VMProtect,Demo,避坑,编译,密钥,VMP,SDK
来源: https://blog.csdn.net/qq_38474570/article/details/114437022