- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2011-3-23 07:37:27
|
显示全部楼层
原理是在函数头上JMP到自己的函数地址,比如这个截包的HOOK
DWORD flOldProtected;
if(VirtualProtect((LPVOID)0x005B3660, 5, PAGE_READWRITE, &flOldProtected))
{
*(BYTE*)0x005B3660 = 0xE9;
*(DWORD*)0x005B3661 = (DWORD)&SendPackPatch - 0x005B3660 - 5;
VirtualProtect((LPVOID)0x005B3660, 5, flOldProtected, &flOldProtected);
}
上面是zswking大虾的
只懂点DELPHI
可能楼主想错了
0072D065 |. 8BF1 mov esi, ecx //比如要在这插入代码
0072D067 |. 8B4C24 08 mov ecx, dword ptr [esp+8]
0072D06B |. 50 push eax
0072D06C |. 51 push ecx
0072D06D |. E8 6EFEFFFF call 0072CEE0
直接将0072D065 的指令修改成JMP 跳到你自己处理的函数
然后在跳回来
用OD修改后变成
0072D065 |. 8BF1 mov esi, ecx //在这修改的
0072D067 |. 8B4C24 08 mov ecx, dword ptr [esp+8]
0072D065 /E9 FAFF0F00 jmp 0082D064
0072D06A |90 nop
0072D06B |. |50 push eax
0072D06C |. |51 push ecx
0072D06D |. |E8 6EFEFFFF call 0072CEE0
0072D065到0072D067
共6个字节 JMP占5个字节所以用 NOP填充
写的时候自己可以多加几个NOP
ASM
PUSHAD
mov esi, ecx
mov ecx, dword ptr [esp+8]
push eax
push ecx
*******************中间可以CALL 自己处理的函数后再返回
jmp $0072D06D //跳回去执行call 0072CEE0
POPAD
END |
|