1. 程式人生 > >搭建VS2017+WDK10+WinDBG雙機除錯Win7環境過程遇到的坑與解決(WinDBG找不到串列埠、security_cookie導致的藍屏、看不到除錯訊息等)

搭建VS2017+WDK10+WinDBG雙機除錯Win7環境過程遇到的坑與解決(WinDBG找不到串列埠、security_cookie導致的藍屏、看不到除錯訊息等)

一直使用Visual Studio + WDK的方式開發Windows驅動,最近想在VS2017下安裝WDK10開發驅動,結果遇到問題了,首先是沒法實現雙機除錯,然後是編譯出來的驅動在Win7平臺下一載入就藍屏,定位到是security_cookie的問題,緊接著又是生成的驅動與老版本Window相容性的問題,最後是KdPrint訊息看不到的問題。本文主要對遇到的這些問題和解決辦法進行記錄,主語虛擬機器中Win7的安裝等常規操作則略過,安裝好後的配置,搜一下“虛擬機器win7 雙機除錯”也都能解決。

搭建雙機除錯環境時的坑

WinDBG提示找不到對應串列埠,需將虛擬機器中的印表機刪除,該印表機預設佔用了COM1口:
這裡寫圖片描述

對應WinDBG引數為:

"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe" -b -k com:pipe,port=\\.\pipe\com_1,resets=0,reconnect -y SRV*E:\DBGSymbols*E:\MySymbols*http://msdl.microsoft.com/download/symbols

解決由於Security Cookie初始演算法不相容導致的載入時藍屏

用VS2017配合WDK10搭了個驅動開發環境,用其中的WDM模板寫了個NT式的HelloWorld驅動,編譯後拖到測試機裡執行居然藍屏了。故障定位是/GS機制造成的:

2018-07-24_170101

放到IDA裡仔細看看:

這裡寫圖片描述

很明顯,這裡就和0x0BB40E64E這個魔數槓上了,只要二者相等就直接藍屏。當然,直接關閉/GS這個編譯開關肯定能解決,但也就意味著程式可能被棧溢位攻擊。其主要問題是在Win7下,Loader將__security_cookie就是初始化成了這個值!將這個16進位制數搜一下,第一篇連結就解答了我們的疑惑。

同時也給出瞭解決方案:

  1. 手動編譯,手動設定KernelBufferOverflowLib的路徑:
msbuild /p:KernelBufferOverflowLib="C:\Program Files (x86)\Windows
Kits\8.1\Lib\win8\km\x64\BufferOverflowK.lib" /p:platform=x64 /p:Configuration="Win8 Release" myDriver.sln
  1. 用記事本開啟驅動專案的工程檔案(.vcproj)並新增下面的內容:
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib<KernelBufferOverflowLib>

然而我們是在VS下編譯,應該可以直接設定lib庫的路徑,試了一下,果然可以:

2018-07-24_172235

再看看生成的驅動程式中cookie初始化部分:

INIT:00404010 ; =============== S U B R O U T I N E =======================================
INIT:00404010
INIT:00404010 ; Attributes: library function bp-based frame
INIT:00404010
INIT:00404010 ___security_init_cookie proc near       ; CODE XREF: GsDriverEntry(x,x)+5↑p
INIT:00404010
INIT:00404010 InitialSeed     = _LARGE_INTEGER ptr -8
INIT:00404010
INIT:00404010                 mov     edi, edi
INIT:00404012                 push    ebp
INIT:00404013                 mov     ebp, esp
INIT:00404015                 push    ecx
INIT:00404016                 push    ecx
INIT:00404017                 mov     eax, ___security_cookie
INIT:0040401C                 mov     ecx, 0BB40E64Eh
INIT:00404021                 test    eax, eax
INIT:00404023                 jz      short loc_404029
INIT:00404025                 cmp     eax, ecx
INIT:00404027                 jnz     short loc_40403E
INIT:00404029
INIT:00404029 loc_404029:                             ; CODE XREF: ___security_init_cookie+13↑j
INIT:00404029                 rdtsc
INIT:0040402B                 xor     eax, offset ___security_cookie
INIT:00404030                 mov     ___security_cookie, eax
INIT:00404035                 jnz     short loc_40403E
INIT:00404037                 mov     eax, ecx
INIT:00404039                 mov     ___security_cookie, eax
INIT:0040403E
INIT:0040403E loc_40403E:                             ; CODE XREF: ___security_init_cookie+17↑j
INIT:0040403E                                         ; ___security_init_cookie+25↑j
INIT:0040403E                 not     eax
INIT:00404040                 mov     ___security_cookie_complement, eax
INIT:00404045                 mov     esp, ebp
INIT:00404047                 pop     ebp
INIT:00404048                 retn
INIT:00404048 ___security_init_cookie endp
INIT:00404048
INIT:00404048 ; ---------------------------------------------------------------------------

這個流程就比較正常了,如果和魔數值相等,就將當前時間和魔數異或,然後取反作為初始種子。再測試一下,沒問題了。

使用WDK10 生成相容舊版Windows的驅動

另外在搜尋過程中,還順帶搜到了一篇《vs2015 WDK10 生成 低於win7 的驅動》,可見這裡:

將其中重點摘錄如下:

  1. 定義兩個巨集:C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
  2. 驅動入口處加入:ExInitializeDriverRuntime(DrvRtPoolNxOptIn);

解決看不到KdPrint的問題

這樣是可以正常載入執行驅動了,然而卻看不到KdPrint的資訊。原因是需要在被除錯機中,對除錯過濾級別進行設定:

  1. 定位到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/
  2. 新建Key,名字為Debug Print Filter
  3. 然後在此Key下新建一個DWORD value ,名字為DEFAULT,然後設定值為0x00000008,

相關推薦

搭建VS2017+WDK10+WinDBG除錯Win7環境過程遇到的解決WinDBG串列security_cookie導致除錯訊息

一直使用Visual Studio + WDK的方式開發Windows驅動,最近想在VS2017下安裝WDK10開發驅動,結果遇到問題了,首先是沒法實現雙機除錯,然後是編譯出來的驅動在Win7平臺下一載入就藍屏,定位到是security_cookie的問題,緊接

之二:Win7-x64 + VMWare (Win7-x64) + WinDbg 除錯環境搭建

驅動開發入門 - 之二Win7-x64 + VMWare (Win7-x64) + WinDbg雙機除錯環境搭建 —— By EXP 2017-10-08 完整原文下載(轉載請註明出處,僅供分享學習,嚴禁用於商業用途) 1. 概述

windbg 除錯配置xp系統

進入虛擬機器C盤 修改boot.ini檔案屬性,然後 開啟boot.ini檔案,複製一下內容到boot.ini檔案 [boot loader] timeout=5 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating syst

過TesSafe反WinDbg除錯

貌似論壇裡面有關遊戲的貼子都很火,所以發篇帖子漲點人氣。正文:在論壇搜尋了下發現去年的時候有人發過一篇過TesSafe反雙機除錯的帖子,但是現在已經過時了,並且帖子裡面也沒提到怎麼處理被IAT HOOK的兩個函式。在這裡呢,我就給大家徹底的講明白吧。先開ARK工具看看遊戲幹了什麼。從圖片可以看到遊戲啟動的時

Windbg除錯

by zxy,Java/C++程式設計交流群:168424095      時隔兩年再次觸電Windows核心程式設計,肯定是把之前的先回憶一遍再進行程式設計了。看的還是那本書《寒江獨釣Windo

windbg除錯(本和VM虛擬機器)驅動程式

本文為在學習過程中的筆記,寫的不好請見諒. 在除錯核心驅動程式時,驅動程式被作業系統載入.而作業系統無法自己除錯自己.所以要用一臺計算機除錯另一臺計算機的作業系統,進而除錯核心驅動. 使用windbg對虛擬機器中的作業系統進行除錯之前,要先配置windbg和

windbg遠端除錯

 1. 拷貝要除錯的可執行檔案和對應的PDB符號到虛擬機器。  2. 在虛擬機器中啟動服務端,有2種方式。`windbg.exe -server tcp:port=8888 C:\Test.exe` 這種方式可以除錯main函式和程式的啟動過程。  `windbg.exe

windbg除錯時對R3函式下斷

對於剛接觸windbg的童鞋可能想在雙機除錯的環境下檢視某個使用者態函式的反彙編,可能會直接下直接斷點,這是會產生如下提示的錯誤 Bp expression ‘*******’ could not be resolved, adding deferred bp這是因為沒有切

ida藉助windbg 除錯核心

用windbg雙機除錯的話,因為是命令列類似於以程式設計來代替手工跟蹤的方式。習慣了用OD+ida分析的,肯定會不適應,於是就有ida的除錯方式可以代替它,我使用的是ida 5.5,可能有一些區別,希望碰到問題的朋友能夠一起解決,交流才能進步。 把配置檔案配置好的話,會

HDFS叢集搭建,高可用熱備模式(HA)自動切換,hdfs+zookeeper+journalnode,步驟分步原理詳解(適合初學者)

有寫的不對的地方,歡迎各位同學評論指正,博主會進行修改。 前言 作者也是初學hadoop,瞭解各元件的用途,並且專案中有些東西用不到,所以作者用最簡化的元件搭建,避免多餘資源的浪費,作者最初構想是zookeeper+hdfs搭建一個分散式檔案系統,不用yarn和ma

Jumpserver高可用環境部署筆記

inotify head LG end sts 時間 x11 註意 dex 之前在IDC部署了Jumpserver堡壘機環境,作為登陸線上服務器的統一入口。後面運行一段時間後,發現Jumpserver服務器的CPU負載使用率高達80%以上,主要是python程序對CPU的消

小米筆記本AIR13.3第一代(6200U+8GB+256GB,帶指紋)系統(WIN10+DEEPIN)安裝過程&避

自己裝雙系統時遇到的問題和解決方案 原系統是WIN10(1809版本),準備再加裝一個deepin。 第一步:下載映象檔案. 第二步:依個人所需,從硬碟中劃出一個空分割槽,不用新加捲。(我劃了37GB,因為我把硬碟分了C,D兩個盤,D盤137GB,所以再從D盤劃37GB

win7安裝homestead小結

具體步驟如下連結 問題1:vagrant up 後報錯Vagrant could not detect VirtualBox! 解決方法: 1、進入vagrant 安裝目錄查詢base.rb(F:\HashiCorp\Vagrant\embedded\gems\2.

核心除錯神器SystemTap — 更多功能原理

a linux trace/probe tool. 使用者空間 SystemTap探測使用者空間程式需要utrace的支援,3.5以上的核心版本預設支援。 對於3.5以下的核心版本,需要自己打相關補丁。 需要: debugging information for t

電腦改單到檔案問題的解決

之前電腦用的雙螢幕,後來改為了單螢幕,發現之前放到另一螢幕上的檔案雙擊開啟後看不到,似乎還停留在另一螢幕的位置處。 解決的方法如下: 1.開啟對應的檔案(此時不要點選其他地方,確保此檔案獲得焦點); 2.At+空格,此時會在螢幕右上方出現一個操作提示,沒有也沒有關係; 3

Win7除錯環境搭建之配置WinDbg

  轉:http://www.16boke.com/article/detail/173 環境:   主機:Win7 虛擬機器:VMware 11.1.0 build-2496824 虛擬機器內作業系統(又稱GuestOS):Win7 WinDbg:適

Win7除錯環境搭建之常見問題

轉:http://www.16boke.com/article/detail/175 環境:   主機:Win7 虛擬機器:VMware 11.1.0 build-2496824 虛擬機器內作業系統(又稱GuestOS):Win7 WinDbg:適合除錯機的相應位數

Win7除錯環境搭建除錯

  轉:http://www.16boke.com/article/detail/174 環境:   主機:Win7 虛擬機器:VMware 11.1.0 build-2496824 虛擬機器內作業系統(又稱GuestOS):Win7 WinDbg:適

Win7除錯環境搭建之配置GuestOS的啟動項

轉:http://www.16boke.com/article/detail/172 環境:   主機:Win7 虛擬機器:VMware 11.1.0 build-2496824 虛擬機器內作業系統(又稱GuestOS):Win7 WinDbg:適合除錯機的相應位數

Win7除錯環境搭建之配置VMware的管道虛擬串列

轉:http://www.16boke.com/article/detail/171 WinDbg除錯核心時,被設計為雙機除錯,需要另一臺計算機(除錯機)來除錯被除錯的計算機(被除錯機),WinDbg必須安裝在除錯機上,除錯機與被除錯機通過串列埠相連線。   環境: 主機: