wodeao 发表于 2015-2-10 00:30:36

新手过驱动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

yuzhibo 发表于 2015-2-14 16:16:44

占坑编辑ing

757350522 发表于 2015-3-7 01:17:21

我也是坐沙发的

wuyudp 发表于 2015-5-7 11:43:51

好东西。拿走了,感谢楼主分享

Ailixiya 发表于 2015-6-4 00:31:49

好腻害的样子

赵叔叔 发表于 2015-6-13 02:33:24

支持楼主,绝对顶你...谢谢!

゛永卟分离﹏ 发表于 2015-6-21 08:38:21

非常感谢楼主分享

dcl.阿哲 发表于 2015-11-23 17:41:08

谢谢分享,好贴!

醉酒恋红尘 发表于 2016-4-29 21:29:31

支持楼主,感谢楼主!

q605581904 发表于 2016-4-29 21:31:22

支持楼主,感谢楼主!
页: [1] 2
查看完整版本: 新手过驱动HOOK保护的常见方法