登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

lgjmfyx的博客

享受生活每一天

 
 
 

日志

 
 

使用WinDBG进行双机内核调试   

2008-12-01 21:27:35|  分类: 技术技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
提示:本站正在找新的空间提供商,大部分书籍将不能下载.有不便之处还请大家谅解.
              发布时间: 08.10.28 本站管理员
使用WinDBG进行双机内核调试发布时间:2007-10-13 23:22:55L R 小提示:保护好您的眼睛,预防为主。

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

我常去的网站:

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

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

如图:

使用WinDBG进行双机内核调试  - lgjmfyx - lgjmfyx的博客

电脑书籍$网

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

在VirtualPC中设置:

使用WinDBG进行双机内核调试  - lgjmfyx - lgjmfyx的博客

进行入虚拟机系统(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模式启动系统:

使用WinDBG进行双机内核调试  - lgjmfyx - lgjmfyx的博客

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

使用WinDBG进行双机内核调试  - lgjmfyx - lgjmfyx的博客

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

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

使用WinDBG进行双机内核调试  - lgjmfyx - lgjmfyx的博客

调试器显示:“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


L R 小提示:让眼睛适当的放松。

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

         (注“!”为必填内容。) 验证码:




引文来源  使用WinDBG进行双机内核调试 - windbg 内核调试 - 计算机技术文章/电脑知识教程免费网站
  评论这张
 
阅读(1631)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018