SSDT
学习资料:http://blog.youkuaiyun.com/zfdyq0/article/details/26515019
学习资料:WIN64内核编程基础 胡文亮
SSDT(系统服务描述表),刚开始接触什么进程保护XXX啥的,都是看到在说SSDT(虽然说目前很多杀软都已经采用稳定简单的回调姿势了)。这次就弄清楚两个问题:
如何在内核里动态获得 SSDT 的基址;
如何在内核里动态获得 SSDT 函数的地址;
在 WIN32 下,第一个问题就根本不是问题,因为 KeServiceDescriptorTable 直接被导
出了。但是 WIN64 下 KeServiceDescriptorTable 没有被导出。所以必须搜索得到它的地址。
反汇编:uf KisystemCall64
上面看到,貌似直接反汇编uf KiSystemServiceRepeat 试了下,一样可以找到SSDT基址,但是问题是,KiSystemServiceRepeat这个东西的地址找不到,而KiSystemCall64的地址直接可以直接读取指定的 msr 得出。
通过读取 C0000082 寄存器,能够得到 KiSystemCall64 的地址,然后从
KiSystemCall64 的地址开始,往下搜索 0x500

本文介绍了在Win64环境下动态获取SSDT(系统服务描述表)基址和函数地址的方法。在Win32中,KeServiceDescriptorTable被直接导出,而在Win64中则需要通过特定寄存器和特征码搜索。通过读取C0000082寄存器得到KiSystemCall64地址,进而找到SSDT。此外,还讨论了如何在Ring3层获取函数INDEX,并提供了两种计算SSDT函数地址的方法。文章总结了Win32与Win64在SSDT处理上的差异,并给出了测试代码。
最低0.47元/天 解锁文章
4538

被折叠的 条评论
为什么被折叠?



