Volatility是一个内存分析工具,其能够分析操作系统的物理内存,获取其语义信息。
针对一个Linux操作系统(安装文件),Volatility进行内存分析时,其需要获取profile,profile包括两个内容:systemmap和dwarf,
其中systemmap列出了一系列符号的虚拟地址;
dwarf是使用Volatility中的工具生成的文件,包含了内核中一系列数据的结构信息,其是通过将Linux内核的源代码输入工具中,工具进行分析,确定一系列结构的信息,其以树状形式反应,<1>开头的表示是根,<2>表示是根下面的结构信息,比如struct task_struct中,task_struct中包括tasks,则dwarf文件中的形式为<1> task_struct <2> tasks <offset=111>
真实分析的时候,Volatility应该是如下进行的:
1. 首先根据systemmap获取虚拟地址,然后进行虚拟地址到物理地址的转换;
线性地址结构如下图所示:
Page Map level 4 Page Directory Pointer Page Table Selector Page Table Enter 页内字节寻址
--------------------- ------------------------ --------------------- ---------------------- ----------------------
47 39 38 30 29 21 20 12 11 0
概念:
PML4T(Page Map Level4 Table)及表内的PML4E结构,每个表为4K,内含512个PML4E结构,每个8字节
PDPT (Page Directory Pointer Table)及表内的PDPTE结构,每个表4K,内含512个PDPTE结构,每个8字节
PDT (Page Directory Table) 及表内的PDE结构,每个表4K,内含512个PDE结构,每个8字节
PT(Page Table)及表内额PTE结构,每个表4K,内含512个PTE结构,每个8字节。
2. 取出对应物理地址的内容,然后按照dwarf中获取的结构信息,解析语义信息,获取语义。
通过分析,针对进程而言,可以获取dtb、进程名称(至多16个字符)、uid、gid、pid
针对文件,可以获取打开文件的进程名称、pid、文件路径信息。