首先打开任务管理器随便选一个进程
以explorer.exe为例
pid为1388
十六进制为56C
用windbg找到对应的EPROCESS
kd>!process 1388
得到EPROCESS为81e69688
再查看进程的EPROCESS
再查看进程的句柄表HANDLE_TABLE
注意HANDLE_TABLE中的第一个为句柄表的项
结构是HANDLE_TABLE_ENTRY 8个字节 64位
如果进程又有新的句柄创建,就要新申请一个HANDLE_TABLE_ENTRY
由于这个HANDLE_TABLE_ENTRY是0xe1788000
看他的后2位 为00 所以这个句柄表只有一层
所以现在随便选一个句柄值00b4
计算它对应的对象
首先根据句柄值当做索引 找到对应的HANDLE_TABLE_ENTRY的地址
0xe1788000+b4*2
取这个地址的值,也就是取这个句柄对应的HANDLE_TABLE_ENTRY的值
取高32位
0x81ef4891
当高32位不为0时 这个值就是对象头
由于对象头总是32位对齐 所以将这个高32位的后3位置0(这个我也不明白。。)
所以得到的对象头是0x81ef4890
再根据对象头找到对象
0x81ef4890+0x18(我也不知道为什么是加,情景分析里面介绍时说对象头在对象体的下边,按理说是应该减0x18)
最后我们就可以找到这个对象了
!handle 0 3 81e69688
看看这么计算找到的对象是否准确
我是菜b 继续学习