64位内核开发第五讲,调试与反调试
目錄
- 反調(diào)試與反反調(diào)試
- 一丶反調(diào)試的幾種方法
- 1.DebugPort端口清零
- 2.KdDisableDebugger
- 3.ring3下的 isDebuggerpresent和CheckRemoteDebuggerPresent
- 4.使用Hook手段.
- 二丶反反調(diào)試
- 1.針對DebugPort
- 2.針對 KdDisableDebugger
- 3.花指令
- 一丶反調(diào)試的幾種方法
反調(diào)試與反反調(diào)試
一丶反調(diào)試的幾種方法
1.DebugPort端口清零
debugport是在EPROCESS結(jié)構(gòu)中的.調(diào)試時間會通過DebugPort端口將調(diào)試事件發(fā)送給ring3進行調(diào)試的.如果設(shè)置為0.則ring3就無法進行調(diào)試了
也就是說你不能單步了.等相關(guān)調(diào)試操作了.
如果做反調(diào)試.開啟一個線程.不斷的對這個DebugPort進行清零.
進而進行反調(diào)試.
思路:
1.找到當前進程的EPROCESS結(jié)構(gòu)
2.通過硬編碼找到這個位置.(硬編碼)
如果是硬編碼.就需要自己根據(jù)系統(tǒng)去判斷.
2.KdDisableDebugger
在內(nèi)核中調(diào)用這個函數(shù)后,它會檢測是否檢測是否掛載了windbg.
也是開啟線程.不斷調(diào)用.
3.ring3下的 isDebuggerpresent和CheckRemoteDebuggerPresent
應(yīng)用層可以調(diào)用這兩個函數(shù)判斷
4.使用Hook手段.
如在內(nèi)核中進行HOOK
下面列出函數(shù)名
| NtOpenThread | 創(chuàng)建內(nèi)核線程 | 防止調(diào)試器在內(nèi)部創(chuàng)建線程 |
| NtOpenProcess | 打開進程 | 防止OD等調(diào)試工具在調(diào)試列表中看到 |
| kiAttachProcess | 附加調(diào)試進程 | 防止被附加 |
| NtReadVirtualMemory | 讀取虛擬內(nèi)存 | 防止自己進程被讀內(nèi)存(ReadProcessMemory) |
| NtWriteVirtualMemory | 寫內(nèi)存 | 防止內(nèi)存被寫 |
| KdReceivePacket | KDCOM.dll中Com串口接收數(shù)據(jù)的函數(shù) | 你自己做過濾 |
| KdSendPacket | KDCOM.dll中的Com串口發(fā)送數(shù)據(jù)函數(shù) | HOOK上面跟這個函數(shù).可以防止雙機調(diào)試 |
二丶反反調(diào)試
上面說的是防,那么我們可以進行攻擊
1.針對DebugPort
1.可以對DebugPort下內(nèi)存斷點.一旦有程序進行修改.就會被斷下.
從而找到對應(yīng)的反調(diào)試代碼.對這個代碼進行patch.
2.可以自建調(diào)試體系.不走它的.進而繞過這個保護.
2.針對 KdDisableDebugger
這個函數(shù)會檢測調(diào)試器.從而禁止被調(diào)試.
可以在對應(yīng)的這些函數(shù)地址下段點.然后對相關(guān)代碼進行patch.比如進行返回.
3.針對HOOK
如果是HOOK.我們可以借助一些工具進行恢復(fù).當然如果可以你自己也可以寫恢復(fù)代碼.這看你當時的需求了.
常見的就比如: pchunter PowerTools anti(安天)
3.花指令
進行反調(diào)試可以進行加花.故意進行干燒.
如:
push edx pop edx inc ecx dec ecx add esp,1 sub esp,1直接對一個寄存器進行加.然后進行減.操作完根本不會影響寄存器的原值.
jmp LABEL db opcode LABEL還有這種.中間加個db.但是他會影響你.
db Opcode跟后面指令結(jié)合就會錯亂.但是不會影響程序正常執(zhí)行.
jz label jnz label db opcode Label不管是否正確.都會進行強制跳轉(zhuǎn).進而進行干擾.
轉(zhuǎn)載于:https://www.cnblogs.com/iBinary/p/10990674.html
總結(jié)
以上是生活随笔為你收集整理的64位内核开发第五讲,调试与反调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Day16 os模块、time模块、ra
- 下一篇: 上海房價