新手过驱动HOOK保护的常见方法
本帖最后由 wodeao 于 2015-2-10 00:34 编辑新手过驱动HOOK保护的常见方法
运行游戏后,那么游戏驱动保护了R0函数修改或 r3函数被修改。也差不多HOOK了某函数内部字节或函数前几个字节,我们可以用工具对比一下内核数据HOOK前字节或HOOK后字节,以及RIN3函数。
当然可以自己制作工具写个读取内核数据然后自己把字节反汇编,OD官方站点就有开源插件下载,
我们就复盖悼这些被修改的字节。
hook NtOpenProcessinline hook 5字节
kd> u 0x805751e6NtOpenProcess地址
kd> u 0x805751e6//// 没HOOK之前我们看看 下面汇编
ReadVirtual: 805751e6 not properly sign extended
805751e6 68c4000000 push 0C4h
805751eb 68d8b04e80 push offset nt!ObWatchHandles+0x25c (804eb0d8)
805751f0 e846e2f6ff call nt!_SEH_prolog (804e343b)
805751f5 33f6 xor esi,esi
805751f7 8975d4 mov dword ptr ,esi
805751fa 33c0 xor eax,eax
805751fc 8d7dd8 lea edi,
805751ff ab stos dword ptr es:
kd> u 0x805751e6///HOOK之后 HOOK后函数体
ReadVirtual: 805751e6 not properly sign extended
805751e6 68c4000000 push 0C4h
805751eb e9186d8101 jmp 81d8bf08//跳转地址跳转到我们自己定义的函数
805751f0 e846e2f6ff call nt!_SEH_prolog (804e343b)
805751f5 33f6 xor esi,esi
805751f7 8975d4 mov dword ptr ,esi
kd> u 0x81d8bf08///我们自己字义的函数
ReadVirtual: 81d8bf08 not properly sign extended
81d8bf08 68d8b04e80 push offset nt!ObWatchHandles+0x25c (804eb0d8)
81d8bf0d e8297575fe call nt!_SEH_prolog (804e343b)////复盖指令
81d8bf12 e9de927efe jmp nt!NtOpenProcess+0xf (805751f5)这里 跳转原函数前+0xf十六字节
81d8bf17 0002 add byte ptr ,al
81d8bf19 0000 add byte ptr ,al
81d8bf1b 0030 add byte ptr ,dh
81d8bf1d 006900 add byte ptr ,ch
81d8bf20 52 push edx
再解释。。。。。。。。。
一段复盖指令
moveax,xxxxaddr
addeax,xxh
push eax
jmpfuntion跳转到函数
当函数返回到EAX值继续运行
push xxx
ret
以下和上面一样方法
未 HOOK inlineNtWriteVirtualMemory
kd> u 0x80580055
ReadVirtual: 80580055 not properly sign extended
80580055 6a1c push 1Ch
80580057 68408e4f80 push offset nt!MmClaimParameterAdjustDownTime+0xa8 (804f8e40)
8058005c e8da33f6ff call nt!_SEH_prolog (804e343b)
80580061 64a124010000 mov eax,dword ptr fs:
80580067 8bf8 mov edi,eax
80580069 8a8740010000 mov al,byte ptr
8058006f 8845e0 mov byte ptr ,al
80580072 8b7514 mov esi,dword ptr
HOOK inlineNtWriteVirtualMemory后
kd> u 0x80580055
ReadVirtual: 80580055 not properly sign extended
80580055 6a1c push 1Ch
80580057 e9c4e57601 jmp 81cee620
8058005c e8da33f6ff call nt!_SEH_prolog (804e343b)
80580061 64a124010000 mov eax,dword ptr fs:
80580067 8bf8 mov edi,eax
80580069 8a8740010000 mov al,byte ptr
8058006f 8845e0 mov byte ptr ,al
80580072 8b7514 mov esi,dword ptr
kd> u 0x81cee620
ReadVirtual: 81cee620 not properly sign extended
81cee620 68408e4f80 push offset nt!MmClaimParameterAdjustDownTime+0xa8 (804f8e40)///这段也就是复盖指令
81cee625 e8114e7ffe call nt!_SEH_prolog (804e343b)
81cee62a e9321a89fe jmp nt!NtWriteVirtualMemory+0xc (80580061)//原函数+跳到12字节后
81cee62f 0000 add byte ptr ,al
81cee631 0000 add byte ptr ,al
81cee633 0000 add byte ptr ,al
81cee635 0000 add byte ptr ,al
81cee637 0000 add byte ptr ,al
占坑编辑ing 我也是坐沙发的 好东西。拿走了,感谢楼主分享 好腻害的样子 支持楼主,绝对顶你...谢谢! 非常感谢楼主分享 谢谢分享,好贴! 支持楼主,感谢楼主! 支持楼主,感谢楼主!
页:
[1]
2