目錄html
debugport是在EPROCESS結構中的.調試時間會經過DebugPort端口將調試事件發送給ring3進行調試的.若是設置爲0.則ring3就沒法進行調試了
也就是說你不能單步了.等相關調試操做了.函數
若是作反調試.開啓一個線程.不斷的對這個DebugPort進行清零.
進而進行反調試.
思路:
1.找到當前進程的EPROCESS結構
2.經過硬編碼找到這個位置.(硬編碼)
若是是硬編碼.就須要本身根據系統去判斷.工具
在內核中調用這個函數後,它會檢測是否檢測是否掛載了windbg.
也是開啓線程.不斷調用.編碼
應用層能夠調用這兩個函數判斷spa
如在內核中進行HOOK線程
下面列出函數名debug
函數名字 | 做用 | HOOK後 |
---|---|---|
NtOpenThread | 建立內核線程 | 防止調試器在內部建立線程 |
NtOpenProcess | 打開進程 | 防止OD等調試工具在調試列表中看到 |
kiAttachProcess | 附加調試進程 | 防止被附加 |
NtReadVirtualMemory | 讀取虛擬內存 | 防止本身進程被讀內存(ReadProcessMemory) |
NtWriteVirtualMemory | 寫內存 | 防止內存被寫 |
KdReceivePacket | KDCOM.dll中Com串口接收數據的函數 | 你本身作過濾 |
KdSendPacket | KDCOM.dll中的Com串口發送數據函數 | HOOK上面跟這個函數.能夠防止雙機調試 |
上面說的是防,那麼咱們能夠進行攻擊調試
1.能夠對DebugPort下內存斷點.一旦有程序進行修改.就會被斷下.
從而找到對應的反調試代碼.對這個代碼進行patch.code
2.能夠自建調試體系.不走它的.進而繞過這個保護.htm
這個函數會檢測調試器.從而禁止被調試.
能夠在對應的這些函數地址下段點.而後對相關代碼進行patch.好比進行返回.
3.針對HOOK
若是是HOOK.咱們能夠藉助一些工具進行恢復.固然若是能夠你本身也能夠寫恢復代碼.這看你當時的需求了.
常見的就好比: pchunter PowerTools anti(安天)
進行反調試能夠進行加花.故意進行乾燒.
如:
push edx pop edx inc ecx dec ecx add esp,1 sub esp,1
直接對一個寄存器進行加.而後進行減.操做完根本不會影響寄存器的原值.
jmp LABEL db opcode LABEL
還有這種.中間加個db.可是他會影響你.
db Opcode跟後面指令結合就會錯亂.可是不會影響程序正常執行.
jz label jnz label db opcode Label
無論是否正確.都會進行強制跳轉.進而進行干擾.