內核反調試

1.鉤子

對調試器附加過程中所用到的函數掛鉤。

比如:NtOpenProcess、ZwDebugActiveProcess、RtlCreateUserThread、NtDebugContinue、

NtCreateDebugObject、NtWaitForDebugEvent 

調試事件採集函數:DbgkCreateThread、DbgkExitThread、DbgkExitProcess、DbgkMapViewOfSection、DbgkUnMapViewOfSection、DbgkForwardException、

DbgkpSendApiMessage等等

 

2.調試權限清除

清空debugobject.ValidAccessMask。這樣調試器就無法附加了,附加會出現ERROR_ACCESS_DENIED拒絕訪問

 

3.DebugPort

EPROCESS.DebugPort存放了調試對象的地址,只要該進程被調試,DebugPort一定有值。

可以自己創建一個沒用的調試對象放到DebugPort裏,這樣別人也無法調試你的進程

 

4. DbgSsReserved

調試器線程TEB結構的DbgSsReserved[1]字段中保存的調試對象句柄,可以遍歷線程,如果某個線程這個結構中存在值,那麼這個進程就一定在被調試

 

5. DbgkpProcessDebugPortMutex

在調試系統中,有用到ExAcquireFastMutex獲取一個調試同步的快速互斥體(DbgkpProcessDebugPortMutex)

如果修改這DbgkpProcessDebugPortMutex的值,就會使相關調試函數一直等待在ExAcquireFastMutex函數這裏。調試器卡死

 

6. ProtectedProcess

目標進程EPROCESS下面的ProtectedProcess成員爲TRUE,並且調試器進程EPROCESS下面的ProtectedProcessFALSE時,可以達到反調試效果。症狀是調試器無法打開你的進程。

 

7. ProcessDelete

目標進程EPROCESS下面的ProcessDelete成員爲TRUE,可以達到反調試效果,症狀是調試器無法附加你的進程。但是在進程退出時,要把ProcessDelete改變成FALSE,否則系統不會釋放進程。

 

8,改寫目標進程對象的對象頭內的TypeIndex爲一個其他值,這會導致調試器無法打開目標進程,從而達到反調試目的。注意在進程退出時要把TypeIndex值更改回來,否則會產生藍屏。

 

9,改寫內核全局指針變量DbgkDebugObjectType指向的內容,可以阻止調試器附加進程。症狀是調試器無法附加進程。

 

10,改寫目標進程線程對象ETHREADHideFromDebugger成員爲TRUE。當被調試時,當有調試事件產生,目標進程會崩潰。

 

11. 對調試對象類型的TotalNumberOfObjectsTotalNumberOfHandles進行檢測,判斷系統是否有調試器存在。

 

12.針對硬件斷點的檢測,可以獲取目標進程的線程KTHREADTrapFrame成員,這是一個陷阱幀_KTRAP_FRAME結構的指針,其中的DRX系列成員如果有值,就代表當前線程存在硬件斷點。

 

13. 針對硬件斷點的檢測,可以判定目標進程的線程KTHREADHeader成員的DebugActive是否有值,有值的話就代表當前線程存在硬件斷點,硬件斷點被windows設計爲針對某線程的,只針對當前進程的某個線程設置了值

 

14. 對系統所有進程的句柄表進行檢測,看看目標進程的進程對象、線程對象、或者一些調試對象是否存在,存在的話就代表目標進程已經被別的進程打開,可以選擇關閉相關句柄,也可根據情況退出進程。

 

15. 對目標線程獨享KTHREADSuspendCount成員進行改寫,使之不等於零。當調試器調試目標進程,被中斷時,由於目標進程線程的SuspendCount不爲零,所以目標進程的線程就無法被暫停,那麼調試器實際就等於沒有中斷目標進程,這會使調試器產生錯誤行爲。

線程的SuspendCount必須等於0才能被暫停。如果等於1,那麼在od中下斷點,當程序執行到斷點時,進程會暫停,進程被暫停,等於暫停目標進程的所有線程。但是有些線程SuspendCount=1,會繼續運行

 

16.IDT HOOK
比如對3號中斷進行hook,就可以讓軟件斷點不起作用

 

17.打開被調試進程的時候,會返回句柄,驅動中可以註冊回調,過濾句柄權限
繞過方法1:把權限改回來,修改GrantedAccess0x1FFFFF(最高權限)。
繞過方法2:通過系統進程,比如lsass.exe,這個系統進程中有打開受保護的進程,並且具有高權限,具有查詢、讀寫進程等功能。具體可參考鏈接:https://bbs.pediy.com/thread-252710.htm

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章