日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

64位内核开发第五讲,调试与反调试

發布時間:2025/4/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 64位内核开发第五讲,调试与反调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 反調試與反反調試
    • 一丶反調試的幾種方法
      • 1.DebugPort端口清零
      • 2.KdDisableDebugger
      • 3.ring3下的 isDebuggerpresent和CheckRemoteDebuggerPresent
      • 4.使用Hook手段.
    • 二丶反反調試
      • 1.針對DebugPort
      • 2.針對 KdDisableDebugger
      • 3.花指令

反調試與反反調試

一丶反調試的幾種方法

1.DebugPort端口清零

debugport是在EPROCESS結構中的.調試時間會通過DebugPort端口將調試事件發送給ring3進行調試的.如果設置為0.則ring3就無法進行調試了
也就是說你不能單步了.等相關調試操作了.

如果做反調試.開啟一個線程.不斷的對這個DebugPort進行清零.
進而進行反調試.
思路:
1.找到當前進程的EPROCESS結構
2.通過硬編碼找到這個位置.(硬編碼)
如果是硬編碼.就需要自己根據系統去判斷.

2.KdDisableDebugger

在內核中調用這個函數后,它會檢測是否檢測是否掛載了windbg.
也是開啟線程.不斷調用.

3.ring3下的 isDebuggerpresent和CheckRemoteDebuggerPresent

應用層可以調用這兩個函數判斷

4.使用Hook手段.

如在內核中進行HOOK

下面列出函數名

函數名字作用HOOK后
NtOpenThread創建內核線程防止調試器在內部創建線程
NtOpenProcess打開進程防止OD等調試工具在調試列表中看到
kiAttachProcess附加調試進程防止被附加
NtReadVirtualMemory讀取虛擬內存防止自己進程被讀內存(ReadProcessMemory)
NtWriteVirtualMemory寫內存防止內存被寫
KdReceivePacketKDCOM.dll中Com串口接收數據的函數你自己做過濾
KdSendPacketKDCOM.dll中的Com串口發送數據函數HOOK上面跟這個函數.可以防止雙機調試

二丶反反調試

上面說的是防,那么我們可以進行攻擊

1.針對DebugPort

1.可以對DebugPort下內存斷點.一旦有程序進行修改.就會被斷下.
從而找到對應的反調試代碼.對這個代碼進行patch.

2.可以自建調試體系.不走它的.進而繞過這個保護.

2.針對 KdDisableDebugger

這個函數會檢測調試器.從而禁止被調試.

可以在對應的這些函數地址下段點.然后對相關代碼進行patch.比如進行返回.

3.針對HOOK
如果是HOOK.我們可以借助一些工具進行恢復.當然如果可以你自己也可以寫恢復代碼.這看你當時的需求了.
常見的就比如: pchunter PowerTools anti(安天)

3.花指令

進行反調試可以進行加花.故意進行干燒.

如:

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

不管是否正確.都會進行強制跳轉.進而進行干擾.

轉載于:https://www.cnblogs.com/iBinary/p/10990674.html

總結

以上是生活随笔為你收集整理的64位内核开发第五讲,调试与反调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。