在实模式下,VMPROTECT 许可系统向受保护的应用程序放置一个特殊的许可模块。该模块执行与SDK中的测试功能相同的功能,但是使用序列号的内容而不是配置ini文件。本系列教程的五个步骤说明了使用基于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”。

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

C:\test>dummy_app.vmp.exe
serial number is correct, calling foo()

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

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

什么应该被锁定到序列号?

将只在程序的注册版本中运行的功能锁定到序列号是有必要的。由于锁定需要虚拟化,所以应该考虑一些性能损失。例如,如果文本编辑器不允许在演示版中保存结果,则可以将保存文档功能锁定到序列号。如果该函数在其操作期间调用其他函数,则也不必锁定它们,因为没有主函数,它们将不会有任何用处。

注意,在没有序列号的情况下调用锁定的函数会导致程序关闭,并且没有机会保存工作结果。这就是为什么应该彻底测试应用程序,以确保它在试用模式下不会调用此类功能。在上面的示例中,文本编辑器必须在演示模式下禁用“Save”命令,不能对Ctrl + S快捷键作出反应,也不应该要求在退出时保存文档。如果您不注意这一点,用户可能会对“错误”的演示版本感到失望。

锁定序列号和无效序列号

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

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

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

  1. 将VMProtect集成到应用程序教程之实模式(一):创建新的受保护的应用程序

    在实模式下,VMProtect许可系统向受保护的应用程序放置一个特殊的许可模块.该模块执行与SDK中的测试功能相同的功能,但是使用序列号的内容而不是配置ini文件.本系列教程的五个步骤说明了使用基于V ...

  2. 将VMProtect集成到应用程序教程:许可API函数

    VMprotect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果. 本文介绍许可API函数的相关 ...

  3. c/c++教程 - 2.1 程序的内存模型 内存四区 代码区 全局区 堆区 栈区 new操作符

    第2章为C++核心编程. 本阶段主要针对C++面向对象编程做详细讲解. 目录 1.内存分区模型 1.1 程序运行前(代码区.全局区) 1.2 程序运行后:(栈区.堆区) 1.3 new操作符(堆区内存 ...

  4. 云开发(微信-小程序)笔记(十四)---- 收藏,点赞(上)

    云开发(微信-小程序)笔记(十三)---- 注册登陆 1.简介 点赞,收藏等都是程序的最简单的功能,在现实的应用中也很常见.这里我就来给大家介绍一下小程序的这个功能. 图标下载地址 先去网站上http ...

  5. c语言地图染色程序,求C语言地图四染色代码..

    ???代码改色没用?? #include #include #include #include #define INIT_STACK_SIZE 10 #define STACKINREMENT 5 t ...

  6. SharePoint 集成PowerApps和Flow教程(二,第一个PowerApps程序)

    SharePoint 集成PowerApps和Flow教程(二,第一个PowerApps程序) 使用Excel 数据创建一个APP. 我的第一个PowerApp使用的Excel文件作为数据源,数据文件 ...

  7. kotlin web_Kotlin Web应用程序教程

    kotlin web In this tutorial, we'll learn how to create Kotlin Web Application. We assume that you're ...

  8. 【教程】TestComplete测试桌面应用程序教程(四)

    TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序.其中,TestComplete支持测试使 ...

  9. 请问如何把.net framework框架集成在安装程序里头?

    请问如何把.net framework框架集成在安装程序里头? 大家都知道在没有framework框架的机子上是无法运行.net编写的软件的 虽然把编写的软件做成安装软件在没有框架的机子上要安装时会自 ...

最新文章

  1. stylus之条件(Conditionals)
  2. pip install时发生raise ReadTimeoutError(self._pool, None, 'Read timed out.')的解决方案
  3. Maven学习总结(53)——利用Maven插件构建镜像进行持续交付中的版本号管理
  4. 缓存淘汰策略——最近最久未使用策略(LRU)
  5. wxPython:当密码账号输入正确,登录界面消失并显示主界面
  6. 指针和引用的相同与不同
  7. pat 团体天梯 L3-011. 直捣黄龙
  8. 安防在智能家居中扮演什么角色?
  9. npm webstorm配置_怎样使用webstorm中配置nodejs环境及npm
  10. sql删除表中各类重复数据
  11. x99对应服务器芯片,x99主板配什么cpu 几款x99主板介绍【详细介绍】
  12. Linux xampp apache启动失败解决办法
  13. 1999.00 php,CBA20周年之1999-00赛季-前卫先合并后解散 八一5连冠
  14. No provisioned iOS devices are available with a compatible iOS version.
  15. 个子矮s弯如何看点打方向图解_s弯如何看点打方向图解?s弯方向盘打法口诀
  16. BottomNavigationBar+viewpager底部导航切换,出现 Fragment already added
  17. Mac SublimeREPL一点经验
  18. 各种数学平均数之间的关系
  19. JS/JQuery整齐的照片墙:展示很多宽高不同照片,让每一行中的所有照片高度一样,所有的行的宽度一样
  20. 自动控制原理《拉氏变换》

热门文章

  1. 量化交易入门阶段——MACD配合探底回升因子测试(上)
  2. WINDOWS中无法查看显示隐藏文件的解决方法
  3. MacDown不显示删除线
  4. 程序员写作能赚多少钱,怎么赚?
  5. monkey测试使用手册
  6. java pdfbox_使用java中的PDFBox在其中心周围旋转PDF
  7. 2007-08-01 日志:建军80周年!
  8. 解读富途上市后首份财报:营收增长超预期竞争加剧其能否保住增速
  9. 【一行代码秒上云】Serverless六步构建全栈网站
  10. 推荐 8 个支持 Vue3 的前端 UI 组件库,免费开源、漂亮美观,涵盖常用的业务组件