找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 服务器 Windows 查看内容

工具技巧

2010-1-12 20:32| 发布者: admin| 查看: 131| 评论: 0|原作者: 韩菱纱

使用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






最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 15:33 , Processed in 0.162545 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部