实际上内核中存在两个系统服务描述符表,一个是KeServiceDescriptorTable(由ntoskrnl.exe导出);,一个是KeServieDescriptorTableShadow(没有导出)。

KeServieDescriptorTableShadow不但包含了ntoskrnel项,而且还包含了win32k项,而KeServiceDescriptorTable仅仅包含一个ntoskrnel项。

内核中有2套函数 ,zw,nt,nt才是真正的执行函数,zw只是一个过渡函数,(可用ida察看ntoskrnl.exe得知)

SSDT:主要处理 Kernel32.dll中的系统调用,如openProcess,ReadFile等,主要在ntoskrnl.exe中实现(微软有给出 ntoskrnl源代码)

ShadowSSDT:
1.主要处理,user32.dll,GDI32.dll中调用的函数,如postMessage,SendMessage,FindWindow,主要在win32k.sys中实现.(微软未给出win32k代码)

2.需要注意的是shadowSSDT并未导出,可用ida在win32k.sys中的导出表搜索,且结构与ssdt相似,但是不能通过windbg dd命令查看值

3.ShadowSSDT表只能在GUI(即有界面的程序进程)环境下才有值,故我们需要调用KeAttachProcess来切换到GUI线程里。

4.用windbg 命令 .process 861ff020  (861ff020  是通过 命令 !process 0 0得到的)切换到GUI线程上下文

过程:1)(输入windbg命令 ) !process 0 0得到其中一个有 图形界面的程序

(数据如下)

PROCESS 861ff020  SessionId: 0  Cid: 0b58    Peb: 7ffde000  ParentCid: 05e4
                                             DirBase: 10080380  ObjectTable: e1dd2808  HandleCount:  73.
                                             Image: windbg.exe

2)  (输入命令)

lkd> .process 861ff020

Implicit process is now 861ff020

(切换成功 )

3) 切换成功后,使用dd KeServiceDescriptorTableShadow即可得到该表数据,否则无法得到,得到数据如下

lkd> dd KeServiceDescriptorTableShadow
                                           80553f60  80502b8c 00000000 0000011c 80503000--〉SSDT
                                           80553f70  bf999b80 00000000 0000029b  bf99a890 --〉ShadowSSDT
                                           80553f80  00000000 00000000 00000000 00000000
                                           80553f90  00000000 00000000 00000000 00000000
                                           80553fa0  80502b8c 00000000 0000011c 80503000
                                           80553fb0  00000000 00000000 00000000 00000000
                                           80553fc0  00000000 00000000 00000000 00000000
                                           80553fd0  00000000 00000000 00000000 00000000

其实KeServiceDescriptorTableShadow 包含4个系统服务表,但是我们只用前2个(SSDT,ShadowSSDT)

4) 总结:

1) ShadowSSDT在KeServiceDescriptorTableShadow[1]中,而KeServiceDescriptorTableShadow[0]为ssdt

2)如果要查看win32k服务,必须要切换到GUI线程上下文

5.如何得到ShadowSSDT地址:在insight source中可查询到wrk中有KeAddSystemServiceTable函数,里面有对KeServiceDescriptorTableShadow 的调用
思路:利用搜索特征码的方式搜索KeAddSystemServiceTable,取出KeServiceDescriptorTableShadow

SSDT表与ShadowSSDT表相关推荐

  1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。...

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  2. JavaScript 表单与表单验证

    JavaScript 表单 JavaScript 表单验证 HTML 表单验证可以通过 JavaScript 来完成. 以下实例代码用于判断表单字段(fname)值是否存在,如果存在,则弹出信息,否则 ...

  3. postgres默认安装后有哪些表_Greenplum 行存、列存,堆表、AO表的原理和选择

    行存和列存的原理 什么时候选择行存 什么时候选择列存 堆表和AO表的原理 什么时候选择堆表 什么时候选择AO表 测试对比行存deform和列存的性能差别 如何查看表的存储结构 Greenplum支持行 ...

  4. date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  5. python数据库建表_mysql数据表如何创建

    在 MySQL 中,可以使用 CREATE TABLE 语句创建表.其语法格式为:CREATE TABLE <表名> ([表定义选项])[表选项][分区选项]; 其中,[表定义选项]的格式 ...

  6. MySQL如何判别InnoDB表是独立表空间还是共享表空间

    InnoDB采用按表空间(tablespace)的方式进行存储数据, 默认配置情况下会有一个初始大小为10MB, 名字为ibdata1的文件, 该文件就是默认的表空间文件(tablespce file ...

  7. mysql关系表控制_mysql表关系

    一.表的详细操作 1.修改表名 alter table 旧表名 rename 新表名; ​2.修改表的引擎与字符编码 alter table 表名 engine="引擎名" ch ...

  8. 数据结构与算法--线性表(顺序表)

    本图文主要掌握以下问题: 1. 什么是线性表,线性表有哪些操作? 2. 如何利用顺序结构实现线性表?

  9. pandas高级处理-交叉表与透视表

    pandas高级处理-交叉表与透视表 1 交叉表与透视表什么作用  [就是探究两列数据之间的关系] 探究股票的涨跌与星期几有关? 以下图当中表示,week代表星期几,1,0代表这一天股票的涨跌幅是好还 ...

最新文章

  1. 工业界AI项目落地的繁琐过程
  2. 3星|《财经》年刊:各行业专家学者的现状分析与短期预测
  3. 模拟Web 服务器磁盘满故障深入解析
  4. 【 FPGA 】状态机,FPGA的灵魂
  5. ASP.NET MVC Unobtrusive JavaScript 实现 onfocusout 验证, onfocusin 清除错误
  6. 2016年Android实习岗位 腾讯二面+阿里一面
  7. android原生webview,Android 原生与WebView JS的交互
  8. python没有菜单栏_解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
  9. 移动端手机火狐浏览器全屏插件
  10. 解析弱电安防监控管理系统的安装技术重点
  11. python中int用法,Python中int()函数的用法浅析
  12. 库存管理系统开发过程
  13. Android企业级项目实战——基础篇(系列文章)
  14. 【Java 常用类】java.util包(5)Date类的常用方法
  15. .NET:Core源码编译
  16. MYSQL简单题目和知识点
  17. 防止刷新页面造成表单重复提交
  18. 什么是软文营销?为什么做软文营销?
  19. 自定义鼠标滑过标签的title属性的样式
  20. Java生成包含大写字母,小写字母以及数字的无重复随机密码

热门文章

  1. 非监督HMP算法的物体识别
  2. 面试中你必须要知道的语言陷阱
  3. automation服务器不能创建对象是什么意思_从运营商角度来考虑为什么NAT不能搭建服务器?...
  4. 如何加快HTML页面加载速度
  5. 函数的相关操作——利用函数翻转任意数组||利用函数冒泡排序||利用函数判断闰年
  6. 将.NET概念映射到Lightning平台
  7. Python 技术篇 - 使用pypandoc库实现html文档转word文档实例演示
  8. MySQL 语法问题:You can‘t specify target table ‘xxx‘ for update in FROM clause. 原因及解决方法
  9. 三星电子电容器件识别
  10. 径向基函数插值(2)一维数据的插值