天天看點

Windows保護模式學習筆記(六)—— 10-10-12分頁

Windows保護模式學習筆記(六)—— 10-10-12分頁

    • 基本概念
      • 4GB記憶體空間
      • 有效位址-線性位址-實體位址
        • 有效位址與線性位址
        • 實體位址
      • 控制寄存器:Cr3
    • 10-10-12分頁
      • 實驗:通過線性位址找到實體位址
        • 第一步:将XP虛拟機設定為10-10-12分頁模式
        • 第二步:建立一個記事本,寫入"Hello World"
        • 第三步:使用Cheat Engine附加程序
        • 第四步:找到"Hello World"的線性位址
        • 第五步:将線性位址拆分為10-10-12三組比特組
        • 第六步:獲得程序的Cr3
        • 第七步:通過Cr3找到字元串的實體位址
          • 第一層
          • 第二層
          • 第三層

基本概念

4GB記憶體空間

大家可能都聽說過,每個程式在運作時,作業系統都會為其配置設定一段4GB的記憶體空間。

但是我們的記憶體容量很可能最多隻夠為一個程序配置設定4GB的記憶體空間,如何做到為每個程序都配置設定呢?

實際上,程序被配置設定到的“4GB記憶體空間”隻是虛拟的的記憶體空間,并不是指真正意義上的實體記憶體,虛拟記憶體與實體記憶體之間有一層轉換關系。

Windows保護模式學習筆記(六)—— 10-10-12分頁

有效位址-線性位址-實體位址

有效位址與線性位址

先看如下指令:

MOV eax,dword ptr ds:[0x12345678]

其中,0x12345678 是有效位址

ds.Base + 0x12345678 是線性位址

注意:當段寄存器的Base為0時,有效位址=線性位址,大多數時候都是如此;但也有特殊情況,比如fs段寄存器的Base不為0

實體位址

描述:

我們平時所用到的系統DLL(動态連結庫)存在于實體位址中,當程式想要調用某個DLL時,DLL便會映射一份線性位址給程式,這樣程式就能夠通過線性位址找到DLL的實體位址
Windows保護模式學習筆記(六)—— 10-10-12分頁

控制寄存器:Cr3

描述:

每個程序都有一個Cr3(準确的說是都有一個Cr3的值,Cr3本身是個寄存器,一個核,隻有一套寄存器)

Cr3指向一個實體頁,一共4096位元組

有關Cr3結構部分将在下一篇詳細說明,這裡隻引入基本概念(實驗需要)

Windows保護模式學習筆記(六)—— 10-10-12分頁

10-10-12分頁

實驗:通過線性位址找到實體位址

第一步:将XP虛拟機設定為10-10-12分頁模式

右鍵→我的電腦→屬性→進階

Windows保護模式學習筆記(六)—— 10-10-12分頁
Windows保護模式學習筆記(六)—— 10-10-12分頁
Windows保護模式學習筆記(六)—— 10-10-12分頁

将noexecute改為execute,儲存,重新開機即可

第二步:建立一個記事本,寫入"Hello World"

Windows保護模式學習筆記(六)—— 10-10-12分頁

第三步:使用Cheat Engine附加程序

Windows保護模式學習筆記(六)—— 10-10-12分頁

第四步:找到"Hello World"的線性位址

Windows保護模式學習筆記(六)—— 10-10-12分頁

搜尋字元串的時候别忘了勾上Unicode

可以看到左邊出現了兩個結果,我們可以在記事本中将最後的字元’d’改成’m’來确認哪個才是真正的線性位址

Windows保護模式學習筆記(六)—— 10-10-12分頁

線性位址最終确定為:

06765140

第五步:将線性位址拆分為10-10-12三組比特組

0    6    7    6    5    140
=
0000 0110 0111 0110 0101 140
=
0000011001		// 0x19
1101100101		// 0x365
140				// 12個比特位剛好三個位元組
           

第六步:獲得程序的Cr3

在WinDbg中輸入指令:

!process 0 0

Windows保護模式學習筆記(六)—— 10-10-12分頁

DirBase的值就是Cr3

第七步:通過Cr3找到字元串的實體位址

注意:

  1. 找第一層和第二層的時候要将索引* 4(每個位址占4個位元組)
  2. 每找到一層都要将位址後三位屬性位清零再繼續找下一層
第一層
Windows保護模式學習筆記(六)—— 10-10-12分頁
第二層
Windows保護模式學習筆記(六)—— 10-10-12分頁
第三層
Windows保護模式學習筆記(六)—— 10-10-12分頁

使用db指令以字元形式檢視

Windows保護模式學習筆記(六)—— 10-10-12分頁

實驗成功!

繼續閱讀