学习进程的句柄表

来源:互联网 发布:迅龙数据恢复软件下载 编辑:程序博客网 时间:2024/06/05 08:03

首先打开任务管理器随便选一个进程

以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 继续学习

原创粉丝点击