2025年利用虚拟机技术实现软件保护探讨

利用虚拟机技术实现软件保护探讨http www paper edu cn 利用虚拟机技术实现软件保护探讨 张路 北京邮电大学计算机科学与技术学院 北京 E mail 摘 要 本文提出一种新的利用虚拟机原理的软件保护手段 阐述了这种手段的完整实现步 骤

大家好,我是讯享网,很高兴认识大家。

http://www.paper.edu.cn
利用虚拟机技术实现软件保护探讨
张路
北京邮电大学计算机科学与技术学院,北京()
E-mail:
摘  要:本文提出一种新的利用虚拟机原理的软件保护手段。阐述了这种手段的完整实现步
骤,并在每个步骤都详细论述了实际开发中可以利用的各种实用技巧。综合灵活地运用虚拟
机原理和混乱化技术,将使软件保护强度提升到新的水准。
关键词:软件保护,虚拟机,编码,解码,混乱化
中图分类号:TP309
 
 
 
 
1.引言
随着互联网的广泛普及,软件盗版现象日益严重,商业软件和共享软件作者的利益受到
严重侵害。虽然软件的发布一般不包含源代码,但随着软件逆向工程技术的不断进步,常用
的IA-32体系架构被大量研究。 即使是二进制机器代码的程序依然能够在一定程度上被分析,
从而使软件的注册与限制措施失效。
为了阻止软件的逆向工程,目前已经出现了一些保护手段[1]
,主要是通过程序整体加密
和检测调试器的方式。但由于在运行时程序必须在解密的条件下才能正常运行,调试器的检
测一般也只能在程序原始入口之前有效。所以这种方法是不可靠的。本文提出一种新的保护
机制,它利用了虚拟机技术,有效地解决这个问题。
虚拟机(Virtual Machine)是相对于物理存在的计算机而言的,是具有真实计算机全部功
能的虚拟计算机[2]
。它可以使用软件模拟一套指令集在使用另一套指令集的硬件设备上运
行,除了运行速度慢一些之外,没有功能上的区别。主要用来统一程序运行的平台、分析调
试程序、模拟软硬件等。虽然用软件模拟执行比硬件直接执行慢得多,但由于硬件的不断发
展和一些特殊的需求,这项技术仍然很广泛地用于科研、商业以及个人应用。软件模拟的指
令集可以是真实硬件设备的, 也可以是虚拟的。 由于软件指令的分析需要首先掌握其指令集,
因此软件如果含有不同寻常或没有文档资料的指令集代码,即使是很短的一段代码,分析起
来也会面临很大困难。如果再加入一些后文将要提出的一些反分析技术,将非常有效地实现
软件的保护。
2.虚拟机软件保护流程

虚拟机软件保护可分为两个部分:首先是保护部分,即把待保护的代码块转化成虚拟机
代码,其次是执行部分,即在发布已受保护的软件之后,交付用户使用时,虚拟机指令正确
地执行虚拟机代码。
将原代码进行保护的总体流程如图1所示:


讯享网

2.1  提取待保护的代码块
由于经过虚拟机转化之后的代码量会有很大增长,并且执行速度大幅下降,所以一般不
需把原来的整个程序全部转化, 只需选取其中有关软件注册或不想被逆向分析而需要保密的
代码块。一般这些部分并不多,而且不需要很高的运行效率。
由于虚拟机指令的特殊性,要保证这部分指令的执行入口只有一处,否则将很难确定经
过混乱化的虚拟机指令与其它入口位置的对应。一般情况是以函数过程体为单位,可保证代
码块只有单一入口。
因为软件大多使用高级语言开发,为了简化定位待保护代码块的难度,可在高级语言待
保护程序段的前后加入不影响程序运行的特殊标记, 这样就能有利于程序自动定位并提取待
保护的代码块。
2.2  机器指令解码
前面提取的代码块是原始机器指令流。为了降低转化成虚拟机指令的复杂度,并且利于
统一不同平台机器指令的转化,要先把原始机器指令转化成易于理解和分析的中间指令。
这种中间指令要有广泛的适用性,支持各种平台指令。所有中间指令均使用统一的格式
(指令操作符、第一操作数、第二操作数、……) 。其中指令操作符是指令的核心,用于表
示指令的动作,如传送、运算、跳转等等;每个操作数都由(访问字宽、寻址方式、寻址参
数)组成,操作数访问字宽一般有8位,16位,32位,64位等,寻址方式考虑到目前CISC架
构的寻址复杂性,可以概括成立即数寻址、寄存器寻址和支持各种变址的寄存器寻址。这样
各种平台的指令流都能转化并统一成一种中间指令序列进入下一步转换。
2.3  指令转换
在得到统一格式的中间代码后,就可以向虚拟机指令转换了,因此这是整个保护流程中
最有意义的一个步骤。虚拟机指令集和硬件指令集不同,前者不受到硬件设计的限制,可以
尽可能有利于向软件保护的方向设计。为此,做出以下考虑:
(1)选用精简指令集。为了加大指令序列分析的难度,选用RISC类指令集更有利,并能
简化代码的转换以及虚拟机解释器的设计与实现。
(2)扩大寄存器的数量,并统一寄存器编号,其中包含所有的特殊寄存器,如指令指示

器、状态寄存器。
(3)取消跳转指令。这类指令可由直接读写指令指示器来实现,在没有直接跳转指令的
情况下,程序流程的分析将更有迷惑性。
可以看出, 这些手段都会使转化后的虚拟机指令变得更多, 但这对于软件保护并无弊端。 
2.4  混乱化
如果上面的几项手段不足以妨碍逆向分析者, 那么可在转换后的虚拟机代码继续做强度
可控的随机混乱处理, 这种转化方式也被称之为“代码混淆[3]
”。 其手段主要有以下几种方法: 
2.4.1 间接使用常数
无论是原始机器代码还是直接转换后的虚拟机指令代码,指令中的常数是不变的,这会
给逆向分析者提供线索,尤其是间接跳转指令的地址偏移常数。为消除这些线索,可把所有
使用常数的单一指令转化成多种指令运算生成。这种生成算法是复杂多变的,可根据加密强
度随机选择。
2.4.2 无意义指令填充
在代码中分散添加一些无关紧要的随机指令对程序正确执行无影响, 但对于逆向分析者
来说无疑使分析工作增加许多干扰性。 这些无意义指令可根据加密强度随机穿插在有效的指
令中。
2.4.3 无效指令填充
在虚拟机代码逻辑上不会执行到地方,加入不完整或无定义的指令代码,可以一定程度
上干扰静态逆向分析。由于上面所设计的指令集没有显式绝对跳转指令,因此一般可以在隐
式绝对跳转指令后添加几个字节的无效指令。
2.4.4 指令乱序化
根据两条指令如果不涉及同一寄存器、 同一内存且不影响状态寄存器和指令跳转的情况
下可以互换的原理,可以尽可能地交换相邻的指令。不但可使程序的流程出现小幅度混乱,
更可使无意义指令与有效指令相互融合,加强无意义指令的作用。图2给出一个指令片段乱
序化的示例:

序执行的指令数量降低到一定程度,就可以使逆向分析变得更加困难,还可以提高无效指令
的填充率。这种转换可称之为“扭曲变换[4]
”,变换示例如图3:

 

2.5  编码
这一步骤将虚拟机指令转化成二进制代码的形式。 一般的指令编码原则要求统一并且有
一定的规律,以便于编码与解码,这一点在硬件实现上尤为重要。但如果为了软件保护而加
强反编码的难度,就要实施特别的编码策略。
最简单高效的基本方法是编码随机化。即每次实施保护,都随机选择指令操作数、寄存
器编号所对应的二进制代码。这种编码可以一对多,即多种二进制代码对应一种指令;还可
以增加随机填充的冗余标志位。这些手段要和虚拟机解释器相配合。
2.6  写回原程序文件
最终得到的虚拟机二进制代码要写回到原始程序文件中, 同时要写入的还有虚拟机解释
器。因为经过一系列转换与混乱化操作后,虚拟机代码量可能远大于原始机器代码量,因此
一般需要扩大原程序的空间,把虚拟机代码和解释器附在程序的空闲区域或尾部。原始被保
护的程序代码可以被清空,也可以存入一部分虚拟机代码或虚拟机解释器(如图4所示) ,并
在被保护的各个代码段的入口处写入跳转入虚拟机解释器的指令, 还包括对应虚拟机代码入
口地址参数。

 


 

 

 

虚拟机代码可以做一遍压缩加密处理,并在解释器执行的时候边解密解压边执行。但这
一步对于软件保护并不重要, 分析者可以很容易地跟踪解释器程序并完整还原被压缩加密的
虚拟机代码。

2.7  虚拟机解释器
上面6个步骤都是软件的保护工作,而这一部分要独立出来并附在可分发的程序文件。
主要作用是解释执行上面所设计并动态生成的虚拟机指令集。 由于一开始将主要用于软件保
护的虚拟机指令集设计成RISC类,这样虚拟机解释器的编写就简单一些。虚拟机代码的复
杂性主要依靠代码混乱化程度。 虚拟机解释器还要注意进入和离开解释器时以及调用外部程
序段的前后时硬件寄存器的保存和还原,解释器本身尽量不使用系统堆栈,否则会与虚拟机
指令的堆栈使用相冲突。
3.总结
理论上,只要软件在用户平台上能正常运行,就无法避免软件通过某种途径遭受修改而
失去保护[5]
。但要延缓保护的时间到一定程度是可以做到的。综合应用虚拟机技术并利用与
其相关的各种反分析技巧,软件保护将达到一个新的水平。
4.致谢
感谢我的导师漆涛教授对本文提出的修改意见。
 
参考文献
[1]  熊丽,童恒庆.软件保护技术的发展现状与展望[J].软件导刊,2005, (19) :41-44.
[2]  毛速.虚拟机的应用[J].宁夏工程技术,2003,2(2) :154-156.
[3]  罗宏,蒋剑琴,曾庆凯.用于软件保护的代码混淆技术[J].计算机工程,2006,32(11) :177-179.
[4]   刘涛涛.扭曲变换加密[EB/OL].http://liutaotao.com/nqby.txt,2006-7-7.
[5]  石礼娟.软件保护方案研究[J].农业网络信息,2006, (6) :124,125,129.
 
Software Protection Using Virtual Machine
Zhang Lu
Department of Computer Science and Technology,Beijing University of Posts and
Telecommunications,Beijing  ()
Abstract
This paper provides a new way of software protection using virtual machine theory. And describes the
whole process of implement of this way. Then discusses detailedly some actual technique in every step
of the development. Making use of virtual machine  theory and confusion technique integratedly and
deftly, can improve software protection strength to a new level.
Keywords:Software protection,Virtual machine,Encode,Decode,Confusion
 
 
 
 
 
作者简介:张路,男,1982 年生,硕士研究生,主要研究方向是数据压缩与加密,同时对
软件保护技术有深刻的理解与研究。
 

 

 

 

 

 

 

小讯
上一篇 2025-01-15 22:58
下一篇 2025-02-09 22:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47230.html