windbg攔截驅動載入

2021-07-23 19:26:20 字數 2113 閱讀 8739

驅動的載入有幾種方式,檢視createservice就可以知道。

1、service_boot_start = 0x00000000,被系統loader載入,這類驅動是最早載入的。驅動檔案必須放在c:\windows\system32\drivers目錄下,因為此時系統只能讀登錄檔,不能開啟檔案,不能打出除錯資訊。看了下面的分析就清楚了。

2、service_system_start = 0x00000001,系統初始化完成後才載入的

3、service_demand_start = 0x00000003,手動載入

(本文作者附註:原文作者可能是通過sc create service的方式載入legend驅動,對於wdm型別--即支援pnp的驅動

也通過nt!mmloadsystemimage載入驅動)

環境:win7 32bit,

目標:攔截hookport.sys

方法:通常攔截驅動,可以在nt!mmloadsystemimage下斷點。

1、顯示驅動全名並顯示驅動基址:

bp nt!mmloadsystemimage".if(1).else"

poi(esp+0x18)就是儲存驅動基址的指標imagebaseaddress

2、nt!mmloadsystemimage返回後,dd imagebaseaddress,顯示的就是驅動基址

3、給驅動起點函式下斷點

bp 驅動基址+poi(poi(驅動基址+0x3c)+ 驅動基址+0x28)

4、執行,就停在驅動的起點函式

但是hookport.sys就不能用上面的方法來,因為它的載入型別是service_boot_start,如下圖:

通過研究系統,可以用下面的斷點:

下斷點bp nt!pnpinitializebootstartdriver".if(1).else",此時可以顯示驅動的登錄檔資訊

斷下來後,在nt!iopinitializebuiltindriver裡面找第乙個call    dword ptr [eax],

下斷點即可,跟進去就是驅動的入口點了

其實可以計算  init:007a79cf                 call    dword ptr [eax]  與nt的rva,直接下斷點就可以了  bp nt基址+0x003a79cf

kd> sxe ld:hookport.sys

kd> g

nt!dbgloadimagesymbols+0x47:

83a55fa6 cc int 3

kd> lmvm hookport

start end module name

8f263000 8f284e80 hookport (deferred)

kd> bp 8f263000+poi(poi(8f263000+3c)+8f263000 +28)

kd> g

Windbg載入驅動藍屏分析

1.open crash dump 2.image file path 載入 驅動pdb 3.1 在有pdb的情況下 analyze v之後得到的藍屏的原因 probablycaused by 這裡指明了藍屏引起的驅動 followup ip 引起藍屏的實際 context 藍屏時候的現場環境 暫存...

windbg 除錯驅動設定斷點

在對windows的驅動做雙機除錯時,總會需要在自己編寫的驅動 上設定斷點。1 這需要首先,在windbg上設定工作空間 workspace 在這步裡面,需要將自己生成的符號檔案,能夠讓windbg搜尋到,即將自己符號檔案的路徑加入到windbg的symbol path裡 需要將自己編寫的原始檔,能...

Windbg除錯核心驅動方法

一般說來,調速驅動程式分為兩種 1.存在pdb檔案的除錯 這裡的pdb檔案其實就是除錯符號檔案,假如我們除錯的這樣的檔案,我們可以再windbg中使用 bp 驅動名 driverentry,這個時候當載入驅動的時候,程式就會斷在入口了。2.沒有pdb檔案的除錯 在除錯別人的驅動程式時,也就是自己只有...