提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:陈津勇|2019-12-12 14:06:18.977|阅读 1624 次
概述:破解程序最常见的方法之一是找到要检查序列号的位置,以及其后的附近条件跳转。本文,我们将使用这种方法直接在源代码中“破解”测试程序,并通过将代码锁定到序列号上来实现文件保护。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
在实模式下,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 更多资源,请联系了解
12月,庆圣诞,迎元旦,上“慧都网”小程序签到兑软件商城无门槛抵价券>>> 领优惠券购VMProtect享折上折>>>
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢