论文部分内容阅读
软件的逆向分析与保护永远处在相互博弈之中,一方面,传统的代码混淆技术已经不能抵抗目前功能强大的逆向分析软件;另一方面,采用虚拟机保护技术的软件使现有的动静态方法已基本失效。然而,随着虚拟机保护代码逆向分析技术的发展,采用单一虚拟化技术的基本虚拟机保护模型已经可被部分逆向还原。研究总结虚拟机逆向分析的关键环节与技术,并以对抗其中的指令约减技术、字节码反汇编技术与语义分析技术为着力点,深入研究探讨代码混淆技术与虚拟机代码保护技术,提出了两种有效的混淆算法,并设计实现了一个增强型虚拟机代码保护原型系统。本文完成的主要工作包括:1.为对抗指令约减技术,提出一种基于指令交换的指令乱序算法。首先在形式化定义的基础上论证了相邻指令序列交换的充分条件,并在此基础上采用模拟退火算法实现了具有一定随机性的指令乱序算法,并以解释函数为对象予以实现,通过理论分析与实验验证了混淆算法在对抗指令约减技术方面的可行性与有效性。同时,该指令乱序算法可拓展到传统代码混淆技术领域,可在不付出执行时间与文件大小代价的前提下,在一定程度上抵抗自动逆向工具分析以及人工逆向分析,并且增加样本的静态多样性。2.为对抗虚拟指令分析与语义分析,设计实现一种增强型虚拟寄存器轮转算法。关注虚拟指令与字节码的映射机制,以虚拟寄存器为突破点,通过在虚拟机解释执行过程中变换虚拟寄存器与字节码中操作数的对应关系,增大字节码在执行过程中的不确定性,改变虚拟指令与字节码的映射关系,增大了虚拟指令分析过程中从字节码映射到虚拟指令的分析难度,并有效增加了虚拟机在解释执行过程中的数据流复杂度;同时,随机采用三种机制对轮转长度进行设定,增强了虚拟机代码保护系统的多样性。3.设计并实现了一个软件保护虚拟机原型系统X86VM。基于系统的整体方案设计与总体实现的目标,利用分层和模块化的思想对系统内各个功能模块进行了详细的阐述,融入了上述两种算法,并基于测试用例进行了有效性验证和性能分析。实验结果表明,X86VM系统能够有效地对软件实施保护,降低对虚拟机保护代码逆向分析的效率。论文最后对全文工作进行总结,并基于提出的两种方法以及代码混淆技术领域的后续研究工作进行了展望。