专利名称:一种Mac OS系统的物理内存镜像文件分析方法
技术领域:
本发明涉及一种Mac OS系统的物理内存镜像文件分析方法,更具体的说,尤其涉及一种使用内核进程地址空间中指向最高级页表的指针进行内核虚拟地址向物理地址转换再通过该方法获取内核符号表和字符串表信息的Mac OS系统的物理内存镜像文件分析方法。本技术将应用于计算机取证领域,主要用于信息安全事件和各类计算机犯罪案件的调查取证。
背景技术:
a.涉及概念及专业术语 a-Ι.物理内存镜像文件
物理内存镜像文件是指把目前正在运行的计算机中物理内存里的信息按照一个比特对应一个比特的方式映射出来所组成的文件,该文件中数据的位置与物理内存中数据的位置是一一对应的。在vmware虚拟机中,可以通过执行snapshot操作来获取物理内存镜像文件,该文件就是执行snapshot操作后所产生的以.vmem为扩展名的文件;在物理计算机中,可以通过软件如dd获取其对应的物理内存镜像文件。a-2.任务
Mach的抽象定义,含有虚拟地址空间和端口名字空间。任务本身不做任何操作,而是为线程提供上下文环境。a-3.进程
BSD中对运行程序的抽象定义。进程资源包括虚拟地址空间、线程和文件描述符。在 Mac OS X中,进程基于一个Mach任务和一个或多个Mach线程。a-4.内核空间
内核空间,内核进程运行的地址空间。a-5.内核映像
内核的代码和数据就叫内核映像(Kernel Image)。b.研究背景
为推进物理内存分析技术的发展,DFRWS (Digital Forensic Research Workshop)于 2005年推出了名为“!^orensics Challenge”的活动,活动的主题就是物理内存分析。从此, 对于物理内存的分析和获取成为计算机取证的研究热点。2008年和2009年,公司和政府部门把研究重点都放在了对Windows操作系统的物理内存分析上,并取得了一定的发展。但是,这些年对于Mac OS系统的物理内存分析基本上从未涉及。2010年,Matthieu Suiche 首次提出了 Mac OS的物理内存分析方法,这也是目前所公开的唯一的一种Mac OS的物理内存分析方法。该方法首先获取内核符号表及与之对应的字符串表;然后从内核符号表中获得IdlePDPT、IdlePDPT64、IdlePML4、IdlePTD四个内核变量的值,根据这些值实现内核虚拟地址向物理地址的转换;最后,在地址转换和内核符号变量的基础上,分析进程、挂载的文件系统、系统调用表、内核扩展等一系列信息。其具体过程如下b-Ι.内核符号表的获取
Windows操作系统编译器一般把符号存储在以PDB为扩展名的外部文件中。在Mac OS X操作系统中,编译器把符号文件存放在内核可执行文件的—LINKEDIT节中。该节包含了字符串表(存放内核符号名)和符号表(存放与内核符号名相对应的内核符号值)的偏移。对 Mac OS的物理内存分析以符号表的获取为基础。获取符号表的基本步骤是,首先根据FAT 文件格式和Mach-O文件格式获取内核镜像文件在内存中的文件内容;然后,对该文件进行分析,读取—LINKEDIT节中字符串表偏移和符号表偏移的值;最后,解析—LINKEDIT的内容获取内核符号表。涉及到的具体数据结构及符号表的具体寻找方法如下
#define FAT_MAGIC OxBEBAFECA
Typedef struct _FAT_HEADER
{
ULONG magic; ULONG nfat_arch;
}FAT_HEADER, *PFAT_HEADER;
可以根据FAT_MAGIC找到文件头。从文件头的位置开始,加上sizeof (FAT_HEADER)就可以找到第一个文件结构,定义如下
Typedef struct _FAT_ARCH
{
cpu_type_t cputype; cpu_subtype_t cpusubtype; ULONG offset; ULONG size; ULONG align;
}FAT_ARCH, *PFAT_ARCH;
Mach-O文件头起始位置=FAT文件头起始位置+ offset.其结构如下所示
#define MH_MAGIC Oxfeedface
Typedef struct _MACH_HEADER
{
ULONG Magic; cpu_type_t cputype; cpu_subtype_t cpusubtype; ULONG filetype; ULONG ncmds; ULONG sizeofcmds; ULONG flags;
} MACH_HEADER, *PMACH_HEADER;
其中Oxfeedface可以看作是一个Mach-O文件开始的标记。MACH_HEADER结构之后紧跟着是第一个命令项。其一般性结构如下图所示。
Typedef struct _L0AD_C0MMAND {ULONG cmd; ULONG cmdsize; } L0AD_C0MMAND, *PL0AD_C0MMAND;
其中,cmd为命令类型,Cmdsize是指命令长度。比较重要的命令类型是以下两个。#define LC_SEGMENT Oxl #define LC_SYMTAB 0x2
根据命令类型不同,具体的命令结构也不相同。以下是命令类型为LC_SYMTAB的命令结构
Typedef struct _SYMTAB_COMMAND
{
ULONG cmd; ULONG cmdsize; ULONG symoff; ULONG nsyms; ULONG stroff; ULONG strsize; } SYMTAB_COMMAND, *PSYMTAB_COMMAND;
其中,symoff是符号表在文件中的偏移,符号表是一个nlist结构(如下所示)的数据; nsyms是符号表的项数;stroff是字符串表在文件中的偏移;strsize是字符串表的长度。Typedef struct _NLIST
{
ULONG n_strx; UCHAR n_type; UCHAR n_sect; USHORT n_desc; ULONG n_value; } NLIST, *PLIST;
其中,n_strx是指当前符号表项对应的变量名在字符串表中的偏移。revalue是指变量值。符号表的地址=从结构_FAT_ARCH中获取的offset + symoff ; 字符串表的地址=从结构_FAT_ARCH中获取的offset + stroff ; 最后根据这两个表即可获取内核符号名称及其值。b-2.地址转换
地址转换方法依赖于IdlePDPT、IdlePDPT64、IdlePML4、IdlePTD四个内核变量的值。 通过遍历所获取的内核符号表中的变量名及其对应的值,即可得到以上四个变量的值,采用PML4 (Page Map Level 4)分页方法,即可实现地址转换。b-3.信息获取
通过内核符号表中的变量,获取系统配置信息、挂载的文件系统信息、进程信息以及驱动信息。
在实际的对Mac机的物理内存分析过程中,我们发现,以上这种分析方法存在一定的问题,主要表现在以下四个方面(1)内核映像文件的获取方式较为繁琐复杂。这是因为物理内存镜像文件中存在很多FAT文件格式的文件,不能确定哪个是指向了我们所需要的内核映像文件的头部。(2)在Mac OS X 10. 5和Mac OS X 10. 6操作系统的物理内存分析中,根据—LINKEDIT节解析符号表内容的方法不可行。主要表现在根据此种方法找到的 —LINKEDIT节后,其虚拟地址无法转换成有效的物理地址(即不在物理内存中)。(3)地址转换方法不可靠。对于安装了相同操作系统版本的不同mac机来说,其内核变量IdlePDPT、 IdlePDPT64、IdlePML4、IdlePTD的值有可能不一样。也就是说,对于某一具体的操作系统版本,其内核变量IdlePDPT、IdlePDPT64、IdlePML4、IdlePTD的值不确定,因此,在执行地址转换之前,需要从内核符号表中获取这四个变量的值。然而,由(2)中分析可知,以上内核符号表获取方法不可行,所以,内核变量IdlePDPT、IdlePDPT64、IdlePML4、IdlePTD的值无法获取,从而无法执行内存分析操作。(4)信息获取不全面。不能获取进程的详细信息、 进程开启的线程信息以及操作系统版本信息等;不能对位于进程地址空间的数据进行地址转换。
发明内容
本发明为了克服上述技术问题的缺点,提供了一种根据Mac OS系统指向内核进程地址空间的最高级页表的指针实现内核虚拟地址向物理地址转换的方法,并在地址转换基础上,从物理内存镜像文件中获取内核符号表和字符串表信息,进一步获取指向系统中各个任务的最高级页表的指针以及线程详细信息的方法。Mac OS系统中虚拟地址向物理地址的映射采用4级分页方法。根据该方法描述可知,只要获得了最高级页表在物理内存镜像文件中的位置就可以实现虚拟地址向物理地址的转换。因此在物理内存镜像文件的分析过程中,虚拟地址向物理地址的转换功能可以通过获得指向最高级页表的指针来实现。本发明的Mac OS系统的物理内存镜像文件分析方法,其特别之处在于,包括以下步骤a.从Mac OS系统的物理内存镜像文件中,判断系统版本信息,进而确定指向内核进程地址空间的最高级页表的指针,内核进程地址空间的最高级页表用于实现内核虚拟地址向物理地址的转换;b.获取内核符号表和字符串表,通过内核映像文件在物理内存镜像文件中的副本找到内核符号表和字符串表的虚拟地址,通过分析内核符号表及字符串表可以获得内核变量名及其对应的变量值,内核变量名及其对应的值用于获取物理内存镜像文件中包含的系统配置信息、挂载的文件系统信息、进程信息以及驱动信息;c.获取指向系统中各个任务的最高级页表的指针,此处获得的各个任务的最高级页表不仅可以实现内核进程地址空间虚拟地址向物理地址的转换,还可以实现除内核进程之外的其他进程地址空间虚拟地址向物理地址的转换。步骤a中,从内存镜像文件中获取操作系统版本信息,以便根据该版本信息确定进行内核虚拟地址向物理地址转换所需要的指向内核进程地址空间的最高级页表的指针。步骤b中,通过对物理内存镜像文件中内核映像文件的副本分析,获取内核内核符号表和字符串表,进而获取内核变量名及其对应的变量值,最终实现系统配置信息、挂载的文件系统信息、进程信息以及驱动信息的获取。步骤c中,通过获取的各个任务的最高级页表的指针,来实现相应进程地址空间虚拟地址向物理地址的转换,进而实现对相应进程信息的获取。步骤a通过指向内核进程地址空间的最高级页表的指针来实现内核虚拟地址向物理地址的转换,此处的指针指向的是内核进程地址空间的最高级页表在物理内存镜像文件中的起始位置。步骤b中,在实现了地址转换的基础上,从内存镜像文件中找到内核映像文件副本,并从中获取内核符号表和内核字符串表在物理内存镜像文件中的起始位置,分析这两个表获取内核变量名和变量值,进而得到系统配置信息、挂载的文件系统信息、进程信息以及驱动信息。步骤c中,获取指向系统中各个任务的最高级页表的指针和线程详细信息,实现了对内存镜像文件分析更全面的分析。本发明的Mac OS系统的物理内存镜像文件分析方法,所述步骤a中,由于操作系统版本信息存放在名为SystemVersion. plist的文件中,因此根据文件特征,查找物理内存镜像文件,从物理内存镜像文件中找到名为SystemVersion. plist的文件,从中获取系统版本信息;对于版本为Mac OS X 10. 5的操作系统,其指向内核进程地址空间的最高级页表的指针值是0x104800,即内核进程地址空间中的最高级页表位于物理内存镜像文件中的偏移0x104800处;对于版本为Mac OS X 10. 6的操作系统,其指向内核进程地址空间的最高级页表的指针值是0x100000,即内核进程地址空间的最高级页表位于物理内存镜像文件的偏移0x100000处。本发明的Mac OS系统的物理内存镜像文件分析方法,步骤b中的内核符号表和字符串表的获取,包括以下步骤b_l.确定内核映像文件在物理内存镜像文件中的位置,对于版本为Mac OS X 10. 5的操作系统,内核映像文件位于物理内存镜像文件中的偏移0x111000处;对于版本为Mac OS X 10. 6的操作系统,内核映像文件位于物理内存镜像文件中的偏移0x200000处;b-2.寻找内核映像文件的副本在物理内存镜像文件中的位置,内核映像文件与其副本之间的差别在于这两个文件中记录的_LINKEDIT节中名为 vmaddr的值不同,因此,通过以下方法寻找内核映像文件的副本在物理内存镜像文件中的位置在物理内存镜像文件中,从内核映像文件在物理内存镜像文件中的位置开始,到字段—LINKEIDT结束,复制这一段内容;然后从内存镜像文件中向下寻找这一段内容再次出现的位置;这一段内容再次出现的位置即是内核映像文件的副本在物理内存镜像文件中的位置;内核映像文件的副本找到后,则进行下一步;b-3.首先,在物理内存镜像文件中,从内核映像文件副本在物理内存镜像文件中的位置开始,读取内核映像文件副本中记录的_LINKEDIT节的vmaddr和fileoff这两个变量所对应的值;读取命令类型为LC_ SYMTAB的命令中记录的symoff和stroff这两个变量所对应的值;然后按照内核符号表的虚拟地址symvaddr=vmaddr+symoff-f iIeoff,内核字符串表的虚拟地址straddr= vmaddr+stroff-fileoff,分别计算出内核符号表和内核字符串表的虚拟地址;最后,利用步骤a中获取的内核进程地址空间的最高级页表的指针实现内核虚拟地址到物理地址的转换方法,获得符号表的物理地址和字符串表的物理地址。步骤b-Ι中,对于操作系统版本为Mac OS X 10. 5的物理内存镜像文件,其内核映像文件位于物理内存镜像文件的偏移0x111000处,对于操作系统版本为Mac OS X 10. 6的物理内存镜像文件,其内核映像文件的位置位于物理内存镜像文件中的偏移0x200000处;对于不同的版本,在物理内存镜像文件的不同位置查找到内核映像文件。步骤b-2中,通过内核映像文件与内核映像文件副本之间的关系,获取内核映像文件副本在内存镜像文件中的位置;步骤b-3中,通过读取 vmaddr, fileoff、symoff以及stroff的值,来获取内核符号表和内核字符串表的虚拟地址,再利用步骤a中获取的内核进程地址空间的最高级页表的指针实现内核虚拟地址到物理地址的转换方法后,把内核符号表和内核字符串表地虚拟地址转化为物理地址,即可获得内核变量名及其对应的变量值,以便对系统配置信息、挂载的文件系统信息、进程信息以及驱动信息进行读取和分析。本发明的Mac OS系统的物理内存镜像文件分析方法,步骤c中所述的指向系统中各个任务的最高级页表的指针的获取依次包括以下步骤c-l.查找步骤b中获取的内核符号表,从中找到内核变量kernproc所对应的值,把该值作为一个偏移,定位到物理内存镜像文件的该偏移位置处,读取该位置开始处的四个字节的数据,此数据即是位于系统中第一个进程的proc结构的虚拟地址;将该地址转换为物理地址,并记为lastfrocAddr,把获得的物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到系统中第一个进程的proc结构;c-2.在获取的proc结构的偏移OxOc处读取4个字节的数据,该数据为 task结构的虚拟地址;c-3.把上步中获得的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到task结构;在task结构的偏移0x14 处读取由四个字节组成的数据,该数据为vm_map结构的虚拟地址;c_4.把结构vm_map的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到vm_map结构;在vm_map结构的偏移0x2c处读取由四个字节组成数据,该数据为 pmap结构的虚拟地址;c-5.把pmap结构的虚拟地址转换为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到pmap结构;在该结构的偏移0妨4处读取以四个字节组成的值,该值即是指向运行于系统中该进程所对应的任务的最高级页表的指针;c-6.返回所获取的进程proc结构的物理地址lastfrocAddr,把该物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到已分析过的进程的proc结构,在该结构的偏移0x04处读取4个字节的数据,该数据为运行于系统中下一个进程的proc结构的虚拟地址;c-7.判断步骤c-6中获取的虚拟地址是否为0,如为0,则结束指向系统中各个任务的最高级页表指针的获取;否则,执行步骤c-8 ;c-8.将步骤c-6中获取的虚拟地址转换为物理地址,并记为lastfrocAddr,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,获得该进程的proc结构,跳转执行步骤c-2。步骤c-1中,首先通过内核变量kernproc的值来获取第一个进程的proc结构的虚拟地址,将其转化为物理地址后,获得第一个进程的proc结构;步骤c-2为在proc结构中获取task结构的虚拟地址;步骤c_3 为在task结构中获取vm_map结构的虚拟地址;步骤c_4为在vm_map结构中获取pmap结构的虚拟地址;步骤c-5为在结构pmap的偏移0妨4处获得相应进程所对应任务的最高级页表的指针,并根据该最高级页表的指针实现虚拟地址到物理地址的转换,进而获取相应进程信息。步骤c-6为获取下一个进程的proc的虚拟地址,步骤c-7对步骤c_6获取的虚拟地址进行判断,如果为0,表明已检测完毕,如果不为0,则继续进行检测;步骤c-8为下一个进程的proc的虚拟地址不为0的情况下,跳转到步骤c-2继续执行。本发明的有益效果是(1)本发明所公开的Mac OS系统的物理内存镜像文件分析方法更加可靠和高效;本发明中的内核符号表和字符串表的获取方式,有效地避免了现有技术中由于FAT文件过多而不能确定内核镜像文件头部位于物理内存镜像文件的位置的情况的发生;(2)本发明的Mac OS系统的物理内存镜像文件分析方法中,通过确定指向内核进程地址空间的最高级页表的指针实现内核虚拟地址向物理地址的转换,克服了现有方法中内核虚拟地址无法转成有效的物理地址的缺陷;(3)本发明的方法中,获取指向系统中各个任务的最高级页表的指针,不仅能够实现内核虚拟地址向物理地址的转换,而且能实现系统中其他进程地址空间虚拟地址向物理地址的转换;(4)本发明通过对物理内存镜像文件中内核映像文件副本的分析,来获取内核符号表和字符串表的虚拟地址,再利用获取的内核进程地址空间的最高级页表实现虚拟地址向物理地址的转换方法后,把内核符号表和字符串表的虚拟地址转化为物理地址,进而方便地实现了对内核变量名及其对应的变量值的获取;(5)适用的操作系统版本比较广,本发明的Mac OS系统的物理内存镜像文件分析方法,可针对Mac OS X 10. 5和Mac OS X 10. 6的物理内存镜像文件进行分析。
图1为本发明的Mac OS系统的物理内存镜像文件分析方法的流程图; 图2为本发明中SystemVersion. plist文件在内存中镜像图3为本发明中页大小为4KB的地址转换示意图; 图4为本发明中页大小为2MB的地址转换示意图; 图5为各个任务的最高级页表的指针获取方法流程图; 图6为线程信息获取方法的流程图。
具体实施例方式
下面结合附图与实施例对本发明作进一步说明。如图1所示,给出了本发明的Mac OS系统的物理内存镜像文件分析方法的流程图,其按照“内核地址转换——寻找内核符号表——信息获取”的流程来进行。由于对于安装不同操作系统版本的mac机,其指向内核进程地址空间的最高级页表的指针值不同,安装同一版本操作系统的不同mac机,其指向内核进程地址空间的最高级页表的指针值是相同的。对于操作系统版本为Mac OS X 10. 5的物理内存镜像文件,其指向内核进程地址空间的最高级页表的指针值是0x104800,对于操作系统版本为Mac OS X 10. 6的物理内存镜像文件,其指向内核进程地址空间的最高级页表的指针值是0x100000。因此,实现地址转换的前提就是确定操作系统版本。如图1所示,本发明的Mac OS系统的物理内存镜像文件分析方法,首先要获取操作系统版本信息,然后再获取内核进程地址空间的最高级页表的指针,再根据获取的最高级页表实现虚拟地址到物理地址的转换方法,然后再获取内核符号表;最后根据获取的内核符号表来获取指向系统中各个任务的最高级页表的指针、线程信息、进程打开的文件信息、驱动信息等。其具体的步骤可以通过以下三个具体的步骤来实现
a.从Mac OS系统的物理内存镜像文件中,判断系统版本信息,进而确定指向内核进程地址空间的最高级页表的指针,内核进程地址空间的最高级页表用于实现内核虚拟地址向物理地址的转换;b.获取内核符号表和字符串表,通过内核映像文件在物理内存镜像文件中的副本找到内核符号表和字符串表的虚拟地址,通过分析内核符号表及字符串表可以获得内核变量名及其对应的变量值,内核变量名及其对应的值用于获取物理内存镜像文件中包含的系统配置信息、挂载的文件系统信息、进程信息以及驱动信息;c.获取指向系统中各个任务的最高级页表的指针,此处获得的各个任务的最高级页表不仅可以实现内核进程地址空间虚拟地址向物理地址的转换,还可以实现除内核进程之外的其他进程地址空间虚拟地址向物理地址的转换。其中,对于步骤a,如图2所示,给出了 SystemVersion. plist文件在物理内存镜像文件中的映射图,采用关键词搜索的方式在物理内存镜像文件中搜索关键词 “ <key>ProductName</key>,,,根据其后紧跟的字符串 “〈string〉,,和 “〈/string〉,,之间的内容,即可获得操作系统名称,继续往下搜索关键词“<key>Produc切serVisibleVersion</ key>”,根据其后紧跟的字符串“〈string〉”和“〈/string〉”之间的内容,即可获得操作系统版本;对于操作系统版本为Mac OS X 10. 5的物理内存镜像文件,其指向内核进程地址空间中的最高级页表的指针值是0x104800,对于操作系统版本为Mac OS X 10. 6的物理内存镜像文件,其指向内核进程地址空间中的最高级页表的指针值是0x100000。对于步骤b,内核符号表和字符串表的获取,可以采用以下步骤来实现b_l.确定内核映像文件在物理内存镜像文件中的位置,对于版本为Mac OS X 10. 5的操作系统, 内核映像文件位于物理内存镜像文件中的偏移0x111000处;对于版本为Mac OS X 10.6 的操作系统,内核映像文件位于物理内存镜像文件中的偏移0x200000处;b-2.寻找内核映像文件的副本在物理内存镜像文件中的位置,内核映像文件与其副本之间的差别在于这两个文件中记录的_LINKEDIT节中名为vmaddr的值不同,因此,通过以下方法寻找内核映像文件的副本在物理内存镜像文件中的位置在物理内存镜像文件中,从内核映像文件在物理内存镜像文件中的位置开始,到字段—LINKEIDT结束,复制这一段内容;然后从内存镜像文件中向下寻找这一段内容再次出现的位置;这一段内容再次出现的位置即是内核映像文件的副本在物理内存镜像文件中的位置;内核映像文件的副本找到后,则进行下一步; b-3.首先,在物理内存镜像文件中,从内核映像文件副本在物理内存镜像文件中的位置开始,读取内核映像文件副本中记录的_LINKEDIT节的vmaddr和fileoff这两个变量所对应的值;读取命令类型为LC_SYMTAB的命令中记录的symofT和stroff这两个变量所对应的值;然后按照内核符号表的虚拟地址symvaddnmaddr+symoff-fileoff,内核字符串表的虚拟地址straddr= vmaddr+stroff-fileoff,分别计算出内核符号表和内核字符串表的虚拟地址;最后,利用步骤a中实现的内核虚拟地址到物理地址的转换方法,获得符号表的物理地址和字符串表的物理地址。Mac机采用IA-32E模式下的PAE-enable分页方式,其有两种地址转换方式,如图 3和图4所示,分别给出了页面大小为4KB和2MB的地址转换示意图,在IA-3&模式下,虚拟地址向物理地址的转换与在PAE-enable保护模式下不同,其地址转换采用4级分页结构。下面结合附图3和附图4对步骤a中由内核进程地址空间的最高级页表实现的内核虚拟地址向物理地址转换的方法进行详细说明
a-Ι.以Mac OS X 10.5操作系统为例,其指向内核进程地址空间的最高级页表的指针值是0x104800,定位到内存镜像文件的偏移0x104800处,即可找到内核进程地址空间的最高级页表;
a-2.以待转换的虚拟地址的第47-39位为索引,选择指向页目录指针表的表项,这个表项&0xFFFFF000得到的值就是指向页目录指针表的指针;
a-3.定位到内存镜像文件中该指针指向的位置处,即得到页目录指针表,以待转换虚拟地址的38-30位为索引,选择指向页目录的表项,这个表项&0xFFFFF000就是指向页目录的指针;
11a-4.定位到内存镜像文件中该指针指向的位置,即可得到页目录表。以待转换虚拟地址的第四-21位为索引,选择相对应的页目录项;
a-5.判断步骤a-4中获取的页目录项第一个字节的最高位,如果页目录项第一个字节的最高位为“1”,则表明使用大页模式,按照图4所示那样进行地址转换,执行步骤a_6 ; 如果为“0”,则表明它指向页表,按图3所示那样进行转换,执行步骤a-7 ;
a-6.把待转换虚拟地址的第20-0位作为物理地址在页中的偏移,记为offsetl ;物理地址=步骤a-4中获取的页目录项&0xFFFFF000+offsetl ;如图4所示;
a-7.首先,指向页表的指针值=步骤a-4中获取的页目录项&0xFFFFF000,定位到内存镜像文件中该指针指向的位置,即可得到页表。以待转换虚拟地址的第20-12位为索引, 选择相对应的页表项,这个页表项&0xFFFFF000得到的值就是物理地址所处页面的基地址;然后,把待转换虚拟地址的第11-0位作为物理地址在页面中的偏移,记为offset〗;物理地址=页面基地址+ofTset2。经过步骤a-2、a_3、a-4最终获得页目录项;步骤a_5通过判断页目录项第一个字节的最高位,来确定地址转换方式,如果页目录项第一个字节的最高位为“1”,则表明使用大页模式,如果为“0”,则表明使用小页模式,此时,页目录项指向页表。如图3所示。对于步骤c中指向系统中各个任务的最高级页表的指针的获取,结合说明书附图 5来进行说明,采用下述步骤来实现c-l.查找步骤b中获取的内核符号表,从中找到内核变量kernproc所对应的值,把该值作为一个偏移,定位到物理内存镜像文件的该偏移位置处,读取该位置开始处的四个字节的数据,此数据即是位于系统中第一个进程的proc结构的虚拟地址;将该地址转换为物理地址,并记为lastfrocAddr,把获得的物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到系统中第一个进程的proc结构;c-2. 在获取的proc结构的偏移OxOc处读取4个字节的数据,该数据为task结构的虚拟地址; c-3.把上步中获得的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到task结构;在task结构的偏移0x14处读取由四个字节组成的数据,该数据为vm_map结构的虚拟地址;c_4.把结构vm_map的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到vm_map结构; 在vm_map结构的偏移0x2c处读取由四个字节组成数据,该数据为pmap结构的虚拟地址; c-5.把pmap结构的虚拟地址转换为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到pmap结构;在该结构的偏移0妨4处读取以四个字节组成的值,该值即是指向运行于系统中该进程所对应的任务的最高级页表的指针;c-6.返回所获取的进程proc结构的物理地址lastfrocAddr,把该物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到已分析过的进程的proc结构,在该结构的偏移0x04处读取 4个字节的数据,该数据为运行于系统中下一个进程的proc结构的虚拟地址;c-7.判断步骤c-6中获取的虚拟地址是否为0,如为0,则结束指向系统中各个任务的最高级页表指针的获取;否则,执行步骤c-8 ;c-8.将步骤c-6中获取的虚拟地址转换为物理地址,并记为 IastProcAddr,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,获得该进程的proc结构,跳转执行步骤c-2。在结构proc的偏移OxOc处以四个字节组成的值即是结构task的虚拟地址,把其虚拟地址转换为物理地址后,在内存镜像文件中定位其值,得到task结构;在其偏移0x14处以四个字节组成的值即是结构vm_map的虚拟地址,把其指针虚拟地址转换为物理地址后,在内存镜像文件中定位其值,得到vm_map结构;在其偏移0x2c处以四个字节组成的值即是结构Pmap的虚拟地址,把其指针虚拟地址转换为物理地址后,在内存镜像文件中定位其值,得到pmap结构;在其偏移0妨4处记录的以四个字节组成的值即是我们需要获取的指向系统中各个任务的最高级页表的指针。在步骤c中,对于线程信息的获取步骤来说,结合附图6对其详细步骤进行说明, 步骤为
c-2-l.查找步骤c中获取的内核符号表,从中找到内核变量kernproc所对应的值,把该值作为一个偏移,定位到物理内存镜像文件的该偏移位置处,读取该位置开始处的四个字节的数据,此数据即是运行于系统中第一个进程的proc结构的虚拟地址;将该地址转换为物理地址,并记为lastfrocAddr,把获得的物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到运行于系统中第一个进程的proc结构;
c-2-2.在获取的proc结构的偏移0x40处读取四个字节的数据,此数据即是uthread 结构的虚拟地址;
c-2-3.把结构uthread的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到uthread结构;在uthread结构的偏移0x104处读取四个字节数据;此数据即是VfS_COnteXt结构的虚拟地址;
c-2-4.把结构vfS_COnteXt的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到vfs_COnteXt结构;在vfS_COnteXt结构的偏移 0x00处读取四个字节的数据;此数据即是结构thread的虚拟地址;
c-2-5.把结构thread的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到thread结构,该结构中存放了关于线程的基本信息;
c-2-6.返回本次分析过程中所获取的进程proc结构的物理地址lastfrocAddr,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,可得到运行于系统中当前已分析过的进程的proc结构,在该结构的偏移0x04处读取4个字节的数据,该数据为运行于系统中下一个进程的proc结构的虚拟地址;
c-2-7.判断步骤c-2-6中获取的虚拟地址是否为0,如为0则退出执行;否则,执行步骤 c-2-8 ;
c-2-8.将步骤c-2-6中获取的虚拟地址转换为物理地址记为lastfrocAddr,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,获得该进程的proc结构,跳转执行步骤c-2-2 ;
艮口,在结构proc的偏移0x40处以四个字节组成的值即是结构uthread的虚拟地址,把其虚拟地址转换为物理地址后,在内存镜像文件中定位其值,得到uthread结构;在其偏移 0x104处以四个字节组成的值即是结构vfS_COnteXt的虚拟地址,把其虚拟地址转换为物理地址后,在内存镜像文件中定位其值,得到vfs_COntext结构;在其偏移0x00处以四个字节组成的值即是结构thread的虚拟地址,在该结构中存放了关于线程的基本信息。因此,通过上述各方法步骤,可以获取指向内核进程地址空间的最高级页表的指针、指向系统中各个任务的最高级页表的指针以及线程详细信息。
权利要求
1.一种Mac OS系统的物理内存镜像文件分析方法,其特征在于,包括以下步骤a.从MacOS系统的物理内存镜像文件中,判断系统版本信息,进而确定指向内核进程地址空间的最高级页表的指针,内核进程地址空间的最高级页表用于实现内核虚拟地址向物理地址的转换;b.获取内核符号表和字符串表,通过内核映像文件在物理内存镜像文件中的副本找到内核符号表和字符串表的虚拟地址,通过分析内核符号表及字符串表可以获得内核变量名及其对应的变量值,内核变量名及其对应的值用于获取物理内存镜像文件中包含的系统配置信息、挂载的文件系统信息、进程信息以及驱动信息;c.获取指向系统中各个任务的最高级页表的指针,此处获得的各个任务的最高级页表不仅可以实现内核进程地址空间虚拟地址向物理地址的转换,还可以实现除内核进程之外的其他进程地址空间虚拟地址向物理地址的转换。
2.根据权利要求1所述的MacOS系统的物理内存镜像文件分析方法,其特征在于,所述步骤a中,由于操作系统版本信息存放在名为SystemVersion. plist的文件中,因此根据文件特征,查找物理内存镜像文件,从物理内存镜像文件中找到名为SystemVersion. plist 的文件,从中获取系统版本信息;对于版本为Mac OS X 10. 5的操作系统,其指向内核进程地址空间的最高级页表的指针值是0x104800,即内核进程地址空间中的最高级页表位于物理内存镜像文件中的偏移0x104800处;对于版本为Mac OS X 10. 6的操作系统,其指向内核进程地址空间的最高级页表的指针值是0x100000,即内核进程地址空间的最高级页表位于物理内存镜像文件的偏移0x100000处。
3.根据权利要求1所述的MacOS系统的物理内存镜像文件分析方法,其特征在于,步骤b中的内核符号表和字符串表的获取,包括以下步骤b-Ι.确定内核映像文件在物理内存镜像文件中的位置,对于版本为Mac OS X 10. 5的操作系统,内核映像文件位于物理内存镜像文件中的偏移0x111000处;对于版本为Mac OS X 10. 6的操作系统,内核映像文件位于物理内存镜像文件中的偏移0x200000处;b-2.寻找内核映像文件的副本在物理内存镜像文件中的位置,内核映像文件与其副本之间的差别在于这两个文件中记录的_LINKEDIT节中名为vmaddr的值不同,因此,通过以下方法寻找内核映像文件的副本在物理内存镜像文件中的位置在物理内存镜像文件中,从内核映像文件在物理内存镜像文件中的位置开始,到字段—LINKEIDT结束,复制这一段内容;然后从内存镜像文件中向下寻找这一段内容再次出现的位置;这一段内容再次出现的位置即是内核映像文件的副本在物理内存镜像文件中的位置;内核映像文件的副本找到后,则进行下一步;b-3.首先,在物理内存镜像文件中,从内核映像文件副本在物理内存镜像文件中的位置开始,读取内核映像文件副本中记录的_LINKEDIT节的vmaddr和fileoff这两个变量所对应的值;读取命令类型为LC_SYMTAB的命令中记录的symoff和stroff这两个变量所对应的值;然后按照内核符号表的虚拟地址symvaddnmaddr+symoff-fileoff,内核字符串表的虚拟地址straddr= vmaddr+stroff-fileoff,分别计算出内核符号表和内核字符串表的虚拟地址;最后,利用步骤a中实现的内核虚拟地址到物理地址的转换方法,获得符号表的物理地址和字符串表的物理地址。
4.根据权利要求1所述的MacOS系统的物理内存镜像文件分析方法,其特征在于,步骤c中所述的指向系统中各个任务的最高级页表的指针的获取依次包括以下步骤C-1.查找步骤b中获取的内核符号表,从中找到内核变量kernproc所对应的值,把该值作为一个偏移,定位到物理内存镜像文件的该偏移位置处,读取该位置开始处的四个字节的数据,此数据即是位于系统中第一个进程的proc结构的虚拟地址;将该地址转换为物理地址,并记为lastfrocAddr,把获得的物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到系统中第一个进程的proc结构;c-2.在获取的proc结构的偏移OxOc处读取4个字节的数据,该数据为task结构的虚拟地址;c-3.把上步中获得的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到task结构;在task结构的偏移0x14处读取由四个字节组成的数据,该数据为vm_map结构的虚拟地址;c-4.把结构vm_map的虚拟地址转化为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到vm_map结构;在vm_map结构的偏移0x2c处读取由四个字节组成数据,该数据为pmap结构的虚拟地址;c-5.把pmap结构的虚拟地址转换为物理地址,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到pmap结构;在该结构的偏移0妨4处读取以四个字节组成的值,该值即是指向运行于系统中该进程所对应的任务的最高级页表的指针;c-6.返回所获取的进程proc结构的物理地址lastfrocAddr,把该物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,得到已分析过的进程的proc结构,在该结构的偏移0x04处读取4个字节的数据,该数据为运行于系统中下一个进程的proc结构的虚拟地址;c-7.判断步骤c-6中获取的虚拟地址是否为0,如为0,则结束指向系统中各个任务的最高级页表指针的获取;否则,执行步骤c-8 ;c-8.将步骤c-6中获取的虚拟地址转换为物理地址,并记为lastfrocAddr,把物理地址作为偏移,定位到物理内存镜像文件的此偏移位置处,获得该进程的proc结构,跳转执行步骤c-2。
全文摘要
本发明的MacOS系统的物理内存镜像文件分析方法,包括a.判断系统版本信息,确定指向内核进程地址空间的最高级页表的指针;b.获取内核符号表和字符串表,通过内核映像文件在物理内存镜像文件中的副本找到内核符号表和字符串表,进而获取物理内存镜像文件中包含的系统配置信息、挂载的文件系统信息、进程信息以及驱动信息;c.获取指向系统中各个任务的最高级页表的指针。步骤b通过对物理内存镜像文件中内核映像文件副本的分析,来获取符号表和字符串表。本发明克服了现有技术内核映像文件获取方式繁琐复杂、地址转换方法不可靠、信息获取不全面的缺点;易于获取进程、驱动、挂载的文件系统等信息,有利于MacOS系统计算机内存取证的研究。
文档编号G06F17/30GK102279877SQ20111020954
公开日2011年12月14日 申请日期2011年7月26日 优先权日2011年7月26日
发明者张淑慧, 徐丽娟, 武鲁, 王连海, 顾卫东 申请人:山东省计算中心