驅動的載入有幾種方式,檢視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檔案的除錯 在除錯別人的驅動程式時,也就是自己只有...