三。如何hook
似乎這個問題並不大,shadow ssdt和ssdt本質上都是1個位址表,最為簡單的方法是把你的函式替換位址表的對應項,具體hook**甚至可以完全照抄ssdt的,這裡只說1下幾個偶遇到的小問題
1。win32k.sys不是常在記憶體的,如果不是gui執行緒,shadow ssdt位址無效
解決辦法:
1。在driverdispatch中hokk
driverdispatch是位於執行driveriocontrol的執行緒上下文的
我們使用1個gui執行緒去driveriocontrol
2。attachtoprocess
通常 我們使用cerss.exe
copy code
handle getcsrpid()
}zwclose(hobject);
}zwclose(process);}}
}exfreepool(handles);
return csrid;
}然後我們keattachprocess
copy code
ntstatus = pslookupprocessbyprocessid(getcsrpid(), &eprocess);
if (!nt_success( ntstatus ))
keattachprocess(eprocess);
3.使用mdl對映一塊不分頁記憶體,設定成可以寫入
不分頁記憶體 exallocatepool(nonpagedpool
即為不會被切換到pagefile的記憶體,是常駐在物理記憶體的,比較希缺,使用完畢以後記住釋放掉
參考regmon的**
copy code
pvoid *
regmonmapservicetable(
service_hook_descriptor **serviceishooked)}
return null;
};看起來shadowssdt何hook本身並沒有什麼難度
只要正確定位了位址,hook起來和ssdt完全一樣
unhook不在重複 完全抄ssdt的**即可
四。checkhook
hook用的人多了 難免出現重複hook的情況 為了實現和別人的東西和平共處,最好hook之前做個檢測
hook的方法是固定的,就那麼2種 改位址表 或者inline hook,我們分別來對待
1。修改位址表的hook
這個對付起來幾乎不用特別對待,只是你儲存的oldfunc是其他的程式hook函式所在的位址,判斷方法很簡單,看看這個位址在不在win32k的模組裡面,和平共處的辦法是你的myfunc裡面call別人的hook函式,當然 如果你不想要別人的hook了,直接搜尋到原始位址call之也是可行的
另外說1下 在別人的函式裡面搜尋原始位址 用mmisaddressvalid+ismodulewin32k
可以判斷(這個辦法好像是在mj文章裡面看到的 記不清了)
2。inlinehook
這個比較麻煩了 如果是修改前面5個位元組還好,直接替換處理都可以不改變
麻煩是函式中間地方被hook,盲目修改可能直接bsod了,這個需要1個反彙編引擎來幫助分析**位元組長度,海風大大的hooklib很不錯 可以完成這個功能
五,簡單說1下restore
copy code
pwin32k = getmodulehandle("win32k.sys");
sdtrva = &keservicedescriptortable->win32k.servicetable - pwin32k ;
w32kcopy = loadpefile("win32k.sys");
processrelocs(w32kcopy, pwin32k);
memcpy(&keservicedescriptortable->win32k.servicetable, w32kcopy + sdtrva, sdtsize);
不過 其實可以不用processrelocs處理
因為你可以使用lordpe檢視1下 win32k.sys的預設基址就是系統載入的基址
可以不需要processrelocs,不過為了更加方便和通用,這麼做也可以的
休息去咯---
C Primer Chapter One學習筆記
筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...
BroadcastReceiver學習筆記
需要注意 的是,不要在 onreceive 方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收 器中是不允許開啟執行緒的,當 onreceive 方法執行了較長時間而沒有結束時,程式就會報錯。有序broadcast,sendorderedbroadcast intent,null abort...
CDISC SDTM SE domain 學習筆記
整理翻譯自 sdtm ig 3.2 www.cdisc.org sdtm se subject elements 鞏固每個subject的epochs和elements的起止時間點.se對於有多個 時期的試驗有著重要的用處 如crossover試驗 se包含乙個subject從乙個element進入...