找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3796|回复: 5

分享一个2004下的快速算出SSSDT表序的方法

[复制链接]

2

主题

16

回帖

0

精华

初来乍到

积分
30
发表于 2020-8-6 00:17:25 | 显示全部楼层 |阅读模式
本帖最后由 jocleys 于 2020-8-10 23:40 编辑

首先,根据这个(https://github.com/hfiref0x/SyscallTables/blob/master/Binary/Tables/win32k/19041.txt)网址得到syscall的序号。

然后根据 NtUserGetWindowMinimizeRect  SSSDT:0x44A  Syscall:5194 就可以很快速的算出来需要的序号了。
比如说 NtUserQueryWindow的syscall编号是4112,和NtUserGetWindowMinimizeRect的差值是43A,所以他的SSSDT编号就是0x10.

856

主题

2630

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36108
发表于 2020-8-9 04:39:55 | 显示全部楼层
WIN10的SSSDT的函数的序号可以动态获取。

5

主题

156

回帖

0

精华

铜牌会员

积分
119
发表于 2020-8-9 09:54:16 | 显示全部楼层
回應看

77

主题

192

回帖

9

精华

贵宾会员

积分
15602
发表于 2020-8-9 14:10:51 | 显示全部楼层
本帖最后由 tangptr@126.com 于 2020-8-9 14:19 编辑

win10rs1开始直接遍历win32u.dll的导出表就行了,除了那个gDispatchTableValues之外都是SSSDT上的函数。然后index嘛只需要借助反汇编引擎算出syscall/sysenter之前eax的值即可。(与一般系统上ntdll.dll动态解析SSDT是同一个原理)
然后SSSDT上的index是从4096,也就是0x1000开始的,所以需要-4096。
如果用你那张表的话,你可以注意到这张表是按函数名排过序的,所以如果只是搜索一个函数的index就可以直接用二分法。Windows 10 x64 2004有1316个SSSDT函数,那么搜索次数不超过ceil(log(2,1316))+1=12次就能找到任意函数的index。

2

主题

16

回帖

0

精华

初来乍到

积分
30
 楼主| 发表于 2020-8-10 23:42:07 | 显示全部楼层
tangptr@126.com 发表于 2020-8-9 14:10
win10rs1开始直接遍历win32u.dll的导出表就行了,除了那个gDispatchTableValues之外都是SSSDT上的函数。然 ...

感谢!

856

主题

2630

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36108
发表于 2020-8-11 03:43:24 | 显示全部楼层
tangptr@126.com 发表于 2020-8-9 14:10
win10rs1开始直接遍历win32u.dll的导出表就行了,除了那个gDispatchTableValues之外都是SSSDT上的函数。然 ...


遍历WIN32K.SYS的导出表好像也行,那里有一堆__win32kstub__开头的函数。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表