一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

實戰(zhàn)windbg調(diào)試驅(qū)動例子

 廚房阿四 2009-11-06

這幾天上網(wǎng)查了一些關(guān)于WINDBG的資料,發(fā)現(xiàn)很多朋友在尋找關(guān)于WINDBG的教程.
(呵呵,我也在尋找有關(guān)于此的一些材料)
本來是一想寫關(guān)于sr.sys的分析的,不過覺得始終不妥,一句老話,授人以魚不
如授人以漁,所以這篇文章以sr.sys分析作為示例,不過我們的重點卻是要放在
WINDBG的使用上.

首先來介紹一下搭建的環(huán)境:
WINDBG:Windows Debugger    Version 6.2.0013.1
Vmware-workstation-4.5
Target Computer:winxp sp1 free
Host Computer:win2003

 

關(guān)于VM和WINDBG的基本配置請參考相關(guān)的文檔.(在這里給各位一篇不錯的文章,
就是jiurl老大寫的<<利用VM使用windbg>>)

 

好了,廢話少說,讓我們整點干的:
既然我們要分析的是sr.sys,當(dāng)然我們先要看的就是目標(biāo)機(jī)加載的驅(qū)動程序的位置了,
sr.sys是XP系統(tǒng)系統(tǒng)還原的主體部分,它是建立在NTFS文件分區(qū)格式下的一個驅(qū)動,
說白了sr.sys其實就是ntfs.sys的filter driver.
kd>!drivers
Base         Code Size        Data Size        Image Name          Creation Time
……
fc3ed000     de80 (    56 k)    2c00 ( 11 k)         sr.sys    Thu Aug 29 16:17:56 2002
……
我查找了與sr.sys相關(guān)的資料,不過沒找到什么有用的東西,最有用的可能就是MSDN里面
關(guān)于WINXP SYSTEM RESTORE的相關(guān)介紹了,不過實在是沒有什么幫助,看來只有自己動手
豐衣足食了,首先我們先來大概的分析一下代碼,然后由此擴(kuò)展開來.
Kd>u fc3ed000
sr!SrMakeContextUninteresting <PERF> (sr+0x0):
fc3ed000 4d                 dec       ebp
sr!SrMakeContextUninteresting <PERF> (sr+0x1):
fc3ed001 5a                 pop       edx
sr!SrMakeContextUninteresting <PERF> (sr+0x2):
fc3ed002 90                 nop
sr!SrMakeContextUninteresting <PERF> (sr+0x3):
fc3ed003 0003               add       [ebx],al
sr!SrMakeContextUninteresting <PERF> (sr+0x5):
fc3ed005 0000               add       [eax],al
sr!SrMakeContextUninteresting <PERF> (sr+0x7):
fc3ed007 000400             add       [eax+eax],al
sr!SrMakeContextUninteresting <PERF> (sr+0xa):
fc3ed00a 0000               add       [eax],al
sr!SrMakeContextUninteresting <PERF> (sr+0xc):
fc3ed00c ffff               ???

 

kd>u
……
我們向后翻查,找到下面的內(nèi)容:
kd>
sr!DriverEntry+0x12:
fc3fbcd6 59                 pop       ecx
fc3fbcd7 33c0               xor       eax,eax
fc3fbcd9 8b3d40f03efc       mov       edi,[sr!global (fc3ef040)]
fc3fbcdf f3ab               rep       stosd
fc3fbce1 a140f03efc         mov       eax,[sr!global (fc3ef040)]
fc3fbce6 c7005372474c       mov       dword ptr [eax],0x4c477253
fc3fbcec 8b5d08             mov       ebx,[ebp+0x8]
fc3fbcef a140f03efc         mov       eax,[sr!global (fc3ef040)]

 

不好意思,每個人都有自己的分析習(xí)慣,而我喜歡從開始執(zhí)行的部分分析,我感覺自這樣
分析比較清晰,鑒于篇幅,具體的代碼分析我不在這里列出(具體的代碼分析請參看我的
另一篇文章<<winxp system restore 全面解析>>).

一點建議:上面的代碼相當(dāng)于靜態(tài)反匯編,不過我建議如果是靜態(tài)反匯編的話,我們不如
直接用IDA,我們還是來看看動態(tài)反匯編的結(jié)果,看看里面的具體變化,主要是堆棧,
寄存器,各個變量等的值.

重新啟動我們的target computer,在連接上的那一刻,按CTRL+Break斷下來,然后下斷點:
kd>bp 0xfc3fbcc4
kb>g
注意要及時按下CTRL+Break,不要過了,因為sr.sys是系統(tǒng)驅(qū)動,在ntldr加載驅(qū)動時會被加載,
所以等系統(tǒng)起來之后就斷不著了(我就曾經(jīng)錯過了好幾次機(jī)會)
好了,終于斷到了,我們來看看:
kd> bp 0xfc3fbcc4
kd> g
Breakpoint 0 hit
sr!DriverEntry:
fc3fbcc4 6a54               push      0x54
單步執(zhí)行:
kd> p
sr!DriverEntry+0x2:
fc3fbcc6 68c8de3efc         push      0xfc3edec8
好了,剩下的就要看看我們的匯編功底了(黨和國家考驗我們的時候來到了,呵呵)

至于代碼分析我就不在這里過多的敘述了,因為這不屬于WINDBG使用的范圍.

其實用了這么長時間的WINDBG,主要就是用其做動態(tài)反匯編的工作,之所以我不選擇
SOFTICE有兩個原因:第一,softice 使我的系統(tǒng)變的極不穩(wěn)定,很多奇怪的問題搞的
我措手不及;第二,在使用softice的過程中,有一些命令會有誤差,舉一個具體的例子
來說,在SoftIce中使用irp命令時,所查看的寄存器并不一定就是irp,只要查看的
寄存器有合法的內(nèi)容,那么irp命令就嘗試去匹配,所以在使用irp命令時要注意,
可以利用windbg的!irp /address/ 1來查看,windbg首先會檢驗irp的sign,
所以基本上不會有誤差.

 

雖然softice在操作比windbg要好很多,可是我可不想因為一些誤差走錯路.

 

好了讓我們回到正題,在使用windbg的過程中,我經(jīng)常使用的命令如下:
.reboot     重新啟動Target computer
dd          顯示寄存器或者是內(nèi)存地址的內(nèi)容
dt          其實這個命令的使用效率并不高,我把它列出來的原因是因為有一個關(guān)于
            它的一個竅門,比如說我想查看一個數(shù)據(jù)結(jié)構(gòu)的成員,我可以用如下的命令:
            dt –v –r ntdll!_FIEL_OBJECT,我們可以使用該命令查看大部分的數(shù)據(jù)
            結(jié)構(gòu),在windbg列出的結(jié)構(gòu)中包括了各個數(shù)據(jù)成員之間的偏移,所以我很喜歡
            該命令,即便我知道一個數(shù)據(jù)結(jié)構(gòu)的成員,我也會使用該命令打印出來,這樣
            更便于理解匯編語言中對數(shù)據(jù)結(jié)構(gòu)的操作.
!devobj     使用deviceObject結(jié)構(gòu)的內(nèi)容.
            該命令的使用效率并不是很高(起碼我?guī)缀鯖]有使用過),不過在調(diào)試驅(qū)動時會
            起到關(guān)鍵的作用.
!irp        顯示irp數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容.
            !irp eax 1
在我的理解中,驅(qū)動程序就是對irp的處理,所以我經(jīng)常使用該命令查看參數(shù)和irp中的
數(shù)據(jù)成員,以便更好的理解過程.
bp            下斷點.
bc            清除斷點.
bd            暫時禁止斷點.
be            允許執(zhí)行被禁止的斷點.
!drvobj      顯示driverObject數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容,同樣該命令在調(diào)式驅(qū)動程序時可能會用到.

 

雖然使用這十個命令,但是對我來說已經(jīng)是受用不盡了,其實在這些命令中,只有4個是我最常用的:
dd、dt、bp、!irp

 

還有一點,是我沒有提到的:
比如說我們想查看該驅(qū)動程序在哪個進(jìn)程中運行,可以做如下的操作:
kd>!thread          //查看當(dāng)前的線程
在列出的各項數(shù)據(jù)中,看到PID了嗎?
kd>!process [pid] 0
在其中列出的Image就是當(dāng)前的進(jìn)程了.

 

下面說一下用windbg 調(diào)式services

 

想要調(diào)式services,就必須在UserMode下運行windbg,即不用打開Target computer.
首先,安裝和啟動我們的服務(wù);
其次,啟動windbg;
選擇File->Attach to a Process菜單;
在出現(xiàn)的Attach to Process對話框中雙擊我們想要調(diào)式的服務(wù);
OK,下斷點.
現(xiàn)在我們就可以調(diào)試了,不過要注意調(diào)式的完整性,因為是本機(jī)調(diào)試,所以如果我們隨意關(guān)閉windbg的話
很可能會引起一些其他的后果,比如死機(jī),重起等.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩精品毛片视频免费看| 久久精品国产亚洲熟女| 亚洲精品国产福利在线| 亚洲精品高清国产一线久久| 成年人黄片大全在线观看| 麻豆国产精品一区二区三区| 日韩日韩日韩日韩在线| 91亚洲精品国产一区| 亚洲天堂有码中文字幕视频| 欧美精品日韩精品一区| 视频一区日韩经典中文字幕| 九九热视频经典在线观看| 欧美黑人精品一区二区在线| 九九九热在线免费视频| 亚洲最大的中文字幕在线视频| 亚洲欧美视频欧美视频| 日本久久精品在线观看| 美女黄色三级深夜福利| 国产午夜精品亚洲精品国产| 国产情侣激情在线对白| 久久碰国产一区二区三区| 国产成人午夜在线视频| 精品熟女少妇av免费久久野外| 狠狠亚洲丁香综合久久| 国产日产欧美精品大秀| 国产在线成人免费高清观看av| 国产不卡的视频在线观看| 亚洲欧美日本成人在线| 搡老熟女老女人一区二区| 国内尹人香蕉综合在线| 一区二区三区在线不卡免费| 国产又黄又猛又粗又爽的片| 日本精品视频一二三区| 国产一区二区在线免费| 欧美黑人在线一区二区| 色狠狠一区二区三区香蕉蜜桃| 精品日韩国产高清毛片| 日韩欧美综合在线播放| 国产美女精品午夜福利视频| 最新午夜福利视频偷拍| 亚洲a级一区二区不卡|