您的位置:首页 > 其它

使用Windbg及VirtualPC调试第三方驱动的简明步骤

2009-09-17 17:03 489 查看

使用Windbg及VirtualPC调试第三方驱动的简明步骤(图)

安全中国 www.anqn.com

更新时间:2009-1-3 0:25:18
责任编辑:流火
热 点:
使用Windbg及VirtualPC调试第三方驱动的简明步骤

1,配置VirtualPC

在VirtualPC中安装好GuestOS后,在该GuestOS的设置页面中找到COM1,然后参照图中的数据进行设置

(文字描述:选中Named Pipe,然后输入//./pipe/com_1)

2,配置GuestOS(当前指Win2k,XP,2003的配置方法)

在BOOT.ini中添加

multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Windows
Server 2003, Standard" /noexecute=optout /fastdetect /debug
/debugport=com1 /baudrate=115200

注意分区参数的设置,一般不需要变

3,配置Windbg

D:/Microsoft/windbg/windbg.exe
-y
D:/localSymbols;srv*D:/localSymbols*http://msdl.microsoft.com/download/symbols
-k com:pipe,port=//./pipe/com_1 -Q

在Windbg的快捷方式中,设置[目标]为上面的数据(路径请注意修改)

4,启动OS,建立KD连接

启动GuestOS,选择调试选项并Enter,然后从刚设置好的WIndbg的Shortcut运行Windbg.

Windbg在与GuestOS连接后,会显示相关的连接成功的信息:

Connected to Windows Server 2003 3790 x86 compatible target, ptr64 FALSE

Kernel Debugger connection established.

Symbol search path is: D:/localSymbols;srv*D:/localSymbols*http://msdl.microsoft.com/download/symbols

Executable search path is:

Windows Server 2003 Kernel Version 3790 UP Free x86 compatible

Built by: 3790.srv03_sp1_rtm.050324-1447

Kernel base = 0x80800000 PsLoadedModuleList = 0x808a8e48

此时,可以按下Ctrl+Break键,中断OS,这时如果没有相关符号,Windbg会去M$的网站下载符号至D:/localSymbols,所以可能需要等一会儿.

中断后,显示KD>提示符

5,在DriveEntry上下断点

如果你要调试的驱动是Boot,System Start类型,那么你可在Windbg一旦与GuestOS建立KD Connection时,中断OS,将下断点,比如如果你的Driver的

名称是:drvdbgee.sys,可以如此下断:bu drvdbgee+EntryPoint(这个数字可以使用PE工具得到,比如PEID),bu $iment(drvdbgee),对于Windbg此时

也可能会去下载符号所以Prompt处会显示"Busy" :-)

6,载入Driver

手动载入Driver可以使用Kmdmanager.exe,Register->Run,然后在第5个下的断点就会被命中.

7,Do what you want to do

......

附录:

1,Windbg中使用BU下断点时会遍历整个Kernel Modules,然后去下载符号与BU中指定的名称匹配,所以会比较慢,

通常情况下,可以不要设置srv*D:/localSymbols*http://msdl.microsoft.com/download/symbols,在你认为需要下载符号时下载

2,常用的指令和类型及数据

nt!KeServiceDescriptorTableShadow

nt!KeServiceDescriptorTable ( 命令 dds poi(nt!KeServiceDescriptorTable) ,可以查看SSDT表 )

win32k!W32pServiceTable (=nt!KeServiceDescriptorTableShadow+0x10 , 命令 dds win32k!W32pServiceTable,可以查看Win32K的函数表 )

_IMAGE_NT_HEADERS --PE头

_UNICODE_STRING --Unicode string

_DRIVER_OBJECT --驱动对象

3,手动解析某个SSDT是否被HOOK,

dds poi(nt!KeServiceDescriptorTable)+0x4*0x80 ,其中0x4是SSDT入口项的大小,0x80是功能号,

如果没有HOOK,则应显示80827afc f8830300 nt!NtOpenProcess ,被HOOK的情况下显示 80827afc f8830300 drvdbgee+0x1300

4,手动解析某个Win32k的SSDT是否被HOOK,

dds win32k!W32pServiceTable+0x4*(0x114C-0x1000) , 其中是0x114C是功能号,该功能的Stub通常来USER32和GDI32

5,其他常用指令:

d* 显示数据,比如d, da, db, dc, dd

e 修改数据

bp 是下软件断点

u address 是从Address处反汇编

ba 下硬件访问,写入和执行断点

? 是计算表达式,比如 ? 0x4*(0x114C-0x1000)

.reload 载入模块,在有些模块看不到的情况下使用

通常使用的 .reload /f 强制载入模块及符号(模块多时会相当慢) .reload /s 载入模块但是不载入符号

快捷键F5->Run,F7->Run to cursor ,F10->Step over , F11->Step Into , SHIFT+F11 Step out

6,这个配置是与VMware相容的.

设置Pipe



配置Windbg



中断OS





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: