控制代碼表結構
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...