- 注册时间
- 2010-8-21
- 最后登录
- 2017-5-30
- 在线时间
- 5 小时
编程入门
- 魔鬼币
- 555
|
运行游戏后,那么游戏驱动保护了R0函数修改或 r3函数被修改。也差不多HOOK了某函数内部字节或函数前几个字节,我们可以用工具对比一下内核数据HOOK前字节或HOOK后字节,以及RIN3函数。
当然可以自己制作工具写个读取内核数据然后自己把字节反汇编,OD官方站点就有开源插件下载,
我们就复盖悼这些被修改的字节。
hook NtOpenProcess inline hook 5字节
kd> u 0x805751e6 NtOpenProcess地址
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 [ebp-2Ch],esi
805751fa 33c0 xor eax,eax
805751fc 8d7dd8 lea edi,[ebp-28h]
805751ff ab stos dword ptr es:[edi]
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 [ebp-2Ch],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 [edx],al
81d8bf19 0000 add byte ptr [eax],al
81d8bf1b 0030 add byte ptr [eax],dh
81d8bf1d 006900 add byte ptr [ecx],ch
81d8bf20 52 push edx
再解释。。。。。。。。。
一段复盖指令
mov eax,xxxxaddr
add eax,xxh
push eax
jmp funtion跳转到函数
当函数返回到EAX值继续运行
push xxx
ret
以下和上面一样方法
未 HOOK inline NtWriteVirtualMemory
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:[00000124h]
80580067 8bf8 mov edi,eax
80580069 8a8740010000 mov al,byte ptr [edi+140h]
8058006f 8845e0 mov byte ptr [ebp-20h],al
80580072 8b7514 mov esi,dword ptr [ebp+14h]
HOOK inline NtWriteVirtualMemory后
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:[00000124h]
80580067 8bf8 mov edi,eax
80580069 8a8740010000 mov al,byte ptr [edi+140h]
8058006f 8845e0 mov byte ptr [ebp-20h],al
80580072 8b7514 mov esi,dword ptr [ebp+14h]
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 [eax],al
81cee631 0000 add byte ptr [eax],al
81cee633 0000 add byte ptr [eax],al
81cee635 0000 add byte ptr [eax],al
81cee637 0000 add byte ptr [eax],al
|
|