Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.htmlhtml
全局句柄表spa
在这前有一篇中咱们介绍过私有句柄表。操作系统
对于私有句柄表,每一个进程有一份。htm
全局句柄表,就一份,其全部句柄都存储在这张表中,由操做系统维护。blog
全局句柄表有一个好处,不管私有句柄表中再怎么隐藏,全局句柄表必须有一份,不然会形成程序的不稳定。索引
1、全局句柄表与私有句柄表的不一样进程
1. 搜索位置get
私有句柄表地址是在该进程的 _KPROCESS+0xc4 _HANDLE_TABLE 中(TableCode)的位置。
变量
全局句柄表地址是以 PspCidTable 这个全局变量中存储,咱们只须要搜索这个全局变量便可。
搜索
索引直接使用进程的PID便可。(PID也即句柄值)
2. 句柄结构体
私有句柄的句柄结构为 _OBJECT_HEADER+BODY。
全局句柄表只包含 BODY,所以找到地址不用再加上偏移+0x18。
2、实验:经过全局句柄表找到 计算器 的_EPROCESS
1. 打开计算器,打开任务管理器,找到计算器的PID 2036(0x7F4)
2. 使用Windbg, kd > dd PspCidTable 指令获取全局句柄表 _HANDLE_TABLE 的值
kd> dd PspCidTable
80562460 e1000898 00000002 00000000 00000000
3. 解析出其 TableCode 地址,发现其为一级地址
kd> dt _HANDLE_TABLE e1000898
ntdll!_HANDLE_TABLE
+0x000 TableCode : 0xe1003000
4. 计算其偏移地址 dt _EPROCESS 0xe1003000+0x7f4/4*8,查看 0x174 位置的内容。
kd> dt _EPROCESS 816a2180
ntdll!_EPROCESS
+0x174 ImageFileName : [16] "calc.exe"
5. 结果正是咱们所须要的。