论文摘要
可执行二进制代码的分析是分析程序行为特征的重要手段,是检测恶意代码的主要措施。随着软件技术的发展,加壳、反调试、代码混淆等抗分析技术手段提高了二进制代码的分析难度。针对这个问题,本文提出了一种基于虚拟机的关键信息提取与分析的方法,其核心思想是,在一个使用仿真技术的全系统虚拟机上运行操作系统,然后在处于仿真环境的操作系统中执行需要分析的二进制代码,通过截获二进制代码运行时产生的指令流信息,提取相关数据,并借助程序切片技术分析二进制代码的行为特征。基于该方法,本文设计并实现了一个原型系统。该系统通过对bochs虚拟机进行二次开发,能够高效地截获二进制代码运行时产生的指令流和数据流信息,然后使用静态特征分析、转移类指令分析、系统调用分析、内存读写分析、程序切片分析、密码算法分析等分析模块,对截获下来的信息进行分析,提取其关键的信息,并分析其行为特征。本文在该原型系统上进行了实验和分析。实验结果表明,本文所提出的二进制代码分析方法,能够有效地对抗加壳、反调试、代码混淆等抗分析技术手段,实现二进制代码分析的目的。本文对采用加壳、反调试、代码混淆等抗分析技术手段的二进制代码的分析方法进行了重点研究。本文的主要贡献在于:(1)通过对二进制代码、指令流和数据流的特点、抗分析技术的机理等进行研究,提出了一种基于虚拟机的二进制代码分析方法。传统的二进制代码分析方法更多的是关注静态的二进制代码或者程序运行时表现的行为,对于采用抗分析技术手段的二进制代码,传统的二进制代码分析方法能够获取的信息比较有限,难以分析二进制代码的行为特征。本文的新颖性在于,通过截获、分析二进制代码运行时的指令流和数据流信息来分析二进制代码。这种方法可以有效规避加壳、反调试、代码混淆等抗分析技术手段。(2)设计并实现了一个通用的截获运行时指令流和数据流的虚拟机。通过对开源虚拟机bochs进行二次开发,实现了一个能够截获运行时指令流和数据流信息的虚拟机。基于X86架构的Windows、Linux操作系统以及应用程序都可以在该虚拟机环境运行,具有通用性。(3)能够自动化分析程序行为特征。实现了一系列的软件工具,用于提取指令流和数据流信息中的关键信息,并自动化地分析二进制代码的行为特征。