- 注册时间
- 2010-7-27
- 最后登录
- 2017-6-3
- 在线时间
- 5 小时
编程入门
- 魔鬼币
- 608
|
其实所有的HOOK,都基本是一样道理。就是勾住你的目标函数,实现你自己的功能。只要你掌握了,HOOK的原理。剩下的就是寻找目标函数了。
今天回忆一下 HOOK SYSENTER。
一:认识SYSENTER
SYSENTER是一个东西?大家都知道调用门,陷阱门,任务门(这里没有照片!_!).。通过他们我们可以从R3到达R0。简单的说SYSENTER就是他们的替代品。SYSENTER是一个入的
过程,SYSEXIT是他的反过程。
我们以OpenProcess为例,看看他是怎么从R3-R0
kernel32!OpenProcess -> ntdll!ZwOpenProcess -> ntdll!KiFastSystemCall -> sysenter -> nt!KiFastCallEntry -> nt!NtOpenProcess -> nt!KiFastCallEntry> nt!
KiServiceExit -> sysexit -> ntdll!KiFastSystemCallRet -> kernel32!OpenProcess
现在来看看SYSENTER是怎么样处理的。
R3-R0需要把相关的工作交给R0层的。包括:设置CS,IP,SS,SP。SYSENTER有三个特殊的寄存器(MSR)来帮助我们完成。
SYSENTER_CS_MSR
SYSENTER_ESP_MSR
SYSENTER_EIP_MSR
他们的地址分别是:0x174,0x175,0x176。我们可以通过指令rdmsr/wrmsr。来读写这三个寄存器。相关代码如下:
_asm
{
mov ecx,0x176
rdmsr
mov OldKiFastCallEntry,eax
}
我们来看看SYSENTER的工作流程。
|
|