網絡雙機內核調試 with IDA、KDNET、WinDbg、VirtualBox7


被調試機:windows 10 x64 10.0.19044.1288 in Virtualbox 7.1

調試機:windows 10 x64

不想再用com口了,想嘗試透過網路,據說快很多,所以用上kdnet.exe

kdnet.exe和VerifiedNICList.xml丟進虛擬機裡,不帶參數執行,用於檢查此機器的網卡是否支持網路調試

可以看到是支持的(試過virtio網卡,不支持,換回Intel PRO/1000 MT 82540EM就支持了)

        微軟官網有說支持那些網卡:Supported Ethernet NICs for Network Kernel Debugging in Windows 8.1 - Windows drivers | Microsoft Learn

然後再度運行kdnet.exe <HostComputerIPAddress> <YourDebugPort>

kdnet.exe 192.168.108.3 50000

        <YourDebugPort> UDP port,host監聽這個端口,host 會先accept guest,接著host也會connect 到guest,所以有防火牆的話要設雙向。host、guest誰先運行都可,當然想調試guest開機過程host要先運行,並且WinDbg要設定連上後自動中斷(切換快捷鍵是Ctrl+Alt+K)。

會得到一條命令,裡面包含key

host執行這條windbg命令就順利調試了

        無參數默認 -k 也就是kernel debug,也可以-bwk 也就是同時啟用bootmgr、winload、kernel  的debug,但我這邊是在WinDbg的GUI輸入port和key(File -> Kernel Debug -> NET),因為默認就-k,但不清楚圖形介面怎麼傳入-b -w等參數

當然,得確保guest和host網路是通的,我用host-only網路。

另外,如果WinDbg關閉不正常,可能會發生窗口已關閉但進程沒關閉的情況,導致下次連線時提示端口被占用

這時我們手動結束上個進程就行了

到這邊是WinDbg的部分,接下來是用IDA的部分。

        

IDA: //失敗了,請成功的人分享你的配置

IDA -> Debugger -> Attach -> Windbg debugger 

Connection string 根據前面kdnet給的資訊輸入 net:port=50000,key=xxxxx.xxxxx.xxxxx.xxxxx

接著 Debug options -> Set specific options 選 Kernel mode debugging

其他選項就按需選擇(例如Autoload PDB)

接著按OK就能開始調試了

版本配置資訊:

  • 目標機:windows 10 x64 10.0.19044.1288 (iot ltsc 2021)
  • WinDBG、kdnet:10.0.26100.2454
  • VirtualBox:7.1.4 r165100 (安裝同版本 Extention Pack)
  • 目標機網卡:Intel PRO/1000 MT 82540EM
  • IDA:ida64.exe 7.0.17.914 (IDA_Pro_v7.0_Portable)

IDA 9.0 能連上但IDA介面什麼都顯示不了,IDA View、Hex View、General registers什麼都沒,明明底下WinDbg命令都正常,可以F9但F7單步等等會直接40178崩潰,原本連F9都不行,一F9又立馬80000003中斷,後來莫名其妙又可以

IDA 8.3 portable、IDA 7.7 portable、IDA 7.5 portable 狀況同 IDA9.0,原因不明

換了IDA 7.0 portable一次通過,看來IDA這東西不求新但求穩定...

IDA 7.0 先運行的話會死當在那,但guest一開ida就正常了,應該只是在等guest連過來

IDA跳參數錯誤什麼的可能是port被佔用了(上次開的沒被釋放?)netstat -ano看誰在搞鬼

補充,IDA 7.0 也有問題!

調試開機過程時,多個窗口失效:stack view、IDA view 等等,手動指定RSP或RIP也沒效

調用堆棧(trace view)沒加載符號

F7、F8、F9正常但窗口顯示不了當前指令,用g也跳不過去(Command "JumpAsk" failed)

甚至後來F9也掛了,提示Command "ProcessStart" failed

重點,此時WinDbg"一切正常"

就IDA自己在那邊發癲...

環境變量的部分,符號目錄設在 _NT_SYMBOL_PATH

WinDbg的目錄設在Path,不然也可以改ida.cfg的DBGTOOLS(ida會使用該目錄下的dbgeng.dll)

dbgeng.dll的最新版本可以從  windbg.appinstaller 這個檔案裡解析出來

ida在用net:port的情形下似乎沒法在Debugging mode選 Kernel mode debugging with reconnect and initial break,但都能立刻中斷沒差,reconnect是限定com:port的參數嗎

想到再補充吧

只是弄個環境這麼折騰

主要參考:

IDA Pro 驱动调试(KDNET)

Supported Ethernet NICs for Network Kernel Debugging in Windows 8.1 - Windows drivers | Microsoft Learn

Set Up KDNET Network Kernel Debugging Automatically - Windows drivers | Microsoft Learn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值