论文部分内容阅读
软件是一种技术密集型的数字产品,软件的开发需要耗费大量的人力和物力,但软件的复制却相当容易,软件版权的保护一直是一个非常棘手的问题。常见的软件保护方式有序列号保护、授权文件保护、加壳保护等,但是保护强度都不高,虚拟机保护通过把关键代码转化为供虚拟机解释执行的伪码,有效提高了软件解密的时间复杂度。如果破解软件所花费的代价超过购买软件的代价,那么实际上就起到了加密的效果。虚拟机技术涉及操作系统、程序设计语言和计算机体系结构等学科。虚拟机可分为基于堆栈的和基于寄存器的虚拟机,其区别体现在它们提供的指令集体系结构。虚拟机同样也属于冯·诺依曼计算机,即存储程序计算机。指令的执行主要包括取指、解码、执行这几个过程。在分析常见的软件破解和软件保护措施的基础上,讨论虚拟机保护的设计方法。给出一种64位的基于寄存器的虚拟机SRVM64(Secure Register-based 64 bits Virtual Machine),针对虚拟机指令集架构的设计,给出超级指令集的方案。然后研究指令解释器的工作流程和虚拟机代码的生成。随后给出一种仅实现了C语言功能的子集的类C的高级语言,以及虚拟机汇编语言,并讨论虚拟机代码的编译技术。针对各种软件保护方法具有的适应性和局限性,综合讨论了软件保护系统需要的各种保护手段。设计了一种基于虚拟机的软件保护系统,针对常见的软件解密手段,使用了自校验防篡改、反静态和动态分析、加壳保护、高强度加密算法、软件水印和虚拟机保护等技术。该系统能提高软件解密的工作量和复杂度,提供灵活的软件授权机制,增加软件解密的代价,起到软件保护的效果。基于虚拟机的软件保护系统对应用虚拟机技术进行软件保护进行了探索。如果继续完善系统的其它功能,如丰富虚拟机的指令集,增加虚拟机的异常和中断处理等,虚拟机保护将具有广阔的应用前景。