论文部分内容阅读
在当代社会,计算机软件已经渗透到社会的方方面面,各行各业的高效运转都需要软件的支持。软件的研发和维护需要耗费大量的人力物力,而出于商业等利益的诱惑,软件破解和软件盗版情况时有发生。因此如何有效的保护软件版权和软件的核心技术日益成为软件开发者所关注的问题。目前主要有基于硬件和基于软件的两种软件保护方式。基于硬件的保护方式,保护强度较大,但成本较高且不便于用户使用;基于软件的保护方式,如序列号保护、加壳保护等,易于实施但保护强度不高。虚拟机软件保护是新近发展起来的软件保护技术,通过把关键代码转化为只有虚拟机才可以识别并解释的字节码,可以有效提高软件的安全性。综合考虑保护强度和性能损耗,一般仅将关键代码使用虚拟化代码实现。虚拟机软件保护技术不可避免的会降低程序的性能,因此对于虚拟机的优化也是很有必要的。与PC相比,手机的运算性能比较差,而且出于用户使用习惯的考虑,针对虚拟机的优化在Android手机平台上显得更为重要。本文以软件保护技术和虚拟化技术为基础,展开对虚拟机软件保护技术的研究。在本文的虚拟机软件保护框架中,虚拟机解释器作为一个动态链接库,应用程序通过调用动态链接库执行虚拟化代码。本文研究的重点是解释器的优化。通过测试解释器中各个模块的耗时找到优化的切入点。在指令和其解释函数的快速匹配时,充分利用数组的数据结构特性,利用其快速查找的特性代替HashMap;在指令的执行过程中,由于指令的跳转等原因会出现同一内存地址上的指令重复执行。利用缓存的概念,对于已经执行过的指令,将其解码结果记录下来;将部分解释函数定义为内联函数以及选择判断架构的合理使用都可以提升解释器的性能。由于本虚拟机软件保护系统可以运行在Android手机平台上,因此针对Android平台也进行了相关的优化,如处理器架构的选择和ARM内嵌汇编等方面。本文对虚拟机解释器经过优化处理后,针对测试程序,程序的运行时间从34555毫秒下降到4321毫秒,运行时间减少了8倍,增强了实用性,提升了用户体验,具有实用价值和应用前景。