关于PspCidTable

PspCidTable为一个全局变量,其格式与普通的句柄表是完全一样的.

但它与每个进程私有的句柄表有以下不同

1.PspCidTable中存放的对象是系统中所有的进线程对象指针,其索引就是PIDCID 

2.PspCidTable中存放是对象体(指向EPROCESSETHREAD),而每个进程私有的句柄表则存放的是对象头(OBJECT_HEADER) 

3.PspCidTable是一个独立的句柄表,而每个进程私有的句柄表以一个双链连接起来

 

如何寻找PspCidTable

1.PspCidTable没有导出,通常的方法是找特征码:PsLookUpProcessByProcessId

2另一种方法是从KPCR====>KdVersionBlock

 

首先还是先看一下PspCidTable

kd> dd pspcidtable
84198f34  8b801100 00000000 80000020 00000101
84198f44  80000330 80000024 00000000 00000000
84198f54  00000000 00000000 00000000 00000113
84198f64  00000000 00000000 8414935a 00000000
84198f74  00000000 00000000 00000000 00000008
84198f84  00000000 84198f88 84198f88 00000000
84198f94  00000000 00000000 00000000 00000000
84198fa4  00000000 807ccc38 807c8c38 00000000

8b801100 便是_HANDLE_TABLE

 
kd> dt _handle_table 8b801100 
nt!_HANDLE_TABLE
   +0x000 TableCode        : 0x9bd25001
   +0x004 QuotaProcess     : (null) 
   +0x008 UniqueProcessId  : (null) 
   +0x00c HandleLock       : _EX_PUSH_LOCK
   +0x010 HandleTableList  : _LIST_ENTRY [ 0x8b801110 - 0x8b801110 ]
   +0x018 HandleContentionEvent : _EX_PUSH_LOCK
   +0x01c DebugInfo        : (null) 
   +0x020 ExtraInfoPages   : 0n0
   +0x024 Flags            : 1
   +0x024 StrictFIFO       : 0y1
   +0x028 FirstFreeHandle  : 0x11c
   +0x02c LastFreeHandleEntry : 0x9bd26740 _HANDLE_TABLE_ENTRY
   +0x030 HandleCount      : 0x31f
   +0x034 NextHandleNeedingPool : 0x1000
   +0x038 HandleCountHighWatermark : 0x32f


之后句柄表   +0x000 TableCode        : 0x9bd25001

可以看到这是一张二级表:

 
kd> dd 0x9bd25000
9bd25000  8b804000 9bd26000 00000000 00000000
9bd25010  00000000 00000000 00000000 00000000
9bd25020  00000000 00000000 00000000 00000000
9bd25030  00000000 00000000 00000000 00000000
9bd25040  00000000 00000000 00000000 00000000
9bd25050  00000000 00000000 00000000 00000000
9bd25060  00000000 00000000 00000000 00000000
9bd25070  00000000 00000000 00000000 00000000

查看一级表的内容:

 
kd> dd 8b804000 
8b804000  00000000 fffffffe 869dd8e9 00000000
8b804010  869dd611 00000000 869fcc81 00000000
8b804020  86a00c81 00000000 86a009a9 00000000
8b804030  86a08021 00000000 86a08919 00000000
8b804040  86a08641 00000000 86a08369 00000000
8b804050  86a04d49 00000000 86a04a71 00000000
8b804060  86a04799 00000000 86a044c1 00000000
8b804070  869f9021 00000000 869f9d49 00000000

由于 PspCidTable中存放是对象体(指向EPROCESSETHREAD)869dd8e9 抹去后三位便是指向 System 的 _EPROCESS的指针:

 

抹去后三位是869dd8e8

 
kd> !process 0 0 system
PROCESS 869dd8e8  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 00185000  ObjectTable: 8b801b80  HandleCount: 648.
    Image: System

验证正确!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值