https://github.com/ShaneK2/inVtero.net/blob/master/quickdumps/publish.zip
Linux 使用符號伺服器進行類型解析,它就可以工作;)
查看 inVteroCore 版本,為 Linux 上的 XEN 和 VMWare(或運行 CORECLR 的任何地方、OSX 和 FBSD)提供完整性
##$ 重要(.NET 上的 Windows 使用者)=> 您確實需要註冊 msdia140.dll“cmd /c regsvr32 msdia140.dll”(請參閱 zip)
無需配置,完全動態/鴨子類型
用於記憶體編輯(反彙編和修補)支援格式的新 UI。在 vtero 實例上使用“Loader()”,例如;
Loader(test(MemList))
更改 MemoryDump 字串以指向記憶體轉儲。範例記憶體轉儲行走和analyze.py中的型別系統說明,請參閱WalkProcListExample()
quickdumps
>>> MemList = [ "c:\temp\win10.64.xendump" ]
>>> test(MemList)
++++++++++++++++++++++++++++++ ANALYZING INPUT [c:tempwin10.64.xendump] ++++++++++++++++++++++++++++++
PART RUNTIME: 00:00:08.5211677 (seconds), INPUT DUMP SIZE: 4,303,692,448.00 bytes.
SPEED: 466,980 KB / second (all phases aggregate time)
++++++++++++++++++++++++++++++ DONE WITH INPUT [c:tempwin10.64.xendump] ++++++++++++++++++++++++++++++
>>> Loader(vtero)
使用獨立於微架構的虛擬機器自省技術在記憶體轉儲中尋找/提取進程、管理程式(包括巢狀)。跨平台、多架構高效能實體記憶體分析工具。
x64 版本 |
---|
Quickdumps 是使用 inVtero.net API 提取和驗證實體記憶體的範例。
我們初始化虛擬到實體位址轉換的方式,不依賴輸入檔案格式。任何 .DMP、.RAW、.DD 都應該沒問題。不幸的是,如果底層捕獲格式使用某種形式的範圍儲存(即不消耗 NULL 或 NOT PRESENT 頁面的實體儲存),則有一個很大的問題,您的里程可能會有所不同。有很多用於轉換記憶體轉儲、波動性的工具 - rekal 是一些不錯的起點。點陣圖. DMP 檔案是待辦事項,以便更輕鬆地分析 livedump(目前,如果您手動啟動藍色畫面並配置完整轉儲或使用第 3 方原始 dd 類型工具,效果最好)。
使用幾個概念來確保我們僅在需要時與使用者互動。類似地,對於Actaeon github 專案@eurecom-s3/actaeon,主要目標是定位和利用VMCS 頁面,以便定位配置的EPTP(擴展頁表指標),該指標是定位屬於某個虛擬機器的實體頁面所必需的。 Google @google/rekall rekal 隨後實現了一個更廣泛的實現,它要求用戶在給定內存轉儲所產生的系統上運行Linux 內核模組,這意味著構建一個專門的配置文件,可用於然後導入到本地rekal 中設定文件,它將使您能夠從實體主機轉儲中隔離/提取來賓記憶體。
在 CanSecWest/DC22 期間,我提出了一種高品質技術(基於 CPU 和 OS mm 層之間的最低層互動),透過檢查實體記憶體快照來識別系統上運行的任何進程。這種機制是基於所謂的自指標 (Windows) 或遞迴頁目錄指標 (*BSD),它們總是期望被發現(除非您的 Windows 系統有經過大量修改/修補的 mm,或只是 * 的自訂核心) BSD)。最終結果是我們知道所有給定的 CR3 暫存器值。由於 VMCS 至少包含 1 個已知的 CR3 值(可以模擬或動態重新映射第二個值),因此我們有信心在不了解底層作業系統版本(例如 XP(64 位元)->Win2016 是一致)或微架構。
暴力最終總會獲勝!或者我聽說...無論如何,如果發現未知的 VMCS 映射(EPTP 索引),快速轉儲將發出一組可能的值/索引。該清單通常很小,最多 10-20 個。即將推出的一項功能是自動嘗試每個可能的值,直到找到「有效」的值。這應該確保我們無需更改任何程式碼即可適用於即將推出的 CPU 微架構(或者我可能會設定一些指定這些的類別以使生活變得輕鬆)。不管怎樣,暴力破解應該要相當快。我嘗試充分利用多核心 CPU,因此如果您有額外的核心,那麼當您分析包含許多虛擬機器的大型轉儲時,它們可能會得到鍛鍊。
從筆記型電腦運行的範例:
Process CR3 [00000002DD41F000] File Offset [0000000293A12000] Diff [FFFFFFFFB65F3000] Type [Windows]
159 candiate process page tables. Time so far: 00:01:01.4826693, second pass starting. rate: 32588.149 MB/s
Hypervisor: VMCS revision field: 16384 [00004000] abort indicator: NO_ABORT [00000000]▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Hypervisor: Windows CR3 found [00000000016A0000)] byte-swapped: [00006A0100000000] @ PAGE/File Offset = [00000001262DA000]
[435][00000000006F0054]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001308D3000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [0000000130AD1000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001314CF000]
[14][000000007433301E]
Hypervisor: VMCS revision field: 0 [00000000] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000016A0000)] byte-swapped: [00006A0100000000] @ PAGE/File Offset = [0000000160643000]
[106][00000000001E001C]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [0000000195922000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001959A3000]
[14][000000007433301E]
159 candiate VMCS pages. Time to process: 00:02:51.8973861
Data scanned: 34,171,150,654.00Second pass done. rate: 1277.967 MB/s▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
grouping and joinging all memory
Scanning for group correlations
MemberProces: Groupt 1 Type [Windows] Group Correlation [100.000 %] PID [1AB000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [16A0000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [1FCA000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [62AB000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [34CE8000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [37300000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [7DCC6000]
Finished Group 1 collected size 48 next group
Scanning for group correlations
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [65C8000]
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [6B51000]
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [6CC9000]
在上面的範例中,VMWARE 的 EPTP 位於其 VMCS 中的索引 14。
* 我們將看看是否能將其淘汰,但現在它只是從每一層轉儲核心記憶體。在來賓作業系統虛擬機器的使用者空間上工作。
有很多 TODO,但我會盡快加入。現在的主要問題是,我真的很猶豫是否要添加作業系統提供的任何內容,即使它會有很大的幫助。我認為有足夠的上下文可以避免添加任何邏輯作業系統依賴項。我喜歡 Rekal 的承諾,但他們的個人資料檔案似乎也很大,所以兩者都有。
仍有一些清理工作要做。這仍然是 alpha 版本,但將積極開發。
擴展到更多已知的 EPTP 類型,因此無需暴力破解
將建立一個PFN 位圖索引來自動神奇地確定運行(目前,如果您嘗試在運行後轉儲/查詢任何內容,則會導致問題或丟失等。接下來將添加此索引以確保我們獲得100% 全面轉儲。
避免使用作業系統邏輯結構來支援記憶體分析。大多數作業系統層結構、資料、程式碼和物件可能會被攻擊者操縱,誤導分析師的工作。
即將推出的功能可呈現代碼頁的完整性映射,這些代碼頁可以映射回加密安全的區塊/頁雜湊值(即 SHA256 或 TIGER192)。我們的結果表明,win10 之前的驗證率超過 99%,win10 後揮發性記憶體幾乎 100% 可驗證。這消除了在嘗試檢測/分析數千兆位元組的輸入時由於傳統的手動處理/審查/拆卸記憶體而導致的大量猜測工作和未知的工作。
文件
圖形使用者介面實施