在前面的博文《驱动开发:内核读取SSDT表基址》中已经教大家如何寻找SSDT表基地址了,今天给大家分享两个适用于WinDBG调试器上的脚本文件,该脚本文件可以很好的枚举出当前系统内的SSDT以及SSSDT表中的数据,可以方便后续文章的学习参考之用,当然脚本不是我写的,文章末尾我会给出参考原文链接。

第一段脚本可用于枚举64位系统下所有的SSDT表,将脚本保存为enum_ssdt.log写入以下内容。

aS ufLinkS "<u><col fg=\\\"emphfg\\\"><link name=\\\"%p\\\" cmd=\\\"uf 0x%p\\\">";
aS ufLinkE "</link></col></u>"; r $t1 = nt!KeServiceDescriptorTable;
r $t2 = poi(@$t1 + 0x10);
r $t1 = poi(@$t1); .printf "\n\nKeServiceDescriptorTable->KiServiceTable: %p\nKeServiceDescriptorTable->Count: %d\n", @$t1, @$t2;
.printf "\nOrd Address fnAddr Symbols\n";
.printf "--------------------------------\n\n"; .for (r $t0 = 0; @$t0 != @$t2; r $t0 = @$t0 + 1)
{
r @$t3 = (poi(@$t1 + @$t0 * 4)) & 0x00000000`FFFFFFFF;
$$.printf "2. %p\n", @$t3; .if ( @$t3 & 0x80000000 )
{
r @$t3 = (@$t3 >> 4) | 0xFFFFFFFF`F0000000;
r @$t3 = 0 - @$t3;
r @$t3 = @$t1 - @$t3;
}
.else
{
r @$t3 = (@$t3 >> 4);
r @$t3 = (@$t1 + @$t3);
} .printf /D "[%3d] ${ufLinkS}%p${ufLinkE} (%y)\n", @$t0, @$t3, @$t3, @$t3, @$t3;
} .printf "\n- end -\n";

回到WinDBG中输入命令$><d://enum_ssdt.log调用脚本,可得到如下输出。

还有一个输出SSSDT地址的脚本,直接保存位enum_sssdt.log,写入以下内容。

aS ufLinkS "<u><col fg=\\\"emphfg\\\"><link name=\\\"%p\\\" cmd=\\\"uf 0x%p\\\">";
aS ufLinkE "</link></col></u>"; r $t1 = nt!KeServiceDescriptorTableShadow;
r $t2 = @$t1 + 0x08*4;
r $t3 = poi(@$t2 + 0x10);
r $t2 = poi(@$t2); .printf "\n\nKeServiceDescriptorTableShadow->W32pServiceTable: %p\nKeServiceDescriptorTableShadow->Count: %d\n", @$t2, @$t3;
.printf "\nOrd Address Symbols\n";
.printf "--------------------------------\n\n"; .for (r $t0 = 0; @$t0 != @$t3; r $t0 = @$t0 + 1)
{
r @$t4 = (poi(@$t2 + @$t0 * 4)) & 0x00000000`FFFFFFFF;
$$.printf "2. %p\n", @$t4; .if ( @$t4 & 0x80000000 )
{
r @$t4 = (@$t4 >> 4) | 0xFFFFFFFF`F0000000;
r @$t4 = 0 - @$t4;
r @$t4 = @$t2 - @$t4;
}
.else
{
r @$t4 = (@$t4 >> 4);
r @$t4 = (@$t2 + @$t4);
} .printf /D /os "[%3d] ${ufLinkS}%p${ufLinkE} (%y)\n", @$t0, @$t4, @$t4, @$t4, @$t4;
} .printf "\n- end -\n";

使用WinDBG附加到应用层explorer.exe,并执行遍历命令。

0: kd> !process 0 0 explorer.exe
0: kd> .process ffff9b8a552b0340
0: kd> .reload win32k.sys
0: kd> $><d://enum_sssdt.log

输出遍历效果如下所示。

参考文献

https://www.cnblogs.com/ImprisonedSoul/p/15603120.html

https://www.cnblogs.com/ImprisonedSoul/p/15603209.html

驱动开发:WinDBG 枚举SSDT以及SSSDT地址的更多相关文章

  1. VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)

    ------------VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)------------- WIN10已上线,随之而来的是VS2015:微软在 "WDK760 ...

  2. [驱动开发] windbg符号表

    新建"环境变量 - 系统":_NT_SYMBOL_PATH 值为:SRV*FullDirPath*http://msdl.microsoft.com/download/symbol ...

  3. 驱动开发:Win10内核枚举SSDT表基址

    三年前面朝黄土背朝天的我,写了一篇如何在Windows 7系统下枚举内核SSDT表的文章<驱动开发:内核读取SSDT表基址>三年过去了我还是个单身狗,开个玩笑,微软的Windows 10系 ...

  4. 驱动开发:内核枚举ShadowSSDT基址

    在笔者上一篇文章<驱动开发:Win10枚举完整SSDT地址表>实现了针对SSDT表的枚举功能,本章继续实现对SSSDT表的枚举,ShadowSSDT中文名影子系统服务描述表,SSSDT其主 ...

  5. 驱动开发:内核枚举DpcTimer定时器

    在笔者上一篇文章<驱动开发:内核枚举IoTimer定时器>中我们通过IoInitializeTimer这个API函数为跳板,向下扫描特征码获取到了IopTimerQueueHead也就是I ...

  6. 驱动开发:内核枚举PspCidTable句柄表

    在上一篇文章<驱动开发:内核枚举DpcTimer定时器>中我们通过枚举特征码的方式找到了DPC定时器基址并输出了内核中存在的定时器列表,本章将学习如何通过特征码定位的方式寻找Windows ...

  7. 驱动开发:内核枚举LoadImage映像回调

    在笔者之前的文章<驱动开发:内核特征码搜索函数封装>中我们封装实现了特征码定位功能,本章将继续使用该功能,本次我们需要枚举内核LoadImage映像回调,在Win64环境下我们可以设置一个 ...

  8. 驱动开发:内核枚举Registry注册表回调

    在笔者上一篇文章<驱动开发:内核枚举LoadImage映像回调>中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与 ...

  9. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  10. 驱动开发:内核取ntoskrnl模块基地址

    模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块,这里的用户模块指的是应用层进程 ...

随机推荐

  1. auth认证模块 auth_user表扩展

    目录 auth认证模块前戏 django后台管理功能 创建超级管理员 auth认证相关模块及操作 用户注册 用户登录 网站首页效果 校验用户登录的装饰器 用户修改密码 用户注销登录 auth_user ...

  2. Mysql--表注释,字段注释

    information_schema数据库是MySQL数据库自带的数据库,里面存放的MySQL数据库所有的信息,包括数据表.数据注释.数据表的索引.数据库的权限等等. 1.添加表.字段注释 creat ...

  3. 阿里云视频云vPaaS低代码音视频工厂:极速智造,万象空间

    当下音视频技术越来越广泛地应用于更多行各业中,但因开发成本高.难度系数大等问题,掣肘了很多企业业务的第二增长需求.阿里云视频云基于云原生.音视频.人工智能等先进技术,提供易接入.强拓展.高效部署和覆盖 ...

  4. POJ 3268 Silver Cow Party 题解 《挑战程序设计竞赛》

    POJ 3268 Silver Cow Party 奶牛派对:有分别来自 N 个农场的 N 头牛去农场 X 嗨皮,农场间由 M 条有向路径连接.每头牛来回都挑最短的路走,求它们走的路的最大长度? 们其 ...

  5. 【每日一题】8.Shortest Path (树上DFS)

    题目链接:Here 题意总结:给定的是无向图(树),要求把分成 \(n/2\) 对 让权值最小 思路: 看一下范围 在加上是一棵树 所以做法应该是dfs 复杂度为 \(\mathcal{O}(n)\) ...

  6. 新零售标杆 SKG 全面拥抱 Serverless,敏捷交付

    副标题:SKG 渠道中台借助 SAE +大禹打造云原生 DevOPS,提效 60% 作者:陈列昂(SKG).昕辰.龙琛.黛忻 项目背景 未来穿戴健康科技股份有限公司(SKG)是一家专注为个人与家庭提供 ...

  7. vue学习笔记 六、ref定义单个数据

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  8. 基于jquery开发的Windows 12网页版

    预览 https://win12.gitapp.cn 首页代码 <!DOCTYPE html> <html lang="en"> <head> ...

  9. DBA实战面试题(一)

    数据库面试测试题(一) 简述当前主流RDBMS软件有哪些?开源且跨平台的数据库软件有哪些? 参考答案 当前主流的数据库服务器软件有: Oracle . DB2 . SQL SERVER .MySQL ...

  10. pojo层、dao层、service层、controller层的作用

    分层解耦介绍 1.pojo层(model) 实体层 数据库在项目中的类 model是模型的意思,与entity.domain.pojo类似,是存放实体的类. 类中定义了多个类属性,并与数据库表的字段保 ...