通過PEB的Ldr列舉程序內所有已載入的模組

2021-05-21 20:29:58 字數 690 閱讀 1242

一、幾個重要的資料結構,可以通過windbg的dt命令檢視其詳細資訊

_peb、_peb_ldr_data、_ldr_data_table_entry

二、技術原理

1、通過fs:[30h]獲取當前程序的_peb結構

2、通過_peb的ldr成員獲取_peb_ldr_data結構

3、通過_peb_ldr_data的inmemoryordermodulelist成員獲取_list_entry結構

4、通過_list_entry的flink成員獲取_ldr_data_table_entry結構,注意:這裡的flink指向的是_ldr_data_table_entry結構中的inmemoryorderlinks成員,因此需要計算真正的_ldr_data_table_entry起始位址,我們可以用containing_record來計算。

5、輸出_ldr_data_table_entry的basedllname或fulldllname成員資訊。

三、**實現(基於xp sp2 系統)

四、總結

列舉模組有多種方式,隨著深入的學習,希望能總結越來越來的方法。在這裡感謝sai的文章:http://www.debugman.com/read.php?tid=4255,雖然他的文章還沒細看,但他裡面的_ldr_data_table_entry結構促發了我編寫測試的想法並總結了本文。

通過PspCidTable列舉程序

如果當前程序為system程序,就意味著此次開啟的核心物件訪問許可權屬於核心,那麼就使用核心控制代碼表,內 核控制代碼與使用者控制代碼不同的地方就在於核心控制代碼需要或上乙個0x80000000即最高位置為1作為標識,但是實際在使用控制代碼的時候還是不需要這個最高位值的。程序的控制代碼表由eproc...

《原創》 通過PEB獲得程序路徑 附完整工程

完整工程 peb process environment block,程序環境塊 存放程序資訊,每個程序都有自己的peb資訊。位於使用者位址空間。peb位址可以通過函式psgetprocesspeb eprocess 來獲得,也可以通過eprocess基位址加偏移0x1b0 x86 來獲得。peb結...

通過列舉獲得控制台程序號,結束程序

我用enumprocesses aprocesses,sizeof aprocesses cbneeded 得到所有執行當中的程序的id 然後逐一檢查processname 如果processname是我要找的 pig.exe 則得到它的控制代碼hprocess id應該沒有錯 控制代碼是這樣得到 ...