控制代碼表及全域性控制代碼表

2021-08-26 18:12:27 字數 2104 閱讀 9299

控制代碼表結構

1.這一塊共計兩個位元組,低位元組保留為0,高位位元組是給sethandleinformation這個函式用的,比如寫成sethandleinformation(handle,handle_flag_protect_from_close,handle_flag_protect_from_close),那麼這個位置將被寫入0x02;

handle_flag_protect_from_close 巨集的值為0x00000002,取最低位元組,最終1這塊是0x0200,

2.這塊是訪問掩碼,是給openprocess 這個函式用的openprocess(dwdesiredacess,binherithandle,dwprocessid);具體的存的就是這個函式的第乙個引數的值

3和4這兩塊共四個位元組,其中bit0-bit2 存的是這個控制代碼的屬性,其中bit2 bit0預設為0,1;bit1 表示的函式是該控制代碼是否可繼承;openprocess的第二個引數與bit1有關;

bit31-bit3則是存放的該核心物件在核心中的具體的位址

例項:1.編碼獲得當前的控制代碼

2.獲得handle_table結構

windbg中!process 0 0 獲得當前程序的rva

3.獲得控制代碼表的位址

4.通過索引檢視控制代碼表中控制代碼的實際位址 7cc/4 = 1fc 因為控制代碼表是8位元組進行排列的 所以需要乘以8

獲得openprocess開啟的程序的控制代碼

5.驗證這個位址 因為後3位是標誌位 所以需要清零 得到的位址就是86076008 這個位址實際指向的是object_heander結構 0x18的位置才是eprocess的位址

1、全域性控制代碼表

1)  所有的程序和執行緒無論無論是否開啟,都在這個表中。

2)  每個程序和執行緒都有乙個唯一的編號:pid和cid    這兩個值其實就是全域性控制代碼表中的索引。

程序和執行緒的查詢,主要是以下三個函式,按照給定的pid或cid從pspcidtable從查詢相應的進執行緒物件:

pslookupprocessthreadbycid() 

pslookupprocessbyprocessid() 

pslookupthreadbythreadid()     

2、全域性控制代碼表結構

例項:1.獲得全域性控制代碼表位址

2.通過pid獲得起在全域性控制代碼表中的位址值 計算器pid=1440 1440/4=0x168

3.通過第乙個位址獲得指定位址的名稱及其相信資訊

分析控制代碼表

一 什麼是控制代碼 當乙個程序建立或者開啟乙個核心物件時,將獲得乙個控制代碼,通過這個控制代碼可以訪問核心物件。如 createmutex createevent createthread 等函式就會返回乙個handle類行值,這種就叫控制代碼,對應著乙個核心物件。呼叫closehandle 函式對...

程序建立 終止及控制代碼表

include include 使用多字符集 if 0 筆記 bool createprocess lptstr lpcommandline,command line string lpsecurity attributes lpprocessattributes,sd lpsecurity att...

控制代碼表和pspcidtable

首先要先bs一下自己.一直以為程序的控制代碼表和pspcidtable是一樣的.結果因為概念上的理解錯誤導致偶浪費了不少時間.多虧好心的fc的耐心指導算是明白一些.總結一下fc教偶的 pspcidtable與程序控制代碼表沒有直接關係.它只是借用了控制代碼表的結構.它裡面存的內容是 eprocess...