今天看到了NtQuerySystemInformation()这个函数,就用IDA反了下ntdll.dll,发现了一个很有意思的事。我以前就知道XP下已经用sysenter指令代替了int 2eh来进入Ring0,但是没有想到的是,在NTDLL中,sysenter被封装到了KiFastSystemCall中,我看了几个需要进入Ring0的API,最后都调用KiFastSystemCall来执行sysenter,而KiFastSystemCall是Ring3的API,可以HOOK,这样,不需要钩int 2eh就可以监视一个进程调用了那些需要进入Ring0的API了
下面是发现过程中写的东西
-------------------------------------------------------------------------------------------------------------
ZwQuerySystemInformation: ; NtQuerySystemInformation
.text:7C92E1AA mov eax, 0ADh ; RtlGetNativeSystemInformation
.text:7C92E1AF mov edx, 7FFE0300h ;7FFE0300h好象存着好东西
.text:7C92E1B4 call dword ptr [edx]
.text:7C92E1B6 retn 10h
ZwQuerySystemTime: ; NtQuerySystemTime
.text:7C92E1BF mov eax, 0AEh
.text:7C