Volatility是一個內(nèi)存分析工具,其能夠分析操作系統(tǒng)的物理內(nèi)存岭埠,獲取其語義信息脆丁。
針對一個Linux操作系統(tǒng)(安裝文件),Volatility進(jìn)行內(nèi)存分析時稚叹,其需要獲取profile焰薄,profile包括兩個內(nèi)容:systemmap和dwarf,
其中systemmap列出了一系列符號的虛擬地址扒袖;
dwarf是使用Volatility中的工具生成的文件塞茅,包含了內(nèi)核中一系列數(shù)據(jù)的結(jié)構(gòu)信息,其是通過將Linux內(nèi)核的源代碼輸入工具中季率,工具進(jìn)行分析野瘦,確定一系列結(jié)構(gòu)的信息,其以樹狀形式反應(yīng),<1>開頭的表示是根鞭光,<2>表示是根下面的結(jié)構(gòu)信息吏廉,比如struct task_struct中,task_struct中包括tasks惰许,則dwarf文件中的形式為<1> task_struct <2> tasks <offset=111>
真實(shí)分析的時候席覆,Volatility應(yīng)該是如下進(jìn)行的:
1. 首先根據(jù)systemmap獲取虛擬地址,然后進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換啡省;
線性地址結(jié)構(gòu)如下圖所示:
Page Map level 4 ? ? ? ?Page Directory Pointer ? ?Page Table Selector ? ? Page Table ? Enter ? ? ? ? ? ? ? ?頁內(nèi)字節(jié)尋址
--------------------- ? ? ? ? ? ? ? ?------------------------ ? ? ? ? ? ? --------------------- ? ? ---------------------- ? ? ? ? ? ? ? ? ?----------------------
47 ? ? ? ? ? ? ? ? ? ? ? 39 ? ?38 ? ? ? ? ? ? ? ? ? ? ? ? ? 30 ? ?29 ? ? ? ? ? ? ? ? ? ? ? 21 ? ? ? 20 ? ? ? ? ? ? ? ? ? ? ? ? ?12 ? ? ? ? ?11 ? ? ? ? ? ? ? ? ? ? ? ? ?0
概念:
PML4T(Page Map Level4 Table)及表內(nèi)的PML4E結(jié)構(gòu)娜睛,每個表為4K,內(nèi)含512個PML4E結(jié)構(gòu)卦睹,每個8字節(jié)
PDPT (Page Directory Pointer Table)及表內(nèi)的PDPTE結(jié)構(gòu)畦戒,每個表4K,內(nèi)含512個PDPTE結(jié)構(gòu),每個8字節(jié)
PDT (Page Directory Table) 及表內(nèi)的PDE結(jié)構(gòu)陡舅,每個表4K契邀,內(nèi)含512個PDE結(jié)構(gòu),每個8字節(jié)
PT(Page Table)及表內(nèi)額PTE結(jié)構(gòu)垃环,每個表4K,內(nèi)含512個PTE結(jié)構(gòu)返敬,每個8字節(jié)遂庄。
2. 取出對應(yīng)物理地址的內(nèi)容,然后按照dwarf中獲取的結(jié)構(gòu)信息劲赠,解析語義信息涛目,獲取語義。
通過分析凛澎,針對進(jìn)程而言霹肝,可以獲取dtb、進(jìn)程名稱(至多16個字符)塑煎、uid沫换、gid、pid
針對文件最铁,可以獲取打開文件的進(jìn)程名稱讯赏、pid、文件路徑信息冷尉。