IT点滴

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

[转]调试winlogon

Posted on 2013-03-14 14:01  Ady Lee  阅读(681)  评论(0编辑  收藏  举报

调试winlogon

尽管winlogon也是用户模式的程序,但是它处理用户的登录、注销、以及CTRL+ALT+DELETE的操作,
如果用一般的方法调试,一旦它切换桌面,就无法输入,无法控制调试器了。
这里我用“虚拟机+WinDbg+系统自带ntsd”的方法调试。
启动虚拟系统先按设置允许winlogon调试,如下:
1、建立键值
“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution

Options\WinLogon.EXE\Debugger”
使它的类型REG_SZ,值为“ntsd -d -x -g”
2、再建立键值“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution

Options\WinLogon.EXE\GlobalFlag”
使它的类型REG_DWORD ,值为0x000400F0

在调试的过程中有四种模式:用户模式调试、核心模式调试、目标应用执行模式、睡眠模式。

从用户模式调试切换到目标应用执行模式,在提示“Input>”时用“g”命令。如果只是临时性的切换,
就用单步进入、单步步过命令。。。
从用户模式调试切换到睡眠模式,用“.sleep”命令。
从用户模式调试切换到核心模式调试,用“.breakin”命令。
在XP之后的系统,从目标应用执行模式调试切换到用户模式调试,用“!bpid <pid>”命令。
.......

为了直观见下图:

这些切换模式中,我们需要的只是从提示“kd>”到提示“Input>”的转换命令,也就是“!bpid <pid>”。
比如我的系统winlogon的PID是400,则“!bpid 400”命令就会转换到winlogon的用户模式调试。
继续运行则“g”命令。