1.列出所有活动进程

使用!process命令可以打印出活动进程的信息。第一个参数是要打印的EPROCESS的地址,如果指定为0则表示打印所有的进程。第二个参数用于说明打印进程信息的详细级别。指定0则表示打印最简单的信息。

[plain] view plain?

  1. 0: kd> !process 0 0
  2. **** NT ACTIVE PROCESS DUMP ****
  3. PROCESS 821b7490  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
  4. DirBase: 02b80020  ObjectTable: e1003e30  HandleCount: 350.
  5. Image: System
  6. PROCESS 82072da0  SessionId: none  Cid: 0234    Peb: 7ffd4000  ParentCid: 0004
  7. DirBase: 02b80040  ObjectTable: e14323d0  HandleCount:  19.
  8. Image: smss.exe
  9. PROCESS 8204ab28  SessionId: 0  Cid: 0264    Peb: 7ffd6000  ParentCid: 0234
  10. DirBase: 02b80060  ObjectTable: e156e898  HandleCount: 434.
  11. Image: csrss.exe
  12. PROCESS 81e87580  SessionId: 0  Cid: 027c    Peb: 7ffde000  ParentCid: 0234
  13. DirBase: 02b80080  ObjectTable: e1478c18  HandleCount: 294.
  14. Image: winlogon.exe
  15. PROCESS 820b5378  SessionId: 0  Cid: 02a8    Peb: 7ffde000  ParentCid: 027c
  16. DirBase: 02b800a0  ObjectTable: e16d3480  HandleCount: 273.
  17. Image: services.exe
  18. [...]省略部分输出

输出结果中我可以看到几个重要的字段:

·Cid : 进程id

·Peb : 进程环境块的地址

·ParentCid : 父进程id

·DirBase : 目录表 (用于转换虚拟地址和物理地址PDT)

·ObjectTable : 进程的句柄表

如果要针对某个进程查看更详细的信息,可以按照如下方式指定EPROCESS块地址,并提高信息的详细级别

[plain] view plain?

  1. 0: kd> !process 81f8e4b8 1
  2. PROCESS 81f8e4b8  SessionId: 0  Cid: 0134    Peb: 7ffdf000  ParentCid: 02a8
  3. DirBase: 02b802a0  ObjectTable: e1b49790  HandleCount: 101.
  4. Image: TPAutoConnSvc.exe
  5. VadRoot 81f85208 Vads 88 Clone 0 Private 276. Modified 1. Locked 0.
  6. DeviceMap e1003118
  7. Token                             e1afe528
  8. ElapsedTime                       00:00:08.218
  9. UserTime                          00:00:00.031
  10. KernelTime                        00:00:00.031
  11. QuotaPoolUsage[PagedPool]         55852
  12. QuotaPoolUsage[NonPagedPool]      3520
  13. Working Set Sizes (now,min,max)  (1012, 50, 345) (4048KB, 200KB, 1380KB)
  14. PeakWorkingSetSize                1012
  15. VirtualSize                       33 Mb
  16. PeakVirtualSize                   34 Mb
  17. PageFaultCount                    1028
  18. MemoryPriority                    BACKGROUND
  19. BasePriority                      8
  20. CommitCharge                      393

2.切换进程上下文

因为进程的地址空间都是相互独立的,所以我们使用dd 0x400000之类的指令是没有意义的。因为我们不确定当前用户地址空间就是我们的目标进程地址空间。因此我们首先要切换到我们想查看的进程上下文。之后才能查看它私有的地址空间。如果不按这个规定的话,有可能得出的结果是很多?????

[plain] view plain?

  1. 0: kd> .process 81f8e4b8
  2. Implicit process is now 81f8e4b8
  3. WARNING: .cache forcedecodeuser is not enabled
  4. 0: kd> dd 0x400000
  5. 00400000  00905a4d 00000003 00000004 0000ffff
  6. 00400010  000000b8 00000000 00000040 00000000
  7. 00400020  00000000 00000000 00000000 00000000
  8. 00400030  00000000 00000000 00000000 00000100
  9. 00400040  0eba1f0e cd09b400 4c01b821 685421cd
  10. 00400050  70207369 72676f72 63206d61 6f6e6e61
  11. 00400060  65622074 6e757220 206e6920 20534f44
  12. 00400070  65646f6d 0a0d0d2e 00000024 00000000
  13. 0: kd> .process
  14. Implicit process is now 8055d0c0
  15. 0: kd> dd 0x400000
  16. 00400000  ???????? ???????? ???????? ????????
  17. 00400010  ???????? ???????? ???????? ????????
  18. 00400020  ???????? ???????? ???????? ????????
  19. 00400030  ???????? ???????? ???????? ????????
  20. 00400040  ???????? ???????? ???????? ????????
  21. 00400050  ???????? ???????? ???????? ????????
  22. 00400060  ???????? ???????? ???????? ????????
  23. 00400070  ???????? ???????? ???????? ????????

3.列出进程已经加载的dll

切换到目标进程上下文之后,我们可以使用!peb或者!dlls命令列出进程已经加载的dll。进程加载的dll列表保存在peb中,所以这两条命令都能很好的工作。只是显示格式不同罢了。比如我要查看我本机的TPAutoConnSvc.exe

[plain] view plain?

  1. 0: kd> !peb
  2. PEB at 7ffdf000
  3. InheritedAddressSpace:    No
  4. ReadImageFileExecOptions: No
  5. BeingDebugged:            No
  6. ImageBaseAddress:         00400000
  7. Ldr                       00251e90
  8. Ldr.Initialized:          Yes
  9. Ldr.InInitializationOrderModuleList: 00251f28 . 002533c8
  10. Ldr.InLoadOrderModuleList:           00251ec0 . 00253550
  11. Ldr.InMemoryOrderModuleList:         00251ec8 . 00253558
  12. Base TimeStamp                     Module
  13. 400000 4a76ebe1 Aug 03 21:53:37 2009 C:\Program Files\VMware\VMware Tools\TPAutoConnSvc.exe
  14. 7c920000 4802bdc5 Apr 14 10:13:25 2008 C:\WINDOWS\system32\ntdll.dll
  15. 7c800000 4802bdc6 Apr 14 10:13:26 2008 C:\WINDOWS\system32\kernel32.dll
  16. 41000000 4a76ebcf Aug 03 21:53:19 2009 C:\WINDOWS\system32\TPSvc.dll
  17. 695d0000 4802bd9d Apr 14 10:12:45 2008 C:\WINDOWS\System32\Wbem\framedyn.dll
  18. 77be0000 4802be3f Apr 14 10:15:27 2008 C:\WINDOWS\system32\msvcrt.dll
  19. 77da0000 4802bd89 Apr 14 10:12:25 2008 C:\WINDOWS\system32\ADVAPI32.dll
  20. 77e50000 4802bdae Apr 14 10:13:02 2008 C:\WINDOWS\system32\RPCRT4.dll
  21. 77fc0000 4802bdc1 Apr 14 10:13:21 2008 C:\WINDOWS\system32\Secur32.dll
  22. 77d10000 4802bdbd Apr 14 10:13:17 2008 C:\WINDOWS\system32\USER32.dll
  23. 77ef0000 4802bd81 Apr 14 10:12:17 2008 C:\WINDOWS\system32\GDI32.dll
  24. 770f0000 4802bdbd Apr 14 10:13:17 2008 C:\WINDOWS\system32\OLEAUT32.dll
  25. 76990000 4802bdbc Apr 14 10:13:16 2008 C:\WINDOWS\system32\ole32.dll
  26. 77bd0000 4802bdbf Apr 14 10:13:19 2008 C:\WINDOWS\system32\VERSION.dll
  27. 759d0000 4802bdbe Apr 14 10:13:18 2008 C:\WINDOWS\system32\USERENV.dll
  28. 76320000 4802bda2 Apr 14 10:12:50 2008 C:\WINDOWS\system32\comdlg32.dll

4.查看进程的内存映射情况

虚拟地址描述符(Virtual Adderss Descriptor)包含一个进程中用户空间已分配地址信息。Vad能够帮助我们快速的定位隐藏或者注入的代码。但是首先我们需要找到Vadroot。不过这个在EPROCESS中已经明确指出了。直接把Vadroot的地址作为参数,使用!vad命令即可得出进程用户空间已分配的内存信息。

[plain] view plain?

  1. 0: kd> !vad 81f85208
  2. VAD     level      start      end    commit
  3. 82060128 ( 4)         10       10         1 Private      READWRITE
  4. 81ae0760 ( 5)         20       20         1 Private      READWRITE
  5. 81ae95b0 ( 3)         30      12f         4 Private      READWRITE
  6. 81ed7a20 ( 5)        130      132         0 Mapped       READONLY           Pagefile-backed section
  7. 81ffebc8 ( 4)        140      141         0 Mapped       READONLY           Pagefile-backed section
  8. 81f89578 ( 6)        150      24f        24 Private      READWRITE
  9. 82012798 ( 5)        250      25f         6 Private      READWRITE
  10. 82003408 ( 7)        260      26f         0 Mapped       READWRITE          Pagefile-backed section
  11. 82002e98 ( 6)        270      285         0 Mapped       READONLY           \WINDOWS\system32\unicode.nls
  12. 81ae9370 ( 8)        290      2d0         0 Mapped       READONLY           \WINDOWS\system32\locale.nls
  13. 81c050d8 ( 7)        2e0      320         0 Mapped       READONLY           \WINDOWS\system32\sortkey.nls
  14. 81ed79b8 ( 9)        330      335         0 Mapped       READONLY           \WINDOWS\system32\sorttbls.nls
  15. 81ed7b58 ( 8)        340      380         0 Mapped       READONLY           Pagefile-backed section
  16. 81c03260 ( 9)        390      39f         5 Private      READWRITE
  17. 81c05758 (10)        3a0      3a2         0 Mapped       READONLY           \WINDOWS\system32\ctype.nls
  18. 81e7f460 (11)        3b0      3bf         8 Private      READWRITE
  19. 81e1d168 (12)        3c0      3c0         1 Private      READWRITE
  20. 81bd5bd0 (13)        3d0      3d0         1 Private      READWRITE
  21. 81f8e868 (15)        3e0      3e1         0 Mapped       READONLY           Pagefile-backed section
  22. 81e1b0e8 (14)        3f0      3f1         0 Mapped       READONLY           Pagefile-backed section
  23. 81e43cd0 ( 2)        400      440        13 Mapped  Exe  EXECUTE_WRITECOPY  \Program Files\VMware\VMware Tools\TPAutoConnSvc.exe
  24. [...]
  25. 81bdc0c8 ( 5)        9e0      9fb        23 Mapped  Exe  EXECUTE_WRITECOPY  \WINDOWS\system32\TPVMW32.dll
  26. 81e18b28 ( 4)        a00      a0f         4 Private      READWRITE
  27. 81f85208 ( 0)        a10      a10         0 Mapped       READWRITE          Pagefile-backed section
  28. 81e840b8 ( 5)        a20      a23         0 Mapped       READWRITE          Pagefile-backed section
  29. 81e17178 ( 4)        a30      b2f        10 Private      READWRITE
  30. 81e19128 ( 6)        b30      c2f         3 Private      READWRITE
  31. 81bd02b0 ( 5)        c30      d2f         5 Private      READWRITE
  32. 82003a28 ( 7)        d30      e2f         2 Private      READWRITE
  33. 81e17988 ( 6)        e30      e6f         3 Private      READWRITE
  34. 81e1a548 ( 7)        e70      e7f        12 Private      READWRITE
  35. 81adfc70 ( 8)        e80      e8d         0 Mapped       READWRITE          Pagefile-backed section
  36. 81a968e0 ( 9)        e90      e90         1 Private      READWRITE
  37. <span style="color:#330033;">81ed5e50 ( 3)      10000    10023        10 Mapped  Exe  EXECUTE_WRITECOPY  \WINDOWS\system32\tprdpw32.dll</span>
  38. 81e7d200 ( 2)      41000    41078        25 Mapped  Exe  EXECUTE_WRITECOPY  \WINDOWS\system32\TPSvc.dll
  39. 81f86980 ( 5)      5adc0    5adf6         2 Mapped  Exe  EXECUTE_WRITECOPY  \WINDOWS\system32\uxtheme.dll
  40. [...]
  41. <span style="color:#ff6666;">81ed5220 ( 2)      7c920    7c9b2         5 Mapped  Exe  EXECUTE_WRITECOPY  \WINDOWS\system32\ntdll.dll</span>
  42. [...]

如果要计算出每个vad节点的虚拟地址,只需要将开始地址和结束地址乘以0x1000即可。我们来看看0x81ed5220处的vad,他的位于0x7c920000和0x7c9b2000这个区间段。并且映射了可执行文件tprdpw32.dll。用lm查看一下这个地址。

[plain] view plain?

  1. 0: kd> lm vt a 0x7c920000
  2. start    end        module name
  3. 7c920000 7c9b3000   ntdll
  4. Loaded symbol image file: ntdll.dll
  5. Image path: ntdll.dll
  6. Image name: ntdll.dll
  7. Timestamp:        Mon Apr 14 10:13:25 2008 (4802BDC5)
  8. CheckSum:         00097CB7
  9. ImageSize:        00093000
  10. Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

5.查看进程句柄表

使用!handle命令可以列出当前进程所有已经打开的句柄信息。!handle命令的第一个参数是句柄值(如果是0则列出所有句柄),第二个参数是所需信息的详细程度(跟!process一样)。如下命令列出了当前进程上下文中所有的句柄信息

[plain] view plain?

  1. 0: kd> !handle 0 0
  2. PROCESS 81f8e4b8  SessionId: 0  Cid: 0134    Peb: 7ffdf000  ParentCid: 02a8
  3. DirBase: 02b802a0  ObjectTable: e1b49790  HandleCount: 101.
  4. Image: TPAutoConnSvc.exe
  5. Handle table at e1b0c000 with 101 entries in use
  6. 0004: Object: e1009540  GrantedAccess: 000f0003 Entry: e1b0c008
  7. Object: e1009540  Type: (821b3730) KeyedEvent
  8. ObjectHeader: e1009528 (old version)
  9. HandleCount: 28  PointerCount: 29
  10. Directory Object: e1009f58  Name: CritSecOutOfMemoryEvent
  11. 0008: Object: e14d00d8  GrantedAccess: 00000003 Entry: e1b0c010
  12. Object: e14d00d8  Type: (821b7040) Directory
  13. ObjectHeader: e14d00c0 (old version)
  14. HandleCount: 28  PointerCount: 64
  15. Directory Object: e1003350  Name: KnownDlls
  16. 000c: Object: 81f88b38  GrantedAccess: 00100020 (Inherit) Entry: e1b0c018
  17. Object: 81f88b38  Type: (821e9900) File
  18. ObjectHeader: 81f88b20 (old version)
  19. HandleCount: 1  PointerCount: 1
  20. Directory Object: 00000000  Name: \WINDOWS\system32 {HarddiskVolume1}
  21. [...]

其中type指出了句柄关联的对象的类型,object字段表明了对象的地址。handlecount和pointercount分别记录了句柄引用次数和指针引用次数(ObrefrenceObjectByHandle、ByName)。

RING3下断

首先切换到用户环境,.process命令的功能是在内核态调试时,切换进程CONTEXT。执行如下命令:

1:使用!process 0 0 获取用户空间的所有的进程的信息
kd> !process 0 0 explorer.exe
PROCESS 81fff020 SessionId: 0 Cid: 0600 Peb: 7ffde000 ParentCid: 05f0
    DirBase: 048401c0 ObjectTable: e19d5188 HandleCount: 371.
    Image: explorer.exe

2:使用.process /p + 你需要断的应用程序的EProcess地址切换到应用程序的地址空间

kd> .process /p 81fff020

3:重新加载user PDB文件

kd> .reload /f /user

4:使用非侵入式的切换进程空间

kd> .process /i /p 81fff020

5:下应用层断点。

jpg 改成 doc 

利用windbg探索进程和进程上下文的更多相关文章

  1. python练习笔记——利用信号signal处理僵尸进程

    1 signal处理僵尸进程的基于语法 利用信号signal处理僵尸进程的方法:signal(SIGCHLD,SIG_IGN),该方法也是第三种处理僵尸进程的方法. SIGCHLD:子进程状态改变后产 ...

  2. linux进程及进程控制

    Linux进程控制   程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例.利用分时技术,在Linux操作系统上同时可以运行多个进程.分时技术的基本原理是把CPU的运行时间划 ...

  3. Linux-进程描述(2)之进程标识符进程位置与环境变量

    在上一篇文章中详细介绍了task_struct结构体内的常见成员,然后我们就来看一下具体内容.每个进程都把它的信息放在 task_struct 这个数据结构中,task_struct 包含了这些内容: ...

  4. Python之进程 3 - 进程池和multiprocess.Poll

    一.为什么要有进程池? 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务.那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗 ...

  5. Python多进程库multiprocessing创建进程以及进程池Pool类的使用

    问题起因最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果.没错!类似bag ...

  6. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  7. 【转载】linux进程及进程控制

    Linux进程控制   程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例.利用分时技术,在Linux操作系统上同时可以运行多个进程.分时技术的基本原理是把CPU的运行时间划 ...

  8. 进程 PCB 进程挂起

    7-1 进程定义  OS系统从只能跑一个程序到能跑多个.进程可以描述程序的执行过程. 进程:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程. 只有当一个程序被OS加载到内存中,cpu对其 ...

  9. wait、waitpid 僵尸进程 孤儿进程

    man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...

随机推荐

  1. UML用例图总结

    用例图主要用来描述“用户.需求.系统功能单元”之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. [用途]:帮助开发团队以一种可视化的方式理解系统的功能需求. 用例图所包含的元素如下: 1. ...

  2. JNI的某些数组和字符串类型转换

    JNICC++C#Windows jbytearray转c++byte数组 jbyte * arrayBody = env->GetByteArrayElements(data,0); jsiz ...

  3. derby数据库操作比较难理解的错误及解决方法大全

    一.插入(INSERT时报错) 1.错误:java.sql.SQLIntegrityConstraintViolationException: 列“test”无法接受空值. 可能原因:建表时test列 ...

  4. 新浪微博客户端(5)-自定义UISearchBar

    iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //===================================== ...

  5. NOIP2011 聪明的质监员

    描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[Li  ...

  6. cf.295.B Two Buttons (bfs)

     Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. Truck History(prim & mst)

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19772   Accepted: 7633 De ...

  8. 从客户端中检测到有潜在危险的 Request.Form 值。

    使用富文本编辑器是经常会遇到这个问题,在MVC中解决方法很简单只要在对应的action上添加[ValidateInput(false)]即可

  9. Xen虚拟机克隆实战

    导读 在我们使用Xen虚拟化的时候,会经常创建虚拟机(VM),每次安装创建步骤比较繁琐,本文介绍通过virt-clone命令克隆xen虚拟机实战. 查看virt-clone命令是否存在 rpm -qa ...

  10. Lucene4.3开发之分词器总结

    Lucene4.3开发之分词器总结 http://java.chinaitlab.com/tools/940011.html