概述: windbg 分析实战,命令输出解析

[toc]

调试进程

双机调试下,调试进程要用到 !process.process 命令,进入进程空间后,命令同用户态调试

cmd
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. 查看某个进程

    cmd
    # 查看某个进程
    !process 0 0 目标进程名 获取目标进程EPROCESS基本信息
    # 例如查看 svchost.exe
    !process 0 0 svchost.exe
  2. .process /p +EPROCESS信息 切换到目标进程空间

    cmd
    .process /p 进程地址
  3. .reload /f /user 强制重新加载用户态符号

    cmd
    .reload /f /user
  4. .process /i /p 目标进程的EPROCESS 侵入式调试

    cmd
    .process /i /p 进程地址
  5. bp 目标API 执行下断点命令

遍历大小固定的结构体

如下所示 00007ffdf4044028 地址存放的是一个 _UNICODE_STRING* 的指针, _UNICODE_STRING 的大小为 0x10。

cmd
.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

运行结果如下所示,打印了三个字符串。

image-20231129123908261