将VMProtect集成到应用程序教程之实模式(四):将代码锁定到序列 上

在实模式下, 


破解程序最常见的方法之一是找到要检查序列 的位置,以及其后的附近条件跳转。如果序列 正确,则程序以一种方式执行,否则就以另一种方式执行。黑客找到了该跳转并将其替换为“正确”方式的跳转。

char *serial = read_serial("serial.txt");int res = VMProtectSetSerialNumber(serial);delete [] serial;if (false && res){

现在,程序可以接受任何序列 ,并且可以正常工作。当然,如果文件受到VMProtect的保护,即使是经验丰富的黑客也会花费数月的时间来定位和修改条件跳转。考虑到程序在不同条件下多次检查序列 ,即使是这样一个简单的检查也是相当安全的。

步骤五  将代码锁定到序列 上

VMProtect的演示版对已处理函数的数量有所限制:仅处理一个函数。因此,如果使用demo-version,应该只将foo()函数包括到项目中,否则VMProtect的demo-version可以选择main()函数,并且对序列 的锁定将不起作用。

VMProtect的授权系统允许您将一个或多个功能的代码锁定到一个序列 ,这样,如果没有提供正确的序列 ,它们将无法工作。该函数的主体将被虚拟化,然后进行加密,并且只能使用正确的序列 进行解密。这意味着,即使黑客在序列 检查中找到并修复了有条件的跳转,锁定到序列 的功能仍然无法使用。

下面让我们尝试一下。在“Functions”部分中,选择foo()函数,然后在右侧面板中将“Lock to Serial Number”选项更改为“Yes”。

将VMProtect集成到应用程序教程之实模式(四):将代码锁定到序列 上

然后,保护应用程序。由于我们已经“破解”了它,所以可以将任意文本放入serial.txt文件中并运行该应用程序。以下文本将出现在控制台中:

C:test>dummy_app.vmp.exeserial number is correct, calling foo()

这意味着,黑客“修复”了条件跳转,程序以“正确”方式运行。但是当调用foo()时,程序将显示一条消息:

将VMProtect集成到应用程序教程之实模式(四):将代码锁定到序列 上

由于我们将foo()函数锁定在序列 上,而黑客没有此序列 ,因此尝试解密该函数的代码会导致故障和无法继续执行程序。当按下“OK”时,程序关闭,并且“done”消息永远不会不显示在控制台中。

什么应该被锁定到序列 /strong>

锁定序列 和无效序列

当调用VMProtectSetSerialNumber()函数时,授权许可模块检查传递给该函数的序列 。只有当序列 在检查时绝对正确时才执行代码的加密片段——未列入黑名单,具有正确的硬件标识符、未过期等等。在这种情况下,所有加密的过程都将执行,直到应用程序关闭,或再次调用VMProtectSetSerialNumber()。

在程序执行期间,某些限制可能会“触发”:例如,程序的运行时间可能到期或序列 过期日期到来。在这种情况下,许可模块仍会加密并执行锁定在序列 上的功能。这是因为受保护的应用程序很难检测到这些限制触发的时刻并相应地更改行为(阻止相应的菜单项等)。如果许可模块突然停止执行锁定到序列 的代码片段,很可能导致应用程序故障。这就是为什么要在设置序列 时做出决策,并选择相应的执行模式等原因。

有关 VMProtect 更多资源,请联系【客服】了解


12月,庆圣诞,迎元旦,上“ ”小程序签到兑软件商城无门槛抵价券>>>   领优惠券购VMProtect享折上折>>>

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年11月9日
下一篇 2019年11月9日

相关推荐

发表回复

登录后才能评论