[转]windbg下在kd模式也可以调试用户模式程序

之前的调试winlogon程序,要在系统注册表做些设置。后来看到网上调试lsass程序

只要按如下方法:

!process 0 0 lsass.exe

.process /p /r 815196c0

我发觉按上面的方法做,连设置注册表都不需要了,非常方便。

接着我们就可以按调用户模式的程序一样下断点调试了。

举个例子,我们在登录的过程中需要输入用户名、密码,按如下过程就可以看到输入的内容了。

我在user32!GetDlgItemTextW下了个断点,这个API我是在OD下看它的调用参考得来的

(你可以复制一份,不运行它,只用来看反汇编,OD反出来的汇编码还是蛮好的)。

kd>!process 0 0 winlogon.exe 找进程
PROCESS 821661c8  SessionId: 0  Cid: 018c    Peb: 7ffd9000  ParentCid: 0138
    DirBase: 0ceb5000  ObjectTable: e14b1220  HandleCount: 392.
    Image: WINLOGON.EXE

kd> .process /p /r 821661c8 置为当前进程,这样就可以操作它的虚拟空间了
Implicit process is now 821661c8
.cache forcedecodeuser done
Loading User Symbols
.......................................................
kd> bp user32!GetDlgItemTextW 下断点
kd> bl
 0 e 77d24305     0001 (0001) USER32!GetDlgItemTextW

kd> g 继续运行,点击用户名并输入密码
Breakpoint 0 hit
USER32!GetDlgItemTextW:
001b:77d24305 8bff            mov     edi,edi
kd> kn 查看一下堆栈
 # ChildEBP RetAddr 
00 0006e778 758d7f60 USER32!GetDlgItemTextW
01 0006e7c8 758d7e1d MSGINA!AttemptLogon+0x4f
*** WARNING: Unable to verify checksum for winlogon.exe
02 0006e974 0103acc7 MSGINA!LogonDlgProc+0xc61
03 0006e998 77d18734 winlogon!RootDlgProc+0x6e
04 0006e9c4 77d23ce4 USER32!InternalCallWinProc+0x28
05 0006ea30 77d23b30 USER32!UserCallDlgProcCheckWow+0x146
06 0006ea78 77d23d5c USER32!DefDlgProcWorker+0xa8
07 0006ea94 77d18734 USER32!DefDlgProcW+0x22
08 0006eac0 77d18816 USER32!InternalCallWinProc+0x28
09 0006eb28 77d2927b USER32!UserCallWinProcCheckWow+0x150
0a 0006eb64 77d292e3 USER32!SendMessageWorker+0x4a5
0b 0006eb84 758f29c8 USER32!SendMessageW+0x7f
0c 0006ebb0 758f2e0d MSGINA!CLogonDialog::Handle_LOGON_LOGON_USER+0x9f
0d 0006f004 758e39bf MSGINA!CLogonDialog::Handle_WM_LOGONSERVICEREQUEST+0x89
0e 0006f018 758d6c3a MSGINA!_Shell_LogonDialog_DlgProc+0x58
0f 0006f1d0 0103acc7 MSGINA!LogonDlgProc+0x93b
10 0006f1f4 77d18734 winlogon!RootDlgProc+0x6e
11 0006f220 77d23ce4 USER32!InternalCallWinProc+0x28
12 0006f28c 77d23b30 USER32!UserCallDlgProcCheckWow+0x146
13 0006f2d4 77d23d5c USER32!DefDlgProcWorker+0xa8
kd> dd esp 查看返回地址($ra)及参数
0006e77c  758d7f60 0003002a 000005df 00b20800
0006e78c  00000200 0003002a 00000000 0008cd10
0006e79c  00000001 0006e7ac 77d1971c 00000000
0006e7ac  0006e7c4 758d7c4e 0002004a 00000000
0006e7bc  0003002a 00b20000 00b20400 0006e974
0006e7cc  758d7e1d 0003002a 0007e368 0007e3f8
0006e7dc  00000111 00000000 0006edf4 771a3dda
0006e7ec  dcbaabcd 00000000 0006e838 771a3dda
kd> g 758d7f60 把这个API运行完才能得到内容
MSGINA!AttemptLogon+0x4f:
001b:758d7f60 57              push    edi
kd> du 00b20800
00b20800  "111222" 这个就是我输入的密码
kd> g
Breakpoint 0 hit
USER32!GetDlgItemTextW:
001b:77d24305 8bff            mov     edi,edi
kd> dd esp  查看返回地址($ra)及参数
0006e77c  758d7fd1 0003002a 000005de 00b20000
0006e78c  00000200 0003002a 00000000 0008cd10
0006e79c  00000001 0006e7ac 77d1971c 00000000
0006e7ac  0006e7c4 758d7c4e 0002004a 0002004a
0006e7bc  00000000 00b20000 00b20400 0006e974
0006e7cc  758d7e1d 0003002a 0007e368 0007e3f8
0006e7dc  00000111 00000000 0006edf4 771a3dda
0006e7ec  dcbaabcd 00000000 0006e838 771a3dda
kd> g 758d7fd1  把这个API运行完才能得到内容
MSGINA!AttemptLogon+0xb8:
001b:758d7fd1 53              push    ebx
kd> du 00b20000

00b20000  "Administrator" 显示用户名

原文地址:https://www.cnblogs.com/adylee/p/2959249.html