一、回顾

前面的课程我们学习了进程的句柄表,全局句柄表和进程句柄表非常像,只有一些小区别。

这节课的课后作业我先给出来:

编写程序,通过全局句柄表PsdCidTable,遍历所有进程(包括隐藏进程)。

打印全局句柄表中内核对象的所有类型

一、需要解决的问题:

1、如何通过找到全局句柄表?

2、如何判断是否是进程?

二、有用的系统函数:MmGetSystemRoutineAddress

这个函数用来得到导出函数的地址,优点是:

1、不会被IAT Hook影响(从内核模块导出表中找函数地址的)

2、有些内核函数虽然导出了 但并没有函数说明,无法直接使用

我对题目要求稍作修改:遍历全局句柄表,如果是进程,就打印 EPROCESS 和 镜像名,如果是线程,就打印 ETHREAD。

二、全局句柄表 PsdCidTable

全局变量 PspCidTable 存储了全局句柄表 _HANDLE_TABLE 的地址:

kd> dd PspCidTable
8055b260  e1000838 00000002 00000000 00000000
8055b270  00000000 00000000 00000000 00000000
8055b280  00000000 00000000 00000000 00000000
8055b290  00000000 00000000 00000000 00000000
8055b2a0  00000000 00000000 00000000 00000000
8055b2b0  00000000 00000000 00000000 00000000
8055b2c0  00000000 00000000 00000000 00000000
8055b2d0  00000000 00000000 00000000 00000000kd> dt e1000838 _HANDLE_TABLE
nt!_HANDLE_TABLE+0x000 TableCode        : 0xe1003000+0x004 QuotaProcess     : (null) +0x008 UniqueProcessId  : (null) +0x00c HandleTableLock  : [4] _EX_PUSH_LOCK+0x01c HandleTableList  : _LIST_ENTRY [ 0xe1000854 - 0xe1000854 ]+0x024 HandleContentionEvent : _EX_PUSH_LOCK+0x028 DebugInfo        : (null) +0x02c ExtraInfoPages   : 0n0+0x030 FirstFree        : 0x4fc+0x034 LastFree         : 0x4d8+0x038 NextHandleNeedingPool : 0x800+0x03c HandleCount      : 0n346+0x040 Flags            : 1+0x040 StrictFIFO       : 0y1

全局句柄表存储了所有 EPROCESS 和 ETHREAD.和进程的句柄表不同,全局句柄表项低32位指向的就是内核对象,而非 OBJECT_HEADER.

除此之外,和进程句柄表就没什么不同了,结构也是可以分为1,2,3级,这里 0xe1003000 低位是0,就只有一级。

我们平时用的PID就可以用来索引全局句柄表,下面我们随便找一个进程:

计算器的PID是1840,转成16进制是 0x730 . 0x730 / 4 = 0x1cc, 所以句柄表项的地址就是 0xe1003000 + 1cc * 8

kd> dq 0xe1003000 + 1cc * 8
e1003e60  00000000`81fb13c9 000005f0`00000000
e1003e70  00000000`81e5eb39 00000000`81c87021
e1003e80  00000000`81c00da9 00000000`82114279
e1003e90  00000000`81c46da9 00000000`81fe45a1
e1003ea0  00000000`820eca29 00000000`81c32da9
e1003eb0  00000000`81b3c5e1 00000000`81c09231
e1003ec0  00000000`81b79231 00000000`81b79a79
e1003ed0  00000000`81c46561 000005a0`00000000

81fb13c9 低2位清零就是 EPROCESS 的地址:

kd> dt _EPROCESS 81fb13c8
nt!_EPROCESS
...+0x170 Session          : 0xf8bc8000 Void+0x174 ImageFileName    : [16]  "calc.exe"+0x184 JobLinks         : _LIST_ENTRY [ 0x0 - 0x0 ]+0x18c LockedPagesList  : (null) +0x190 ThreadListHead   : _LIST_ENTRY [ 0x81f92cb4 - 0x81f92cb4 ]+0x198 SecurityPort     : (null)
...

(66)全局句柄表,遍历全局句柄表相关推荐

  1. Windows句柄表学习笔记 —— 句柄表全局句柄表

    Windows句柄表学习笔记 -- 句柄表&全局句柄表 句柄表 实验一:在WinDbg中查看句柄表 第一步:打开一个Win32窗口程序 第二步:编译并运行以下代码 第三步:查看运行结果 第四步 ...

  2. 06 | 全局锁和表锁 : 给表加个字段怎么有这么多阻碍

    引言   根据加锁的范围,MySQL 里面的锁大致可以分成全局锁.表级锁和行锁三类.这篇文章,与你分享全局锁和表级锁.而关于行锁的内容,我会留着在下一篇文章中再和你详细介绍. 全局锁   全局锁就是对 ...

  3. 06 全局锁和表锁 :给表加个字段怎么有这么多阻碍? *(笔记)转

    数据库锁设计的初衷是处理并发问题.作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则.而锁就是用来实现这些访问规则的重要数据结构. 根据加锁的范围,MySQL 里面的锁大致 ...

  4. 六、全局锁和表锁 :给表加个字段怎么有这么 多阻碍?

    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1 全局锁 2 表级锁 2.1 表锁 2.2 元数据锁 前言 接下来聊聊 MySQL 的锁.数据库锁设计的初衷是处理并 ...

  5. python mysql 分页_利用python对mysql表做全局模糊搜索并分页实例

    在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql.前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件. "&quo ...

  6. shardingjdbc全局表_Sharding-JDBC 分库分表概述

    分库分表是什么 小明是一家初创电商平台的开发人员,他负责卖家模块的功能开发,其中涉及了店铺.商品的相关业务,设计如下数据库: 通过以下SQL能够获取到商品相关的店铺信息.地理区域信息: SELECT ...

  7. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  8. 【遇见Doris】Doris基于Hive表的全局字典设计与实现

    感谢7月25日来参加 Doris 与 Dolphin Scheduler 合作举办的线上 Meetup 的小伙伴们,现在为大家带来 Meetup 的内容. 本次 Meetup 请到了来自百度.奇安信. ...

  9. shardingjdbc全局表_Sharding-JDBC动态分表实现

    Sharding-JDBC动态水平分表实现 背景: 在项目中遇到了按照日期动态水平分表的需求,系统属于监控系统,每10分钟保存一次监控数据,并且每次要采集200个节点上的数据,即每次采集数据(间隔10 ...

最新文章

  1. php cpp,【PHP】libphpcpp.so编译
  2. 分类模型的评估方法-召回率(Recall)
  3. Esxi服务器虚拟化平台搭建
  4. java 关闭另一个jvm_JVM安全退出(如何优雅的关闭java服务)
  5. 学Java需要什么技巧呢?分享这4个
  6. windows下system函数的使用
  7. .sql文件如何执行_mysql:一条SQL查询语句是如何执行的?
  8. 前端倒计时不准的问题
  9. 如何让外网访问本地电脑(笔记本):路由映射篇
  10. 服务器关于数据流转方式
  11. 完美解决IE6不支持position:fixed的bug
  12. python 代码命令大全-Python 命令行参数
  13. linux多媒体功能,Ubuntu 8.04中文强化版 多媒体功能更强大
  14. 识别图书ISBN号并输出查询结果的示例 | Marshal's Blog
  15. 我是如何一步步解决问题 让Spring MVC返回HTML类型的视图
  16. 安卓代码设置系统时间
  17. 计算机编程游戏本还是商务本,游戏本和商务本哪个比较适合编程?
  18. 字节教育开辟新业务线,推出“闪电搜题”App可拍题和自习
  19. 数据分析的价值是什么?如何做好数据分析?
  20. 【图像处理】镜头去污渍(未完全实现):python + OpenCV

热门文章

  1. 数据中心的运维管理原则(一)
  2. 案例 | 铅酸蓄电池精细维护
  3. 如何用python进行量化交易_从零开始学习Python和量化交易
  4. 成功解决TypeError: unsupported operand type(s) for +: 'dict_items' and 'list'
  5. ML之DT之CART:分类与回归树CART算法的简介、应用、经典案例之详细攻略
  6. ML之xgboost:利用xgboost算法对Boston(波士顿房价)数据集【特征列分段→独热编码】进行回归预测(房价预测)+预测新数据得分
  7. TF之DD:利用Inception模型+GD算法生成带背景的大尺寸、高质量的Deep Dream图片
  8. 7.2 TensorFlow笔记(基础篇): 生成TFRecords文件
  9. C++ 下面的AIDL
  10. 验证码 禁止输入中文