前段时间看了zhouws的hide idt hook src,突然以前自己也瞎搞了一个隐藏IDT HOOK的玩意,差不多快烂了,于是整理一下也发布出来.

原理:与zhouws不同, 这个主要Pass检测, DrX Hook + 代码流离

lkd> u KiTrap01
nt!KiTrap01:
8054311c 6a00            push    0
8054311e 66c74424020000  mov     word ptr [esp+2],0
80543125 55              push    ebp
80543126 53              push    ebx
80543127 56              push    esi
80543128 57              push    edi
80543129 0fa0            push    fs
8054312b bb30000000      mov     ebx,30h

A为8054311e, B为80543125

首先在B处设Inline Hook,这里我使用int 0C7做代理跳转到NewDBEntryAB, 然后在A下读写硬件断点,注意读写跟执行硬件断点是分离

当A处被读取的时候,NewDBEntryAB会捉捕到,然后清除断点,还原INLINE HOOK,接着在A处设INLINE HOOK,在B处设读断点

同理,B处被读取的时候,A处Inline HOOK, B处读断点,这样循环执行,总的来说就是跟检测代码躲猫猫.



效果如下:


不过WINDBG u KiTrap01貌似没被PASS,代码正常运行,弄了好久都搞不明白,求指教


附上代码,环境VS2008,WinDDK 7600.16385.1
系统XP SP2

上传的附件 HideIDTHook.rar