360内核 inline Hook 分析
今天下载了360的最新的版本,想看下最近360在内核的钩子与以前有没有变化!
与以前一样还是通过分析找到360下钩子的地方。结果发现与以前没有什么变化。
Hook之前:
kd> u nt!KiFastCallEntry+0xe1
nt!KiFastCallEntry+0xe1:
8053e621 2be1 sub esp,ecx
8053e623 c1e902 shr ecx,2
8053e626 8bfc mov edi,esp
8053e628 3b35d4995580 cmp esi,dword ptr [nt!MmUserProbeAddress (805599d4)]
Hook之后:
kd> u 8053E621
nt!KiFastCallEntry+0xe1:
8053e621 e90abbca01 jmp 821ea130
8053e628 3b35d4995580 cmp esi,dword ptr [nt!MmUserProbeAddress (805599d4)]
360还是inline hook nt!KiFastCallEntry+0xe1 这个地方!
不过,我们不能直接恢复这个钩子,因为360的驱动Hookport.sys会对这个钩子进行保护
我们需要把这保护的地方也打掉才行!
通过简单的分析我们知道具体的检查的函数是在:
kd> u f86b4354
Hookport+0xa354:
f86b4354 a184576bf8 mov eax,dword ptr [Hookport+0xb784 (f86b5784)]
f86b4359 8038e9 cmp byte ptr [eax],0E9h
f86b435c 750b jne Hookport+0xa369 (f86b4369)
f86b435e 8b4001 mov eax,dword ptr [eax+1]
f86b4361 3b0574576bf8 cmp eax,dword ptr [Hookport+0xb774 (f86b5774)]
f86b4367 7405 je Hookport+0xa36e (f86b436e)
f86b4369 e894ffffff call Hookport+0xa302 (f86b4302)
f86b436e 33c0 xor eax,eax
f86b4370 c20c00 ret 0Ch
这个函数很简单比较了第一个字节是不是等于0xE9和后面的4个字节是不是等于0x01cabb0a;
我就直接让这个函数返回
kd> eb f86b4354 c2 0c 00
现在我们再恢复刚才被Hook的地方
eb 8053e621 2b e1 c1 e9 02
到这儿360在内核的Hook被恢复了!我们看一下360在界面上的变化:
不过总体感觉360比以前有进步了!