欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]windows x64 hook KiSystemCall64

[原创]windows x64 hook KiSystemCall64

windows x64 hook KiSystemCall64
    需要在x64下做进线程监控,常规SSDT会被PG蓝屏,于是结合VT,替换MSR_LSTAR
(0xC0000082)的值,重载KiSystemCall64函数,构建fake_SSDT表来达成目的。
    x64没有直接跳转到64位地址的指令,在不改变任何寄存器值的情况下,发现有以下两种
方法达到跳转的目的:
1.
push    rax
mov     rax, 1234567812345678h
xchg    rax, [rsp]
retn
2.
jmp qword ptr [$+offset32 of QwordArray]  // FF25 XXXXXXXX
...
QwordArray[]
0x1234567812345678
0x1234567812345678
0x1234567812345678
0x1234567812345678
...
    KiSystemCall64 下断必须位于这三句后面,因为这里,内核栈才设置好,调试机制依赖
内核栈;
.text:000000014007F640 KiSystemCall64  proc near
.text:000000014007F640                 swapgs
.text:000000014007F643                 mov     gs:10h, rsp
.text:000000014007F64C                 mov     rsp, gs:1A8h 
PS:
    调试过程中发现一个问题:构建SSDT表一定要占够64字节,后32字节需要清零,后面要紧
接着ShadowSSDT。
代码见:https://github.com/DeDf/HookSyscall64 (仅在win7x64测试通过)
实现具体hook时,需要打开RebuiltSsdt里的注释,SsdtAddress[i]里置入对应Hook函数地址

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功