天天看點

關于對windows10 x64環境下gdt表10号索引項内容的探究

0x00背景

在寫一個檢視windows 核心資源的程式時,發現10号索引項既不是段描述符也不是門描述符且内容一直在改變,故想知道其中儲存了什麼内容。

環境說明:windows10 x64 1903

關于對windows10 x64環境下gdt表10号索引項内容的探究

上圖中标紅線的項即為10号索引項。

 0x01 過程

關于對windows10 x64環境下gdt表10号索引項内容的探究

在gdt表10号索引項所在位址設定硬體寫斷點

關于對windows10 x64環境下gdt表10号索引項内容的探究

經過多次運作測試,發現一直中斷在nt!SwapContext+0x3cb附近。

關于對windows10 x64環境下gdt表10号索引項内容的探究

中斷時環境

觸發硬體中斷時,執行的指令在中斷位置的上一條指令。

分析這條指令可知,rcx指向GDTBase。rax中儲存着要設定的值。隻要找到rax中的值,就可以知道此位置設定了什麼值。

關于對windows10 x64環境下gdt表10号索引項内容的探究

搜尋rbx所在記憶體區間以及rbx-180h,懷疑可能是指向prcb的位址

關于對windows10 x64環境下gdt表10号索引項内容的探究

  通過!prcb指令可以發現猜想正确。

關于對windows10 x64環境下gdt表10号索引項内容的探究

根據邏輯發現,隻要找到rsi指向什麼地方,就可以知道在rax設定了什麼值

關于對windows10 x64環境下gdt表10号索引項内容的探究

 在ida pro 中 檢視SwapContext函數定義

檢視交叉引用,發現KiSwapContext調用此函數。

關于對windows10 x64環境下gdt表10号索引項内容的探究

 從SwapContext函數的第四個參數,發現rsi指向ethread結構

關于對windows10 x64環境下gdt表10号索引項内容的探究

 動态調試rsi和ethread的值相等也驗證了ida pro 中的結論。

0x03結論

關于對windows10 x64環境下gdt表10号索引項内容的探究

在ida pro 中将相關結構補齊,分析相關邏輯可知 如果使用者層是32位程式,則将teb的低32位址加0x2000後儲存在gdt 目标位置。,如果是64位程式,則将_EPROCESS.UserFsBase的低32位儲存在目标位置。

繼續閱讀