主页 » 支持 » 用户手册 » 介绍 » 软件的分析、破解和保护

软件的分析、破解和保护

可以通过静态或动态分析来分析软件产品。静态分析是指保护破解算法基于反汇编结果分析或反编译受保护的应用程序。需要动态分析来破解加密或动态变化的可执行文件,因为对此类程序的静态分析被证明是困难的。

对于动态分析,被破解的程序在调试器框架中执行。这样,程序运行过程中发生的一切都可以由调试器控制。在动态分析过程中,破解者使用调试模式,一一绕过程序的所有保护算法,特别是注册密钥生成和检查程序。另一个经常使用的动态分析工具是跟踪文件、系统服务、端口和外部设备对破解程序的查询。

保护应用程序免受破解尝试的主要工具是 软件保护程序 。大多数加密程序提供的保护基于原始可执行文件的压缩和/或加密,重点放在保护解包/解密过程。

这种算法通常不足以提供可靠的保护。如果一个应用程序是通过压缩来保护的,破解者可以在解包器完成工作后立即进行内存转储,轻松获取原始解包文件。此外,还有多种自动化工具可以破解最流行的保护程序。加密也是如此:在获得适当的授权密钥(通常是合法购买的)后,破解者可以解密受保护的代码部分。

一些软件加密程序使用许多反调试技术。但是,它们中的每一个都会显着影响受保护程序的性能。此外,反调试方法仅对动态分析有效,而对静态分析完全无效。更重要的是,现今的加密程序使用的所有反调试方法都是众所周知和研究过的,破解者已经编写了许多实用程序来避免或绕过它们。活动监视器完全不受内置反调试保护的影响。

保护应用程序的更有效方法是混淆虚拟化,这会使受保护应用程序代码的分析变得复杂。一般来说,这些保护方法的高效率是基于人的因素:代码越复杂,应用程序使用的资源越多,破解者就越难理解程序逻辑及破解保护。

混淆通过向应用程序添加过多的指令来 “纠缠” 应用程序的代码。虚拟化将源代码转换为由特殊解释器执行的字节码,该解释器使用一组特定的命令模拟虚拟机。因此,虚拟化会导致生成的代码复杂度高且不可降低,如果应用得当,使用这种方法保护的代码不包含显式恢复原始代码的方法。因此,虚拟化的主要优点是代码的虚拟化片段在执行期间不会转换为机器语言命令,这反过来又可以防止破解者获取应用程序的原始代码。

虚拟化片段的逆向工程简化为分析虚拟机的体系结构,为虚拟机模拟的处理器的相应体系结构构建反汇编程序,以及分析反汇编代码。一个正确实现的虚拟机使得为它创建一个反汇编程序是一项相当困难的任务。虚拟化的唯一缺点是执行速度相对较低,因此这种方法应该只应用于对执行速度不重要的部分代码。

当今的大多数保护程序都不太关注混淆和虚拟化,或者它们的实施很差。这允许破解者在自动或半自动模式下删除此类保护。现今的保护程序的另一个瓶颈是使用未记录的 Windows 功能,这会导致受保护应用程序在较新版本的操作系统中的操作受限,或者如果启用了 DEP。