擴充_ETHREAD結構

Editor發表於2018-09-04

在某些場景下,我想要系統的某些結構跟我自己的資料進行繫結,如map<EPROCESS process,uint64_t DebugPort>。但是在某些情況下map+lock並不適用。我希望擴充系統的這些結構,在分配這些結構體的時候多分配一部分出來來達到繫結的目的。


翻閱一下wrk,找到相關的地方:


ETHREAD:


擴充_ETHREAD結構


EPROCESS:


擴充_ETHREAD結構


可以看到呼叫ObCreateObject傳入對應的結構體大小,即分配了對應的記憶體。但是在WIN10下,這個地方有少許改變,win10下仍然有ObCreateObject,

但是成了ObCreateObjectEx的封裝,系統分配結構體的地方也變了。


擴充_ETHREAD結構


可以看到ObCreateObjectEx比 ObCreateObject在後面多了一個引數,


擴充_ETHREAD結構


多的這個引數,是在 ObCreateObjectEx呼叫ObpAllocateObject時使用。


擴充_ETHREAD結構


回到前面,我們HOOK ObCreateObjectEx 判斷ObjectType,修改ObjectBodySize來達到擴充的目的。


擴充_ETHREAD結構


先定義需要擴充的結構和一個flag,表明該執行緒是否經過擴充,因為在我們處理過後的建立的執行緒才會有擴充。除此之外,我們還需要記錄原始結構體的大小,以便我們到時候獲取擴充套件的資料。


擴充_ETHREAD結構


接著,我們HOOK ObCreateObjectEx,在HOOK裡面判斷型別,並記錄原始大小。


擴充_ETHREAD結構


然後除錯一下:


擴充_ETHREAD結構


可以看到_ethread在我係統中的大小是0x8e0,然後測試一下,系統建立執行緒,結束執行緒都是正常的。


我們啟動一個程式,看下它的執行緒是否正確擴充了。


擴充_ETHREAD結構


附錄——我的系統版本


擴充_ETHREAD結構





原文作者: xiaofu(看雪ID)


原文連結:https://bbs.pediy.com/thread-246625.htm


轉載請註明:轉自看雪論壇。





看雪推薦:


1、[分享]【看雪安全開發者峰會2018】議題:自動逆向機器人


2、[原創]從NFC卡破解分析看ACR122U讀寫原理


3、[原創]看雪安全峰會—《從WPA2四次握手看KRACK金鑰重灌攻擊》


4、[原創]看雪.京東 2018CTF第十五題 智慧裝置 writeup


5、[原創]第十三題 NeuralCrackme Writeup




相關文章