一、前因

在HOOK SSDT Shadow的时候老师说,必须要调用一个界面函数使自己成为GUI进程(线程),才会给这个进程挂上PTE,我对此表示怀疑,于是有了以下探讨

二、探究

1、首先来看一下system进程

查询所有进程

kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 867b5830  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000DirBase: 06d40020  ObjectTable: e1002e40  HandleCount: 248.Image: System

切换到System进程

kd> .process 867b5830
Implicit process is now 867b5830
WARNING: .cache forcedecodeuser is not enabled

查看SSDT Shadow

kd> dd KeServiceDescriptorTableShadow
8055d6c0  80505450 00000000 0000011c 805058c4
8055d6d0  bf999b80 00000000 0000029b bf99a890
8055d6e0  00000000 00000000 00000000 00000000
8055d6f0  00000000 00000000 00000000 00000000
8055d700  80505450 00000000 0000011c 805058c4
8055d710  00000000 00000000 00000000 00000000
8055d720  00000000 00000000 00000000 00000000
8055d730  00000000 00000000 00000000 00000000

W32pServiceTable地址为bf999b80,查看一下有没有函数地址

kd> dd bf999b80
bf999b80  ???????? ???????? ???????? ????????
bf999b90  ???????? ???????? ???????? ????????
bf999ba0  ???????? ???????? ???????? ????????
bf999bb0  ???????? ???????? ???????? ????????
bf999bc0  ???????? ???????? ???????? ????????
bf999bd0  ???????? ???????? ???????? ????????
bf999be0  ???????? ???????? ???????? ????????
bf999bf0  ???????? ???????? ???????? ????????
kd> !pte bf999b80VA bf999b80
PDE at C0602FE0            PTE at C05FCCC8
contains 0000000000000000
not valid

可以看到这块地址完全没有分配,具体原因是因为它的PTE是无效的,而System进程确实不是一个GUI进程!这能否说明只有GUI进程才能访问win32k.sys?

2、思考

GUI进程要调用GUI服务,而这些服务函数都在win32k.sys中,就必然会访问win32k.sys,所以win32k.sys的地址范围在GUI进程中必然是可以访问的。这个逻辑没有错误。按照这个逻辑来推断,一个没有任何GUI的进程空间里,是无法访问win32k.sys的。事实当真如此吗?

3、验证

下面我们写2个小例子来验证

GUI进程如下

#include "stdafx.h"
#include <windows.h>
int main(int argc, char* argv[])
{MessageBox(0,0,0,0);return 0;
}


跟我们想象的一样,这个进程的SSDT Shadow PTE肯定是有效的,SSDT Shadow表里也是有值的

非GUI进程如下

#include "stdafx.h"
//运行程序不显示窗口
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"");int main(int argc, char* argv[])
{return 0;
}


只有最基本的2个Dll,这个应该算是非GUI进程了吧!我没有写任何代码,也没有包含任何头文件。

让我们来看看这个进程的SSDT shadow是否挂了PTE

PROCESS 862d7c88  SessionId: 0  Cid: 0684    Peb: 7ffde000  ParentCid: 01a8DirBase: 06d40340  ObjectTable: e2834c30  HandleCount:  12.Image: Test.exekd> .process 862d7c88
Implicit process is now 862d7c88
WARNING: .cache forcedecodeuser is not enabled
kd> dd KeServiceDescriptorTableShadow
8055d6c0  80505450 00000000 0000011c 805058c4
8055d6d0  bf999b80 00000000 0000029b bf99a890
8055d6e0  00000000 00000000 00000000 00000000
8055d6f0  00000000 00000000 00000000 00000000
8055d700  80505450 00000000 0000011c 805058c4
8055d710  00000000 00000000 00000000 00000000
8055d720  00000000 00000000 00000000 00000000
8055d730  00000000 00000000 00000000 00000000
kd> dd bf999b80
bf999b80  bf935f7e bf947b29 bf88ca52 bf93f6f0
bf999b90  bf949140 bf936212 bf9362b7 bf83b4cd
bf999ba0  bf948a67 bf934a17 bf94905f bf90f2f4
bf999bb0  bf902318 bf809fdf bf948f31 bf94a72d
bf999bc0  bf900c15 bf893b44 bf94900f bf94a860
bf999bd0  bf820f34 bf8dcb55 bf87a2e4 bf8c29a0
bf999be0  bf91052f bf80e2c5 bf8dc7fd bf94a525
bf999bf0  bf94b430 bf813a71 bf80cf90 bf8d14e4

显然SSDT Shadow表里是有值的,也就是说尽管不是GUI线程依旧能够挂上PTE

4、猜想

只有SessionId为none才不可访问
只要SessionId里有值都可以访问

通过多次实验,发现确实如上面所说

三、总结

SSDT Shadow能不能访问,取决于你驱动所在的进程SessionId是否为none,只有none是不可访问的!

有错误请指出!
谢谢!

参考资料

番外:win32k.sys什么情况下会挂上PTE相关推荐

  1. Airtest的UI自动化番外篇、安卓手机密码键盘在AirTest上黑屏

    Airtest的UI自动化番外篇.安卓手机密码键盘在AirTest上黑屏 在使用AirTest测试的过程中,涉及到密码的时候,会出现airtest监控的手机页面黑屏(手机没黑屏,只是电脑监控的页面黑屏 ...

  2. 在没有密码提示的情况下在Ubuntu上安装MySQL

    本文翻译自:Install MySQL on Ubuntu without a password prompt How do I write a script to install MySQL ser ...

  3. 键盘上哪个键是插入建_如何在没有插入键的情况下按键盘上的“插入”?

    键盘上哪个键是插入建 Finding a keyboard that has all the features you want can be a bit of a task at times, bu ...

  4. 2019最有意思的五大 ZDI 案例之:通过调色板索引实现 Win32k.sys 本地提权漏洞(上)...

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 本文是趋势科技 ZDI 项目推出的第二届年度最有意思的五大案例系列文章之一.他们从1000多份安全公告中遴选出这些案例,奇安信代码卫士 ...

  5. 什么情况下 ETF 能上杠杆?

    通常来讲,ETF 是不允许使用杠杆的.但是,在某些情况下,ETF 可以使用杠杆. 在国外的 ETF 可以使用杠杆,例如美国的 ETF. 在中国,有一种特殊的 ETF 叫做 L-ETF(杠杆 ETF), ...

  6. 2019最有意思的五大 ZDI 案例之:通过调色板索引实现 Win32k.sys 本地提权漏洞 (下)...

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 本文是趋势科技 ZDI 项目推出的第二届年度最有意思的五大案例系列文章之一.他们从1000多份安全公告中遴选出这些案例,奇安信代码卫士 ...

  7. 使用nginx代理的情况下获取用户真实IP

    ##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...

  8. 在表空间有足够free space的情况下出现ORA-1652

    版本10.2.0.5之前存在这样的问题,当打开recyclebin回收站功能的情况下, Tablespace 上有足够的Free Space空闲空间,但是因为这些Free Space属于回收站中的对象 ...

  9. JDK之伪分享的情况下该使用填充还是@Contended

    2019独角兽企业重金招聘Python工程师标准>>> 注意:JEP142规范,Reduce Cache Contention on Specified Fields. 1.伪分享情 ...

最新文章

  1. Linux在后台运行python程序、脚本程序、可执行程序等,关闭终端仍可保持程序运行
  2. 分分钟收入上万 她做到了网红最难的粉丝沉淀
  3. 【收藏】使用命令行创建maven web项目
  4. The connection to adb is down
  5. swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类
  6. 50欧姆线设计 高频pcb_硬件设计基础100问(三)
  7. 【原】Win SQL Server2012 IIS 安装(图文详解)
  8. nginx nodejs环境配置_在Linux系统配置Nodejs环境的最简单步骤,部署多个thinkjs(nodejs)项目...
  9. commonJS — 数字操作(for Number)
  10. 设计模式笔记十六:解释器模式
  11. 撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--中篇
  12. 分析数万条国庆旅游评论数据后,我发现了“坑爹”景点背后的秘密
  13. mysql 自定义排序函数_MySQL自定义排序函数FIELD()
  14. bat调用bat注意事项(不带上参数 /b 时 会直接退出)
  15. EPT DATA数据库能查到1998-2013年工业企业数据库
  16. 计算机图形学概论论文5000字,关于计算机图形学探究的论文
  17. StretchDIBits使用方法
  18. C语言:用指针求字符串长度
  19. 网络虚拟化中的 offload 技术:LSO/LRO、GSO/GRO、TSO/UFO、VXLAN
  20. Liunx安装Ubuntu系统

热门文章

  1. 替换easyconnect
  2. 7-33 地下迷宫探索 (30 分)
  3. android 开发游戏_Android游戏开发–基本游戏循环
  4. 自动化立体库中WMS、WCS、PLC之间关系
  5. Moodle平台题库建设技术
  6. python输出数字金字塔_Python输出数字金字塔
  7. 《被讨厌的勇气》阅读摘录总结
  8. 二、机器学习模型评估
  9. JavaScript对象(Object)
  10. JSON转化为JavaBean