基于虚拟机的软件保护技术
本文并不打算对vmprotect或其它某款软件安全套件进行深入讨论,而着眼于研究基于虚拟机的软件保护技术的起源、思想和实现。 现有软件保护技术概述 传统的软件保护技术,根据针对对象不同,可分为反静态调试和反动态调试两大类。反静态调试主要针对对象为反汇编器。反汇编器通过面向特定平台的反汇编引擎(如PC平台即为X86反汇编引擎),将编译器生成的二进制文件还原成汇编代码,有经验的逆向工程师可以据此还原出算法等核心运算机制。反静态调试主要是通过特定区段加密等方式,将核心信息保护起来,只在运行期才通过解密等算法动态还原,阻碍反汇编器静态地将二进制文件还原成汇编码。 反动态调试主要针对对象为调试器,由于经过静态加密的二进制码最终必须解密才能执行,因此通过Ollydbg等动态调试器仍然可以加以查看,反动态调试通过检测调试器和屏蔽调试端口等各种反调试技术阻止逆向工程师通过调试器跟踪软件进程的运行情况,使得软件的运行时状况始终保持处于黑盒状态。 被动型软件保护概念上述两种保护方案均采取主动出击的策略,意图“御敌于国之外”,中心思想是一个“挡字”,阻止逆向工程是窥视软件内部机理,但盾与矛的对抗总是无休止的,并没有任何一种主动型软件保护手段能真正彻底阻断逆向工程,因此另一种“以人为本”的被动型软件保护技术开始走向斗争舞台的中央。 被动型软件保护手段基于一个假设