- 注册时间
- 2021-4-16
- 最后登录
- 2024-9-9
- 在线时间
- 4 小时
编程入门
- 龙马币
- 58
|
VT Msr Hook Syscall
什么是系统调用
系统调用是内核提供给应用层的接口,比如在 win10x64 应用层打开一个应用,其实就是 explorer 调用了 CreateProcess,这个函数通过 NTDLL 调用表的 0xC8 号服务,执行 SYSCALL 进入内核。
内核从 SSDT 服务表确定了函数参数个数,复制到内核栈中,取出对应内核函数地址,再 CALL 这个地址。
执行创建进程的一系列操作后,用 SYSRET 返回到应用层,返回到调用 SYSCALL 的地方,这就完成了一次系统调用。
VT如何拦截系统调用
VT 不需要修改任何系统代码,只修改 MSR 寄存器,就可以达到 Hook 的目的。
MSR_LSTAR 这个特殊寄存器里存放的是 SYSCALL 的入口地址,我们只需要写个替换函数,把地址写入这个 MSR 即可完成挂钩,同时也要保存旧的 SYSCALL 地址。
PatchGuard 是微软的用来保护内核的模块,它会检查这个 MSR 是否被修改过,修改过会给个 109 蓝屏。
我们可以利用VT技术对读 MSR 进行拦截,如果它读取了这个 MSR 我们给它返回旧的 SYSCALL 地址,就可以欺骗 PatchGuard。
代码流程如下:
|
|