概述: windbg 分析实战,命令输出解析、自定义脚本
[toc]
【输出分析】调试进程
双机调试下,调试进程要用到 !process
和 .process
命令,进入进程空间后,命令同用户态调试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| 1: kd> !process fffffa800c5c8060 3 PROCESS fffffa800c5c8060 SessionId: 0 Cid: 06fc Peb: 7fffffd4000 ParentCid: 025c DirBase: 1f8dfb000 ObjectTable: fffff8a0020a44e0 HandleCount: 281. Image: svchost.exe VadRoot fffffa800c5c8570 Vads 128 Clone 0 Private 2532. Modified 992. Locked 0. DeviceMap fffff8a001b400b0 Token fffff8a0020ac060 ElapsedTime 00:06:27.486 UserTime 00:00:00.046 KernelTime 00:00:00.093 QuotaPoolUsage[PagedPool] 94704 QuotaPoolUsage[NonPagedPool] 32760 Working Set Sizes (now,min,max) (4303, 50, 345) (17212KB, 200KB, 1380KB) PeakWorkingSetSize 4717 VirtualSize 57 Mb PeakVirtualSize 57 Mb PageFaultCount 6769 MemoryPriority BACKGROUND BasePriority 8 CommitCharge 2766
THREAD fffffa800c5d0060 Cid 06fc.0700 Teb: 000007fffffde000 Win32Thread: fffff900c075cc10 WAIT: (UserRequest) UserMode Non-Alertable fffffa800c3d96a0 SynchronizationEvent
THREAD fffffa800c482060 Cid 06fc.0704 Teb: 000007fffffdc000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Alertable fffffa800c471060 SynchronizationTimer fffffa800c42d200 SynchronizationTimer fffffa800c467680 SynchronizationEvent fffffa800c48b440 SynchronizationEvent fffffa800c47f1f0 SynchronizationEvent fffffa800c534060 SynchronizationEvent fffffa800c556060 SynchronizationEvent fffffa800c5212f0 SynchronizationEvent fffffa800c5213f0 SynchronizationEvent fffffa800c41f5d0 SynchronizationTimer fffffa800c4595d0 SynchronizationTimer fffffa800c592240 SynchronizationEvent fffffa800c593b00 ProcessObject fffffa800c459550 SynchronizationEvent fffffa800c59b400 SynchronizationEvent fffffa800c3f6810 SynchronizationEvent fffffa800c5a1120 SynchronizationEvent fffffa800c5b5120 SynchronizationEvent fffffa800c482610 SynchronizationTimer fffffa800c466060 SynchronizationEvent fffffa800c59b060 SynchronizationEvent fffffa800c3ec2d0 SynchronizationEvent fffffa800c466240 SynchronizationEvent
THREAD fffffa800c4ad370 Cid 06fc.0708 Teb: 000007fffffda000 Win32Thread: fffff900c07cac10 WAIT: (UserRequest) UserMode Non-Alertable fffffa800cbdf3e0 SynchronizationEvent
THREAD fffffa800c4a2060 Cid 06fc.0714 Teb: 000007fffff9e000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa800c4a9110 NotificationEvent
THREAD fffffa800c537370 Cid 06fc.0718 Teb: 000007fffff9c000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa80075eb840 NotificationEvent
THREAD fffffa800c54c370 Cid 06fc.0724 Teb: 000007fffff9a000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa800c556140 NotificationEvent
THREAD fffffa800c54a060 Cid 06fc.072c Teb: 000007fffffd6000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa800c5386b0 SynchronizationEvent fffffa800c521370 NotificationEvent fffffa800c521140 NotificationEvent fffffa800c54a5b0 NotificationEvent fffffa800c543760 NotificationEvent
THREAD fffffa800c51e060 Cid 06fc.0734 Teb: 000007fffff96000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa800b2f8600 SynchronizationEvent fffffa800c5341d0 SynchronizationEvent fffffa800c556620 SynchronizationEvent fffffa800c583780 SynchronizationEvent fffffa800c5ce280 SynchronizationEvent fffffa800cbcf660 SynchronizationEvent
THREAD fffffa800c41e380 Cid 06fc.0754 Teb: 000007fffff94000 Win32Thread: 0000000000000000 WAIT: (WrLpcReply) UserMode Non-Alertable fffffa800c41e748 Semaphore Limit 0x1
THREAD fffffa800c41f060 Cid 06fc.075c Teb: 000007fffff90000 Win32Thread: 0000000000000000 WAIT: (WrQueue) UserMode Alertable fffffa800c5b53c0 QueueObject
THREAD fffffa800c466300 Cid 06fc.0760 Teb: 000007fffff8e000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Alertable fffffa800c3ec060 SynchronizationEvent
THREAD fffffa800c461060 Cid 06fc.0764 Teb: 000007fffff8c000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa800c41f790 SynchronizationEvent fffffa800c41f810 NotificationEvent
THREAD fffffa8007c92060 Cid 06fc.00a0 Teb: 000007fffffd8000 Win32Thread: 0000000000000000 WAIT: (WrQueue) UserMode Alertable fffffa800c3d9500 QueueObject
THREAD fffffa800780e640 Cid 06fc.19f0 Teb: 000007fffff98000 Win32Thread: 0000000000000000 WAIT: (WrQueue) UserMode Alertable fffffa800c3d9500 QueueObject
THREAD fffffa80078fe650 Cid 06fc.1010 Teb: 000007fffff92000 Win32Thread: 0000000000000000 WAIT: (WrQueue) UserMode Alertable fffffa800c3d9500 QueueObject
THREAD fffffa8007ebdb50 Cid 06fc.12e4 Teb: 000007fffff8a000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable fffffa800d8a88c0 SynchronizationEvent
THREAD fffffa8008228b50 Cid 06fc.0e3c Teb: 000007fffff88000 Win32Thread: 0000000000000000 WAIT: (WrQueue) UserMode Alertable fffffa800c3d9500 QueueObject
THREAD fffffa8007800b50 Cid 06fc.0440 Teb: 000007fffff86000 Win32Thread: 0000000000000000 WAIT: (WrQueue) UserMode Alertable fffffa800c3d9500 QueueObject
|
这是Windows Debugger(WinDbg)中!process
命令的输出,提供了关于特定进程的信息。
-
第一行显示了进程的ID,即fffffa800c5c8060
。
-
第二行显示了进程的会话ID,即0
。
-
第三行显示了调用进程的ID,即025c
。
-
第四行显示了进程在内存中的基地址,即1f8dfb000
。
-
第五行显示了进程的对象表,即ffff8a0020a44e0
。
-
第六行显示了进程的句柄数,即281
。
第七行显示了进程的图像,即svchost.exe
。
-
第八行显示了进程的虚拟地址根,即ffffa800c5c8570
。
-
第九行显示了进程中的VAD(虚拟地址目录)数,即128
。
-
第十行显示了进程是否为克隆进程,即0
。
-
第十一行显示了进程是否为私有进程,即2532
。
-
第十二行显示了进程的修改计数,即992
。
-
第十三行显示了进程的锁定计数,即0
。
-
第十四行显示了进程的设备映射,即ffff8a001b400b0
。
-
第十五行显示了进程的令牌,即ffff8a0020ac060
。
-
第十六行显示了进程的运行时间,即00:06:27.486
。
-
第十七行显示了进程的用户时间,即00:00:00.046
。
-
第十八行显示了进程的内核时间,即00:00:00.093
。
-
第十九行显示了进程的配额池使用情况,即94704
用于页面池和32760
用于非页面池。
-
第二十行显示了进程的工作集大小,即4303
用于现在、50
用于最小和345
用于最大。
-
第二十一行显示了进程的峰值工作集大小,即4717
。
-
第二十二行显示了进程的虚拟大小,即57 MB
。
-
第二十三行显示了进程的峰值虚拟大小,也是57 MB
。
-
第二十四行显示了进程的页面故障次数,即6769
。
-
第二十五行显示了进程的内存优先级,即BACKGROUND
。
-
第二十六行显示了进程的基本优先级,即8
。
-
第二十七行显示了进程的提交量,即2766
。
-
最后一部分输出显示了进程的线程。每个线程都用一行表示,包括线程ID、Cid(连接ID)、Teb(线程环境块)和等待类型和等待的对象。
-
查看某个进程
1 2 3 4
| # 查看某个进程 !process 0 0 目标进程名 获取目标进程EPROCESS基本信息 # 例如查看 svchost.exe !process 0 0 svchost.exe
|
-
.process /p +EPROCESS信息 切换到目标进程空间
-
.reload /f /user 强制重新加载用户态符号
-
.process /i /p 目标进程的EPROCESS 侵入式调试
-
bp 目标API 执行下断点命令
【脚本】遍历大小固定的结构体
如下所示 00007ffdf4044028 地址存放的是一个 _UNICODE_STRING*
的指针, _UNICODE_STRING
的大小为 0x10。
1 2 3 4 5
| .for (r $t0=0;@$t0<3;r $t0=@$t0+1){ r $t1=$t0*0x10; dS 00007ffd`f4044028+$t1 }
# 如果不知道结构体大小是多少,可以使用??命令计算 > ??sizeof(nt!_UNICODE_STRING) unsigned int64 0x10
|
运行结果如下所示,打印了三个字符串。