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下面的ProtectedProcess爲FALSE時,可以達到反調試效果。症狀是調試器無法打開你的進程。
7. ProcessDelete
目標進程EPROCESS下面的ProcessDelete成員爲TRUE,可以達到反調試效果,症狀是調試器無法附加你的進程。但是在進程退出時,要把ProcessDelete改變成FALSE,否則系統不會釋放進程。
8,改寫目標進程對象的對象頭內的TypeIndex爲一個其他值,這會導致調試器無法打開目標進程,從而達到反調試目的。注意在進程退出時要把TypeIndex值更改回來,否則會產生藍屏。
9,改寫內核全局指針變量DbgkDebugObjectType指向的內容,可以阻止調試器附加進程。症狀是調試器無法附加進程。
10,改寫目標進程線程對象ETHREAD的HideFromDebugger成員爲TRUE。當被調試時,當有調試事件產生,目標進程會崩潰。
11. 對調試對象類型的TotalNumberOfObjects和TotalNumberOfHandles進行檢測,判斷系統是否有調試器存在。
12.針對硬件斷點的檢測,可以獲取目標進程的線程KTHREAD下TrapFrame成員,這是一個陷阱幀_KTRAP_FRAME結構的指針,其中的DRX系列成員如果有值,就代表當前線程存在硬件斷點。
13. 針對硬件斷點的檢測,可以判定目標進程的線程KTHREAD下Header成員的DebugActive是否有值,有值的話就代表當前線程存在硬件斷點,硬件斷點被windows設計爲針對某線程的,只針對當前進程的某個線程設置了值
14. 對系統所有進程的句柄表進行檢測,看看目標進程的進程對象、線程對象、或者一些調試對象是否存在,存在的話就代表目標進程已經被別的進程打開,可以選擇關閉相關句柄,也可根據情況退出進程。
15. 對目標線程獨享KTHREAD下SuspendCount成員進行改寫,使之不等於零。當調試器調試目標進程,被中斷時,由於目標進程線程的SuspendCount不爲零,所以目標進程的線程就無法被暫停,那麼調試器實際就等於沒有中斷目標進程,這會使調試器產生錯誤行爲。
線程的SuspendCount必須等於0才能被暫停。如果等於1,那麼在od中下斷點,當程序執行到斷點時,進程會暫停,進程被暫停,等於暫停目標進程的所有線程。但是有些線程SuspendCount=1,會繼續運行
16.IDT HOOK
比如對3號中斷進行hook,就可以讓軟件斷點不起作用
17.打開被調試進程的時候,會返回句柄,驅動中可以註冊回調,過濾句柄權限
繞過方法1:把權限改回來,修改GrantedAccess爲0x1FFFFF(最高權限)。
繞過方法2:通過系統進程,比如lsass.exe,這個系統進程中有打開受保護的進程,並且具有高權限,具有查詢、讀寫進程等功能。具體可參考鏈接:https://bbs.pediy.com/thread-252710.htm