NewBluePill原始碼學習

2021-09-13 11:17:16 字數 1441 閱讀 9212

newbluepill的原始碼也看的差不多了,一直說等有時間了再寫學習的一些心得,拖來拖去弄到現在了,時間不是等來的,慢慢開始吧。

0x00初識硬體虛擬化

硬體虛擬化對大數人來講還是比較陌生。什麼是硬體虛擬化?因為早期的虛擬機器都是程序級虛擬機器,也就是作為已有作業系統的乙個程序,完全通過軟體的手段來模擬硬體,軟體再翻譯記憶體位址的方法實現物理機器的模擬,這樣虛擬效率較低,資源利用率低。之後intel和amd相繼推出了支援硬體虛擬化的處理器,所謂硬體虛擬化,也就是在硬體抽象層對虛擬技術提供直接支援,提高虛擬效率。我們之前提到過在程序級虛擬機器中的客戶機訪問的實體地址需要經過軟體的再次轉化成真實機器的實體地址,而且也需要給不同的客戶機作業系統編寫不同的虛擬裝置驅動程式從而可以共享同一真實的硬體資源。而硬體虛擬化則是實現了記憶體位址甚至與i/o裝置的直接對映,無需經過再一次的轉換。而硬體虛擬化技術中引出了乙個重要的概念——vmm(virtual machine monitor),使硬體虛擬化技術產生的乙個新的特權級,用來處理虛擬硬體和真實硬體的通訊和一些事件的處理,因此其系統許可權在作業系統之上,產生了乙個新的特權級「ring -1」。可以簡單理解為利用硬體虛擬化技術可以讓我們的**執行在作業系統之下,監視整個作業系統的執行。

0x01     vt與newbluepill

vt是intel的硬體虛擬化技術,已經流行多年,但關於vt的資料並不多。之前有大牛利用vt寫出的偵錯程式外掛程式可以直接無視反除錯,而學習vt技術,最好的資料莫過於newbluepill原始碼 (以下簡稱nbp),nbp是2023年由invisible things lab公布,為nbp-0.32-public版本。其中實現了乙個基本的vmm,可以在作業系統執行時動態載入和解除安裝,在作業系統不知情的情況下將作業系統置於虛擬機器中執行和記憶體隱藏技術。雖然nbp支援intel和amd虛擬化,但在我們之後分析的重點是intel的虛擬化,也就是主要學習的是vt技術。

0x02    newbluepill編譯及除錯

如圖所示則編譯成功,在bin目錄下生成了nbp-0.32-public\amd64\newbp.sys檔案。

在虛擬機器的設定中需要將虛擬化選項選中。我使用的是vmware10。

在nbp-0.32-public\common\newbp.c檔案中的driverentry的開始部分加上**,使程式執行時中斷到windbg偵錯程式:

#ifdef _debug

cmdebugbreak(); //int 3

#endif // _debug

jpg改rar

Redux createStore原始碼學習

redux apiexport原始碼結構上面我們看到了redux的api和原始碼結構,看的出來,warning.js和index.js不用解析,都看得懂,關鍵時其餘的幾個module,那我們從最重要的createstore講起。export var actiontypes 首先定義了乙個action...

pytorch geometric 原始碼學習

作者大神真的太屌了,膜拜,工程實現能力太強了 本文希望能夠記錄學習其原始碼的過程 data dataset 部分 涉及優化?property 一種python內建裝飾器,可以將乙個成員函式當成成員變數來訪問,例如 class planetoid inmemorydataset url def ini...

logback原始碼閱讀 根據原始碼學擴充套件點 七

原始碼 點選跳轉 1.xml定義 xml version 1.0 encoding utf 8 configuration property name charset value utf 8 name class encoder pattern p d t logger line n m n n p...