SSDT
学习资料:http://blog.csdn.net/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 字节左右(特征码是 4c8d15),就能得到
KeServiceDescr