- 注册时间
 - 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的工作流程。 
 
 
 
 
 |   
 
 
 
 |