被調試機: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的參數嗎
想到再補充吧
只是弄個環境這麼折騰
主要參考:
Set Up KDNET Network Kernel Debugging Automatically - Windows drivers | Microsoft Learn