搭建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機制造成的:
放到IDA裡仔細看看:
很明顯,這裡就和0x0BB40E64E這個魔數槓上了,只要二者相等就直接藍屏。當然,直接關閉/GS這個編譯開關肯定能解決,但也就意味著程式可能被棧溢位攻擊。其主要問題是在Win7下,Loader將__security_cookie就是初始化成了這個值!將這個16進位制數搜一下,第一篇連結就解答了我們的疑惑。
同時也給出瞭解決方案:
- 手動編譯,手動設定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
- 用記事本開啟驅動專案的工程檔案(.vcproj)並新增下面的內容:
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib<KernelBufferOverflowLib>
然而我們是在VS下編譯,應該可以直接設定lib庫的路徑,試了一下,果然可以:
再看看生成的驅動程式中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 的驅動》,可見這裡:
將其中重點摘錄如下:
- 定義兩個巨集:C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
- 驅動入口處加入:ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
解決看不到KdPrint的問題
這樣是可以正常載入執行驅動了,然而卻看不到KdPrint的資訊。原因是需要在被除錯機中,對除錯過濾級別進行設定:
- 定位到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/
- 新建Key,名字為Debug Print Filter
- 然後在此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必須安裝在除錯機上,除錯機與被除錯機通過串列埠相連線。 環境: 主機: