代码保护软件 VMProtect 用户手册:分析,破解和保护软件
VMProtect是一款虚拟机保护软件,是目前最为流行的保护壳之一。VMProtect将保护后的代码放到虚拟机中运行, 这将使分析反编译后的代码和破解变得极为困难。除了代码保护,还可以生成和验证序列号,设置过期时间,限制免费更新等等。
静态和动态分析
一个软件产品可以使用静态或动态分析方法来进行分析。静态分析意味着保护破解算法基于反汇编结果分析或受保护应用程序的反编译。破解加密或动态变化的可执行文件需要动态分析,因为使用静态分析来达到此目的是十分困难的。
对于动态分析,正在破解的程序在调试器框架中执行。这样的话,程序运行期间发生的一切都可以由调试器控制。在动态分析期间,破解者使用调试模式逐个绕过程序的所有保护算法,特别是注册密钥生成和检查过程。 另一个经常使用的动态分析工具是跟踪破解程序查询的文件,系统服务,端口和外部设备。
保护应用程序免受破解的主要工具是软件保护程序。大多数保护器提供的保护基于原始可执行文件的打包和/或加密,重点放在保护解包/解密过程上。
这种算法通常不足以提供可靠的保护。如果应用程序受到打包保护,黑客可以在解包器完成其工作后立即进行内存转储,从而轻松获取原始解压缩文件。此外,还有多种自动化工具可以破解最流行的保护器。 加密也是如此:在获得适当的许可证密钥(通常是合法购买)之后,破解者可以解密受保护的代码部分。
反调试技术
某些软件保护程序使用许多反调试技术。但是,它们中的每一个都会影响受保护程序的性能。此外,反调试方法仅对动态分析有效,对静态分析完全无用。 更重要的是,现代保护器使用的所有反调试方法都是众所周知的,而且破解者已经编程了许多程序来避免或绕过反调试方法。活动监视器完全不受内置反调试保护的影响。
混淆和虚拟化
保护应用程序更有效的方法是混淆和虚拟化,这会使受保护应用程序代码的分析变得很复杂。通常,这些保护方法的效率基于人为因素:代码越复杂,应用程序使用的资源越多,破解者就越难理解程序逻辑,从而无法破解保护。
混淆通过向应用程序添加过多指令来复杂化应用程序的代码。虚拟化将源代码转换为由特殊解释器执行的字节码,该解释器使用一组特定命令模拟虚拟机。 因此,虚拟化导致所得代码的复杂性高且不可简化,并且如果正确应用,则使用这种方法保护的代码不包含显式恢复原始代码的方法。 所以,虚拟化的主要优点是代码的虚拟化片段在执行期间不会转换为机器语言命令,这反过来又阻止了破解者获取应用程序的原始代码。
虚拟化片段的逆向工程被简化为分析虚拟机的体系结构,为虚拟机模仿的处理器的相应体系结构构建反汇编器,以及分解反汇编代码。正确实现的虚拟机使得创建反汇编程序非常困难。虚拟化的唯一缺点是执行速度相对较低,因此该方法仅应用于对执行速度不重要的代码部分。
如今,大多数保护软件都没有太多关注混淆和虚拟化,这允许破解者以自动或半自动模式移除这种保护。现代保护软件的另一个瓶颈是使用未记录的Windows功能,这会导致在较新版本的OS中受保护应用程序的运行受限。
VMProtect是新一代的软件保护系统,将保护后的代码放到虚拟机中运行,这将使分析反编译后的代码和破解变得极为困难。