分享一个2004下的快速算出SSSDT表序的方法
本帖最后由 jocleys 于 2020-8-10 23:40 编辑首先,根据这个(https://github.com/hfiref0x/SyscallTables/blob/master/Binary/Tables/win32k/19041.txt)网址得到syscall的序号。
然后根据 NtUserGetWindowMinimizeRectSSSDT:0x44ASyscall:5194 就可以很快速的算出来需要的序号了。
比如说 NtUserQueryWindow的syscall编号是4112,和NtUserGetWindowMinimizeRect的差值是43A,所以他的SSSDT编号就是0x10. WIN10的SSSDT的函数的序号可以动态获取。 本帖最后由 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。 tangptr@126.com 发表于 2020-8-9 14:10
win10rs1开始直接遍历win32u.dll的导出表就行了,除了那个gDispatchTableValues之外都是SSSDT上的函数。然 ...
感谢! tangptr@126.com 发表于 2020-8-9 14:10
win10rs1开始直接遍历win32u.dll的导出表就行了,除了那个gDispatchTableValues之外都是SSSDT上的函数。然 ...
遍历WIN32K.SYS的导出表好像也行,那里有一堆__win32kstub__开头的函数。
页:
[1]