|
发表于 2011-12-14 15:08:56
|
显示全部楼层
本帖最后由 watchsky 于 2011-12-14 17:01 编辑
我调试了一下,大概知道原因了,我的win7系统的代码是
nt!KiFastCallEntry+0xd9:
83c843d9 8b570c mov edx,dword ptr [edi+0Ch]
83c843dc 8b3f mov edi,dword ptr [edi]
83c843de 8a0c10 mov cl,byte ptr [eax+edx]
83c843e1 8b1487 mov edx,dword ptr [edi+eax*4]
83c843e4 2be1 sub esp,ecx
83c843e6 c1e902 shr ecx,2
83c843e9 8bfc mov edi,esp
83c843eb 3b351c97da83 cmp esi,dword ptr [nt!MmUserProbeAddress (83da971c)]
以下2条指令与XP下相反
83c843dc 8b3f mov edi,dword ptr [edi]
83c843de 8a0c10 mov cl,byte ptr [eax+edx]
xp的汇编指令可以参看
http://bbs.myhack58.com/simple/index.php?t242323.html
唉,真是麻烦啊
索性把jmp的inline hook 改成6字节的,调整相应的hook代码和FakeKiFastCallEntry(),注意6字节的jmp inline hook第一位填成NOP,代码就能在win7下搞掉360了。嘿嘿,测试通过,多谢大牛公开360细节及源码。
其实把inline hook的位置多往前移动几个字节就可以实现版本的兼容了,不过我们就得操作ssdt表了。另外把6字节的jmp hook根据版本进行填充也可以实现系统的兼容。以上有点麻烦,有谁改好了给我发一版啊。 |
|