一种虚拟化环境中的windows内核基地址及编译版本识别方法

文档序号:9810348阅读:630来源:国知局
一种虚拟化环境中的windows内核基地址及编译版本识别方法【
技术领域
】[0001]本发明涉及一种通过虚拟机内存反省技术获取虚拟机中相关信息的方法,具体的涉及一种虚拟化环境中的Windows内核基地址及编译版本识别方法,属于计算机应用领域。【
背景技术
】[0002]在虚拟化环境中,可以通过虚拟机反省技术方式获取虚拟机的内存数据,通过对内存数据的分析可以获取虚拟机运行信息。在分析虚拟机运行信息时,首先要获取其内核基地址,目前大多方法都是基于启发式地尝试不同Windows版本的基地址。而在WindowsNT6.0CffindowsVista)以后的版本中系统引入了内存空间地址随机化,使得每次启动内核加载的基地址都不一样。这使得原有的方法都无法用在高版本的Windows操作系统上。同时,内存分析需要结合符号表进行,不同的编译版本对应不同的符号表,同一个基础内核版本(如Windows7)对应着几十个编译版本。而现有的技术大多使用数据分析的方式,根据结构体的特性判断操作系统版本,该类只能获取基础版本,无法获取准确的编译版本。[0003]为此,如何提供一种实现在虚拟机化环境中稳定地获取虚拟机中任意Windows版本的虚拟机的内核基地址和其准确的内核编译版本的识别方法,是本发明研究的目的所在。【
发明内容】[0004]为解决现有技术的不足,本发明提供一种虚拟化环境中的windows内核基地址及编译版本识别方法,稳定地获取开启内存地址空间随机化的Windows虚拟机内核基地址;实现了获取Windows虚拟机运行操作系统的详细编译版本,帮助建立内核文件与符号信息的——对应。[0005]为解决现有技术问题,本发明所采用的技术方案是:一种虚拟化环境中的windows内核基地址及编译版本识别方法,包括基于虚拟机反省技术的内核定位和基于PE结构分析的加载镜像识别两个部分;所述的基于虚拟机反省技术的内核定位是以虚拟机反省技术为基础,开始状态下读取CR4寄存器数据,获取当前内存分页结构;所述的内存分页结构包括虚拟机的部分寄存器和内存数据;以这些数据为基础读取CR3寄存器数据,获取当前内核空间对应物理地址范围;从内核空间低地址开始,假设其为PE文件起始地址,分析出当前操作系统使用的内存架构(32位模式、32e模式或64位模式)和当前虚拟机内核空间地址对应的物理内存;之后从PE文件起始地址开始,以内存页为单位读取PE文件信息,分析属于内核空间的物理内存页,判断DOS前两个字节是否为魔数“MZ”,即判断页开始是否为可执行文件的魔数“MZ”;如果是则判定该页起始地址为镜像加载的起始地址,否则以页为单位自增PE文件起始地址后进入重新以页为单位读取PE文件信息状态。[0006]所述的基于PE结构分析的加载镜像识别是根据所述的基于虚拟机反省技术的内核定位步骤中定位的PE起始地址,获取镜像调试段IMAGE_DEBUG_DIRECTORY数据,读取頂AGE_DEBUG_TYPEJODEVIEW数据段信息并分析其PE头及调试信息段;通过对内存中调试信息段的分析获取在编译时生成的调试文件名称和PE文件唯一编译标示。[0007]进一步的,所述的内存分页结构包括虚拟机的部分寄存器和内存数据。[0008]进一步的,所述的内存中调试信息段的分析包括:判断IMAGE_DEBUG_TYPE_CODEVIEW前四个字符是否为“RSDS”,若是,则读取32位标示符、读取AGE变量数据,进而合成内核编译版本唯一标示,程序结束;否则返回所述的基于虚拟机反省技术的内核定位步骤中的以页为单位自增PE文件起始地址后进入重新以页为单位读取PE文件信息状态。[0009]此外,本发明同时提供了一种虚拟化环境中的windows内核基地址及编译版本识别方法,其特征在于包括以下步骤:1)利用虚拟机反省技术获取CR4寄存器数据,并分析出该虚拟机运行在32位模式、32e模式或是64位模式下;2)利用虚拟机反省技术获取CR3寄存器数据,并根据步骤I)获取信息分析出该虚拟机内核空间对应的物理内存范围;3)搜索内存中PE结构,Windows在加载镜像时每个镜像都会以内对齐的方式加载,同时每个PE文件开始处都有魔数“MZ”,因此通过读取每个内存页前两个字节的信息并与“MZ”魔数对比就可以基本确定该页是否为PE文件加载起始页,如果为加载起始页则进入下一步骤,如果不是则搜索下一内存页;4)以上一步获取的镜像加载首页地址为基地址,分析加载PE头部,获取调试信息段,该段中保存着对应符号文件的名称,该名称以“.pdb”结尾,如果该调试段中文件名称为aNTOSKRNL.PDB”、aNTKRNLMP.PDB”、aNTKRNLPA.PDB”或“NTKRPAMP.PDB”,则该镜像为内核镜像,该镜像加载地址为内核基地址,如果不是则回到步骤3继续搜索;5)对第4)步获取的调试段信息进行分析,获取保存在该段中的一个32位的唯一标示,根据该标示就可以建立该镜像与符号表之间的一一对应关系。本发明的有益效果是:稳定的获取开启内存地址空间随机化的Windows虚拟机内核基地址;实现了获取Windows虚拟机运行操作系统的详细编译版本,帮助建立内核文件与符号信息的一一对应。【附图说明】[0010]图1为本发明的步骤分析图。【具体实施方式】[0011]下面结合附图1对本发明做进一步分析。[0012]如附图1所示,一种虚拟化环境中的windows内核基地址及编译版本识别方法,包括基于虚拟机反省技术的内核定位和基于PE结构分析的加载镜像识别两个部分;基于虚拟机反省技术的内核定位是以虚拟机反省技术为基础,在开始状态下读取CR4数据,获取当前内存分页结构,内存分页结构包括虚拟机的部分寄存器和内存数据;以这些数据为基础读取CR3数据,获取当前内核空间对应物理地址范围;从内核空间低地址开始,假设其为PE文件起始地址,分析出当前操作系统使用的内存架构(32位模式、32e模式或64位模式)和当前虚拟机内核空间地址对应的物理内存;之后从PE文件起始地址开始,以内存页为单位读取PE文件信息,分析属于内核空间的物理内存页,判断DOS前两个字节是否为“MZ”,即判断页开始是否为可执行文件(PortableExecutable,PE)的魔数“MZ”;如果是则判定该页起始地址为镜像加载的起始地址,否则以页为单位自增PE文件起始地址后进入重新以页为单位读取PE文件信息状态。[0013]基于PE结构分析的加载镜像识别是根据所述的基于虚拟机反省技术的内核定位步骤中定位的PE起始地址,获取镜像调试段aMAGE_DEBUG_DIRECTORY)数据,读取頂AGE_DEBUG_TYPE_WDEVIEW数据段信息并分析其PE头及调试信息段;通过对内存中调试信息段的分析获取在编译时生成的调试文件名称和PE文件唯一编译标示。[0014]其中,内存中调试信息段的分析包括:判断頂AGE_DEBUG_TYPE_CODEVIEW前四个字符是否为“RSDS”,若是,则读取32位标示符、读取AGE变量数据,进而合成内核编译版本唯一标示,程序结束;否则返回所述的基于虚拟机反省技术的内核定位步骤中的以页为单位自增PE文件起始地址后进入重新以页为单位读取PE文件信息状态。[0015]调试当前第1页1 2 
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1