使用 VMware + win10 + VirtualKD + windbg 從零搭建雙機內核調試環境

2021-02-20 看雪學院

當我們沒有兩臺物理機時,又想做雙機內核調試怎麼辦?當然是裝虛擬機啦!本文總結了使用VMware15.5 + win10 + virtualkd + windbg搭建雙機內核調試環境。
VMware版本:15.5 pro。可以到VMware 官網下載地址下載最新版本。我的物理主機系統:Win10 1909。其它版本的Windows也可以    ,VMware15.5最低支持Win7系統。虛擬機系統鏡像:win10 1809 x64。其它版本的系統也可以。我們可以在msdn i tell you上面找到各個版本的windows官方鏡像。除了系統鏡像,還包括其它很多工具的官方鏡像,比如vs,office等。windbg版本:10.0.18362.1,其它版本的也可以。windbg包含在windows sdk中。可以到微軟官網 SDK 下載地址下載。如果只需要windbg,推薦下載.exe形式的安裝包。在安裝的時候,可以只勾選Debugging Tools for Windows。下載VMware到本地後,直接雙擊即可安裝,一路點擊下一步即可。需要注意以下兩點:儘量下載最新版本的VMware,早期版本的VMware在win10 1909上可能有兼容性問題。安裝好VMware後,就可以安裝系統鏡像了。通過文件(F) -> 新建虛擬機(N)即可開始新建虛擬機嚮導。一般我們通過安裝程序光碟映像文件(iso)(M)的形式選擇下載好的系統鏡像安裝,然後一路下一步(N)即可。安裝完成後,可以啟動了。但是可能遇到一些問題,我做了簡單的總結。重啟進入BIOS,打開Intel Virutal Technology,按F10保存退出。提示VMware Workstation與Device/Credential Guard不兼容。強烈建議先檢查下Hyper-V是否開啟,如果開啟了,請先關閉Hyper-V。如果關閉Hyper-V後還是出現上圖的提示。請參考禁用 Device/Credential Guard 的微軟官方文檔。點擊工具下載連結,下載相應的腳本文件到本地。如果我們的系統不是英文系統,按照提示改變腳本裡的*$OSArch = $(gwmi win32_operatingsystem).OSArchitecture為$OSArch = $((gwmi win32_operatingsystem).OSArchitecture).tolower()然後以管理員權限執行DG_Readiness_Tool_v3.6.ps1 -Disable -AutoReboot即可。-AutoReboot表示自動重啟系統,根據自己的需要指定。重啟後,會有提示是否要真的禁用此特性。按Windows鍵或者F3鍵禁用,按Esc跳過。順利安裝完系統過後,我們就可以開始進行雙機內核調試了。如果我們希望通過虛擬串口的形式連接,我們在系統設置前,一定要注意:VMware中的印表機會佔用默認的串口 1。如果不移除印表機,我們新建的串口會是串口 2(這樣,我們在被調試系統中設置的時候,需要設定debugport的值為2)。當然,我們可以移除印表機,然後新建串口,這樣新建的串口就是默認的串口 1了。我以保留印表機,使用COM2為例,錄製了一份屏幕錄像。這裡對整個操作過程做一個簡要描述:新建串口,因為印表機佔用了串口 1,所以我們新建的串口是串口 2。設置pipe參數,我設置的是\\.\pipe\bcn_com,其他參數默認即可。
bcdedit /debug onbcdedit /dbgsettings serial debugport:1 baudrate:115200

重啟虛擬機系統,發現連接不上。因為我們新建的串口是串口 2,而我們在虛擬機系統裡設置的是串口 1。
bcdedit /debug onbcdedit /dbgsettings serial debugport:2 baudrate:115200

最後,還演示了windbg通過命令行直接連接。命令行如下:
windbg.exe -k com:pipe,port=\\.\pipe\bcn_com,reconnect

經常做雙機內核調試的小夥伴兒一定對VirtualKD不陌生。可以大大提高雙機內核調試的速度,可謂神器。幾年前,用VirtualKD搭建雙機內核調試環境很簡單。沒想到這次居然各種連接不上。通過google搜索關鍵字VMware15 VirtualKD,在VirtualKD github issues和看雪論壇『求助問答』的帖子看到已經有小夥伴兒遇到這個問題了。應該是VirtualKD3.0與VMware15.5不兼容。真是個壞消息,不過也有好消息 —— 已經有大佬解決了這個問題,github上對應的倉庫是VirtualKD-Redux。在查找解決方案的過程,發現有人遇到另外一個問題。在虛擬機裡執行bcdedit /debug on失敗,提示值被保護,如下圖:VirutalKD-Redux的使用方法和VirutalKD一樣,簡要步驟如下:在調試主機端運行vmmon64.exe,點擊Debugger Path...選擇調試器路徑。把target64拷貝到虛擬機中(如果是32位系統,請拷貝target32)。在虛擬機中執行target64目錄下的vminstall.exe安裝VirtualKD-Redux。重啟虛擬機系統,選擇新建立的Entry,並且按F8選擇禁用強制籤名。如果順利,調試器會自動彈出並連接到被調試系統(因為Start debugger automatically默認是勾選狀態)。如果調試器沒自動彈出,或者我們意外的關閉了調試器,我們可以通過點擊Run Debugger按鈕,手動啟動調試器。當我們執行一些命令的時候(比如,!thread),需要符號文件的幫助。我們可以通過_NT_SYMBOL_PATH環境變量設置符號路徑。如果還沒有設置,可以在windbg中執行.symfix path/to/symbol_cache自動設置微軟符號伺服器為上遊符號伺服器。當需要符號時,windbg會先到path/to/symbol_cache中查找符號,如果找不到,會繼續到微軟符號伺服器上查找,如果在微軟符號伺服器上找到了,會緩存到path/to/symbol_cache,然後從path/to/symbol_cache加載符號。溫馨提示:symfix命令會刪除windbg中現有的符號路徑設置。目前,好像需要科學上網才能成功連接微軟符號伺服器。使用VMware前,最好禁用Hyper-V,禁用Security Boot,開啟Intel VT-x。一定要注意,VMware默認帶的印表機會佔用串口 1,如果不刪除印表機就新建串口的話,新建的串口是串口 2。VirtualKD3.0還不支持VMware15.5,我們可以使用VirtualKD-Redux。執行.symfix path/to/symbol_cache使用微軟符號伺服器。

VirtualKD official install tutorial

"VMware Workstation and Device/Credential Guard are not compatible" error in VMware Workstation on Windows 10 host (2146361)

Setting up kernel debugging (VirtualKD)

VMware+Windgb+Win7內核驅動調試

看雪ID:編程難

https://bbs.pediy.com/user-873494.htm 

*本文由看雪論壇 編程難 原創,轉載請註明來自看雪社區。

好書推薦

相關焦點

  • 本地內核調試神器 —— livekd 使用總結
    雙機內核調試(需要另外一臺機器來做雙機調試)2. 讓系統崩潰(可以使用 sysinternals中的 notmyfault 或者 使用快捷鍵讓系統崩潰,並設置 系統崩潰的時候自動保存轉儲文件)(有點小題大作了)。3. 使用 sysinternals 中的 livekd,不需要特殊設置,綠色環保。以上幾種方案中,使用 livekd 最方便快捷。
  • 如何搭建一個跨虛擬機 WinDbg 調試環境
    搭建跨虛擬機 WinDbg 調試環境有點麻煩,我將記錄一下搭建方法。
  • 想知道你的系統內核在幹什麼嗎?看這裡—— Livekd
    有時候我們非常想知道當前系統內核的一些狀態,比如查看當前系統加載了哪些驅動,查看某個進程外 COM 調用卡在哪裡了,等等。如果我們可以調試系統內核,或者抓取一個系統轉儲來做事後調試,該多好啊。雙機內核調試(需要另外一臺機器來做雙機調試)讓系統崩潰(可以使用 sysinternals中的 notmyfault 或者 使用快捷鍵讓系統崩潰,並設置系統崩潰的時候自動保存轉儲文件)(有點小題大作了)。使用 sysinternals 中的 livekd,不需要特殊設置,綠色環保。
  • 使用 GDB + Qemu 調試 Linux 內核
    本文採用的編譯方式如下,在一臺 16 核 CentOS 7.7 的機器上進行內核源碼相關的編譯(主要是考慮編譯效率),調試則是基於 VirtualBox 的 Ubuntu 20.04 系統中,採用 Qemu + GDB 進行單步調試,網上查看了很多文章,在最終進行單步跟蹤的時候,始終不能夠在斷點處停止,進行過多次嘗試和查詢文檔,最終發現需要在內核啟動參數上添加 nokaslr ,本文是對整個搭建過程的總結
  • MSDN系列(41)--調試Windows服務
    為了避免將來這種破壞引起誤會,cdb乾脆禁止在ibp處使用ba設置硬體斷點,如果嘗試ba命令,會提示到了exentry之後才可以設硬體斷點。其實在@$exentry之前很多地方都可以正常使用ba設置硬體斷點,比如"sxe cpr"、"sxe ld:ntdll"命中時、流程到達ntdll!RtlUserThreadStart時,這幾處都可以ba。
  • 內核調試神器SystemTap — 簡介與使用(一)
    簡介 SystemTap是我目前所知的最強大的內核調試工具,有些傢伙甚至說它無所不能:)官網:https://
  • windbg命令詳解(二)
    main,. j://mydriver//mydriver.clsf指定一個源文件為當前源文件,使用lsc可顯示當前指定的源文件ls可顯示源文件的代碼。Lsf可以使用全路徑,如果源路徑已經設置,也可以直接指定源文件名稱。
  • VMware vSphere 6.7 虛擬化搭建及配置完整詳細手冊 | 周末送資料
    >本文檔實驗的環境是用 VMware workstation 14 搭建的。3 、 使用 用 Acronis BR  遷移 linux  物理機首先為什麼要使用第三方的工具來遷移,在使用 vmware convert 無法遷移 linux 物理機時,有多種情況,比如 linux 引導方式為 LILO 的引導方式,而 vmware convert 僅支持 GRUB引導,不支持 LILO 引導。所以我們就不得不藉助第三方工具來遷移了。
  • 使用QEMU chroot進行固件本地調試
    QEMU是我們在調試一些不同架構的程序時經常使用的虛擬機軟體。
  • beaglebone AI環境搭建與運行
    beaglebone AI環境搭建與運行1.前言2.beaglebone AI 開發板特性3.beaglebone AI開發環境搭建3.1 硬體連接3.2 arm 交叉編譯工具鏈3.3 編譯uboot4.beaglebone AI啟動方式
  • 在調試裡看NV驅動棧溢出導致的連環死鎖
    第三次發生是今天,一方面考慮到周五要做的公開課,另一方面考慮到,已經忍了兩次,第三次不能忍了,是可忍孰不可忍:-)    這一次掛死的是WinDBG,老雷喚起它是要做內核調試的,目標機凍結,熟悉的int 3出現,一切順利,但是WinDBG的命令行始終處於BUSY狀態。
  • 使用 Docker 搭建 Laravel 本地環境
    本文就介紹如何使用 docker 搭建 Laravel 本地環境。安裝 docker首先安裝 docker。(特別說明:它不僅用於 Laravel 環境搭建,而且支持所有其他 PHP 框架,它就是一整套 PHP 的環境。)
  • windbg命令詳解(一)
    比如把0x0039ba80地址上的數據用MyCls類型來顯示:0:000> dt 0x0039ba80 MyCls+0x000 str : 0x00416648 'abcd'+0x004 inobj : innner21、  bp   設定調試斷點(1)比如可以這樣寫:0:018>bp notepad!
  • 虛擬機VMware 16 下載-->安裝-->激活
    1、虛擬機介紹虛擬機:通過軟體在作業系統上模擬出整個電腦的硬體系統,這樣就能在隔離的環境中,虛擬出完整的計算機系統。可以在Windows原系統中虛擬出另一個系統,虛擬出的系統可以是win XP、win7、win10。
  • k8s系列第八篇~k8s集群環境搭建
    前七篇文章帶大家初步了解了kubernetes資源對象,本文主要帶大家搭建kubernetes集群環境。
  • 用Hexo搭建博客-搭建環境生成hexo靜態頁面
    1:安裝node下載:https://nodejs.org/en/download/端開發框架和環境都是需要 Node.js ,先安裝
  • VMware vRealize Automation部署之4--初始化配置
    其中NSX為網絡基礎平臺,vRealize和vCD(vCloudDirector)和NSX深度結合,其發布的虛擬機全部使用使用NSX虛擬化網絡。下圖為搭建的環境的截圖,相對比較複雜。該環境我也會複印一份到我自己家裡的機器,即後繼的公眾號的以此內容展開,歡迎大家關注本公眾號。
  • 內核進擊之旅--HEVD--stackoverflow
    Windows內核攻擊。地址是https://github.com/hacksysteam/HackSysExtremeVulnerableDriver首先需要編譯驅動程序,在前一篇中安裝環境和編譯已經描述清楚了。一開始我編譯的平臺是Win7x86。後面再介紹x64,二者相差不大。編譯完成後,使用OSR driver Loader在目標系統中加載驅動,加載完成後開始分析。
  • 第1天:Python 環境搭建
    千裡之行始於足下,今天我們先來學習 Python 環境搭建。Python 介紹Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/)是一種廣泛使用的解釋型、高級編程、通用型程式語言,由吉多·范羅蘇姆創造,第一版發布於1991年。可以視之為一種改良(加入一些其他程式語言的優點,如面向對象)的 LISP。
  • 5分鐘在虛擬機中搭建Linux開發環境
    背景在使用Windows 10開發的過程之中避免不了使用Linux環境,比如裝個資料庫、裝個docker跑開發環境、比如做一些實驗、裝一些雜七雜八的軟體不影響宿主機環境