最近研究某驱动DebugPort清零,学习了使用Windbg查看_EPROCESS结构地址,采用Syser下断查找清零代码。
下面主要写下Windbg查看进程的_EPROCESS结构,便以后查阅。
大家知道,每一个进程都对应一个_EPROCESS结构,我们如何确定一个进程的_EPROCESS地址呢?以notepad.exe为例
使用Windbg的Kernel Debug,输入命令
lkd> !process 0 0 //查看当前进程
PROCESS 8a5e7088 SessionId: 0 Cid: 0ff0 Peb: 7ffdd000 ParentCid: 0324
DirBase: 0ac40520 ObjectTable: e1a13a30 HandleCount: 65.
Image: windbg.exe
PROCESS 882f2650 SessionId: 0 Cid: 07d8 Peb: 7ffd7000 ParentCid: 0324
DirBase: 0ac404e0 ObjectTable: e506af88 HandleCount: 48.
Image: notepad.exe
。。。。。
可以看到 PROCESS 882f2650,882f2650就是notepad.exe的_EPROCESS结构地址
lkd> dt _eprocess 882f2650 //查看notepad.exe的_EPROCESS
nt!_EPROCESS
+0x000 Pcb : _KPROCESS
+0x06c ProcessLock : _EX_PUSH_LOCK
+0x070 CreateTime : _LARGE_INTEGER 0x1cb68eb`1575a5ee
+0x078 ExitTime : _LARGE_INTEGER 0x0
+0x080 RundownProtect : _EX_RUNDOWN_REF
+0x084 UniqueProcessId : 0x000007d8 Void
+0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x805648b8 - 0x8a5e7110 ]
+0x090 QuotaUsage : [3] 0xc58
+0x09c QuotaPeak : [3] 0x1080
+0x0a8 CommitCharge : 0x220
+0x0ac PeakVirtualSize : 0x2453000
+0x0b0 VirtualSize : 0x22bf000
+0x0b4 SessionProcessLinks : _LIST_ENTRY [ 0xba632014 - 0x8a5e713c ]
+0x0bc DebugPort : (null)
+0x0c0 ExceptionPort : 0xe1be7658 Void
+0x0c4 ObjectTable : 0xe506af88 _HANDLE_TABLE
+0x0c8 Token : _EX_FAST_REF
+0x0cc WorkingSetLock : _FAST_MUTEX
+0x0ec WorkingSetPage : 0x7bbc2
+0x0f0 AddressCreationLock : _FAST_MUTEX
+0x110 HyperSpaceLock : 0
+0x114 ForkInProgress : (null)
+0x118 HardwareTrigger : 0
+0x11c VadRoot : 0x8a626df0 Void
+0x120 VadHint : 0x88380130 Void
+0x124 CloneRoot : (null)
_EPROCESS + bc处为Debugprot地址,可以使用Syser下断
bpm 882f2650+bc w 断在notepad.exe的DebugPort处,如有对它的处理就会断住。。
第一次发帖,写得比较简单,留待参考。