首页
社区
课程
招聘
[原创]windows x64 hook KiSystemCall64
发表于: 2016-6-7 17:56 19438

[原创]windows x64 hook KiSystemCall64

2016-6-7 17:56
19438
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函数地址


[课程]Android-CTF解题方法汇总!

收藏
免费 3
支持
分享
最新回复 (5)
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
火速留名.学习一下.
2016-6-8 06:47
0
雪    币: 3700
活跃值: (3817)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
学习! 感谢楼主!
2016-11-8 19:49
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
路过,谢谢分享
2016-11-8 20:29
0
雪    币: 9
活跃值: (319)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
请教下hook cpuid 和 硬盘序列号,非patch
2016-11-8 20:57
0
雪    币: 12848
活跃值: (9108)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
看了下源码,大概是复制一份原始内核的KiSystemCall64,修复offset,wrmsr走新内核....

个人还是喜欢ept hook
2016-11-10 10:39
0
游客
登录 | 注册 方可回帖
返回
//