首 页电脑文章电脑书下载客户留言
您当前的位置:LR电脑书籍网电脑文章电脑相关电脑硬件知识CPU知识 → 文章内容
使用WinDBG进行双机内核调试
发布时间:2007-10-13 23:22:55

减小字体 增大字体

L R 小提示:保护好您的眼睛,预防为主。

By xikug.xp
版本:1.0
作者:xIkUg/RCT
xikug.xp [at] gmail [dot] com

我常去的网站:

http://www.wintoolspro.com
http://debugman.wintoolspro.com
http://www.fcgchina.com
http://bbs.pediy.com
http://www.unpack.cn

由于我没有物理的两台机器,因此我这里使用虚拟机来进行讲解(虚拟机真是个好东西)。我将先讲述如何设置,然后以一个实例来讲述如何进行内核驱动的调试。

Target环境:
Virtual PC 2004、Win2000 sp 4 en

Host环境:
WinXP sp2, WinDBG 6.6.07.5, SUDT SerialNull 1.6 试用版

一) 设置篇
SUDT SerialNull是一个虚拟串口软件,用于模拟RS232串口的虚拟连接,SerialNull 可以在不占用真实串口的情况下,创建任意数量并互为连接的纯虚拟串口对。
我们将用这个软件虚拟一个串口对出来供Host与Target使用。

如图:

SerialNULL的设置

电脑书籍$网

我们虚拟了一个串口对,COM2-COM3,这对串口是联通的。

在VirtualPC中设置:

Virtual

进行入虚拟机系统(Win2k),打开boot.ini文件,添加一行,如下:
multi(0)disk(0)rdisk(0)partition(1)\WINNT=”Microsoft Windows 2000 Professional” /fastdetect /debug /debugport=com1 /baudrate=115200
意思是以Debug模式起动系统,调试端口为COM1,波特率为115200

重新以Debug模式启动系统:

以Debug模式启动系统

在Host端,启动WinDBG,选File->Kernel Debug…,COM页,在BaudRate输入115200,Port输入我们建立的虚拟串口对的COM2口,钩上Reconnected:

WinDBG设置

点击“OK”之后在COMMAND窗口出现:

Opened \\.\com2
Waiting to reconnect…
此时按Ctrl+Break,会出现如下画面:

连接到目标

调试器显示:“Connected to Windows 2000 2195 x86 compatible target, ptr64 FALSE”,此时代表连接目标成功,处于中断状态,我们
可以在File->Symbol File Path…中设置符号路径,我习惯于使用Symbol Server,因此我在这里设置了:

SRV*f:\symbols*http://msdl.microsoft.com/download/symbols

到此时我们的双机调试环境搭建完成。此环境已经可以工作了。

二) 实例讲解

接着上面的步骤,我将以一个软件做为实例进行讲解,做为练习目标的软件是国产软件,在此隐去软件名称,我使用A软件代替。

在command窗口输入:G,此命令跟SoftICE中的G一样,让程序继续运行。

将A软件安装在虚拟机中,安装完成后,运行A软件,进入注册界面,此时我们在WinDBG中再次按Ctrl+Break,让Target中断下来,A软件的注册算法在驱动程序snbus.sys中DeviceControl例程中(为什么在snbus中的DeviceControl例程中,请自行跟踪应用程序并查看DDK的相关文档就知道了,这里的重点不是Crack软件,而是讲内核驱动的调试),在Command窗口中输入:
!drvobj snbus 2

!drvobj命令类似于SoftICE中的driver命令,用于显示驱动对象的相关信息,具体的用法请参看WinDBG的帮助文档,当我们输入!drvobj snbus 2时,我们将得到这个驱动的Dispatch routines信息:

kd> !drvobj snbus 2

Driver object (81454a70) is for: 
 \Driver\SnBus 
Dispatch routines: 
[00] IRP_MJ_CREATE                      f7353aa0 +0xf7353aa0 
[01] IRP_MJ_CREATE_NAMED_PIPE           80423f0c nt!IopInvalidDeviceRequest 
[02] IRP_MJ_CLOSE                       f7353aa0 +0xf7353aa0 
[03] IRP_MJ_READ                        80423f0c nt!IopInvalidDeviceRequest 
[04] IRP_MJ_WRITE                       80423f0c nt!IopInvalidDeviceRequest 
[05] IRP_MJ_QUERY_INFORMATION           80423f0c nt!IopInvalidDeviceRequest 
[06] IRP_MJ_SET_INFORMATION             80423f0c nt!IopInvalidDeviceRequest 
[07] IRP_MJ_QUERY_EA                    80423f0c nt!IopInvalidDeviceRequest 
[08] IRP_MJ_SET_EA                      80423f0c nt!IopInvalidDeviceRequest 
[09] IRP_MJ_FLUSH_BUFFERS               80423f0c nt!IopInvalidDeviceRequest 
[0a] IRP_MJ_QUERY_VOLUME_INFORMATION    80423f0c nt!IopInvalidDeviceRequest 
[0b] IRP_MJ_SET_VOLUME_INFORMATION      80423f0c nt!IopInvalidDeviceRequest 
[0c] IRP_MJ_DIRECTORY_CONTROL           80423f0c nt!IopInvalidDeviceRequest 
[0d] IRP_MJ_FILE_SYSTEM_CONTROL         80423f0c nt!IopInvalidDeviceRequest 
[0e] IRP_MJ_DEVICE_CONTROL              f7353b1a +0xf7353b1a 
[0f] IRP_MJ_INTERNAL_DEVICE_CONTROL     80423f0c nt!IopInvalidDeviceRequest 
[10] IRP_MJ_SHUTDOWN                    80423f0c nt!IopInvalidDeviceRequest 
[11] IRP_MJ_LOCK_CONTROL                80423f0c nt!IopInvalidDeviceRequest 
[12] IRP_MJ_CLEANUP                     80423f0c nt!IopInvalidDeviceRequest 
[13] IRP_MJ_CREATE_MAILSLOT             80423f0c nt!IopInvalidDeviceRequest 
[14] IRP_MJ_QUERY_SECURITY              80423f0c nt!IopInvalidDeviceRequest 
[15] IRP_MJ_SET_SECURITY                80423f0c nt!IopInvalidDeviceRequest 
[16] IRP_MJ_POWER                       f735065e +0xf735065e 
[17] IRP_MJ_SYSTEM_CONTROL              f7354db8 +0xf7354db8 
[18] IRP_MJ_DEVICE_CHANGE               80423f0c nt!IopInvalidDeviceRequest 
[19] IRP_MJ_QUERY_QUOTA                 80423f0c nt!IopInvalidDeviceRequest 
[1a] IRP_MJ_SET_QUOTA                   80423f0c nt!IopInvalidDeviceRequest 
[1b] IRP_MJ_PNP                         f7354590 +0xf7354590 
 

rtytry

 

我们找到了

[0e] IRP_MJ_DEVICE_CONTROL              f7353b1a +0xf7353b1a
知道DeviceControl例程的入口在0xf7353b1a处,于是我们在0xf7353b1a处设下断点,在Command窗口中输入:

bp 0xf7353b1a

bp指令相当于softice的bpx,后面跟“地址”即可在指定地址设下断点,具体用法请参加WinDBG的帮助。

输入G,让Target继续跑起来,此时我们在注册窗口中输入我们的注册用户名与假码:
xIkUg
aaaaaaaa-bbbbbbbb-cccccccc-dddddddd

点“确定”,此时WinDBG把Target中断了下来,中断之处正是我们刚才设置的DeviceControl的例程处0xf7353b1a:

f7353b1a 8bff            mov     edi,edi                            ; 这里断下 
f7353b1c 55              push    ebp 
f7353b1d 8bec            mov     ebp,esp 
f7353b1f 51              push    ecx 
f7353b20 8b4508          mov     eax,dword ptr [ebp+8]              ; [ebp+8] = DeviceObject 
f7353b23 56              push    esi 
f7353b24 57              push    edi 
f7353b25 8b7828          mov     edi,dword ptr [eax+28h]            ; [eax+28h] = DEVICE_OBJECT.DeviceExtension 
f7353b28 807f0400        cmp     byte ptr [edi+4],0                 ; ds:0023:8145494c=01 
f7353b2c 897dfc          mov     dword ptr [ebp-4],edi              ; 保存设备扩展 
f7353b2f 751a            jn

[1] [2] [3] [4] [5]  下一页

www.b1ook52.com
L R 小提示:让眼睛适当的放松。
如果您觉得 LR电脑书籍网 网站还不错,请介绍给您的同事或朋友.http://www.book52.com

特别注意:本站所提供的书籍,技术文章,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。
[ ] [返回上一页] [打 印]
文章评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值: 100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

本类热门文章
相关文章
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 所有分类 - 网站地图