- UID
- 83152
注册时间2015-1-17
阅读权限10
最后登录1970-1-1
周游历练
TA的每日心情 | 擦汗 2016-2-28 18:22 |
---|
签到天数: 38 天 [LV.5]常住居民I
|
楼主 |
发表于 2015-2-28 09:01:42
|
显示全部楼层
嗯,我贴下代码吧,容易懂点,其实我就是为了实现稳定的HOOK(不恢复被HOOK的代码){:soso_e103:}
// HOOK sendto跳到这里
__declspec(naked) void MysendtoProxy(void)
{
__asm
{
// 先执行原来的代码
mov edi, edi
push ebp
mov ebp, esp
// 执行我们的过滤函数
/*ESP ==> > 01291E72 /CALL 到 sendto 来自 Client.01291E6C
ESP+4 > 00000001 |Socket = 1
ESP+8 > 00000000 |Data = NULL
ESP+C > 0000000B |DataSize = B (11.)
ESP+10 > 00000016 |Flags = MSG_PEEK|MSG_DONTROUTE|MSG_INTERRUPT
ESP+14 > 00000000 |pTo = NULL
ESP+18 > 00000021 \ToLength = 21 (33.)*/
push [ESP+0x18]
push [ESP+0x14]
push [ESP+0x10]
push [ESP+0xC]
push [ESP+0x8]
push [ESP+0x4] // 我之前HOOK某一个API时用EBP来压栈是可以的,现在用ESP压栈,HOOK我的程序成功,
// 注入QQ后老是获取不到传进来的参数,现在就卡在这里了。。。
call Mysendto
// 跳到原函数+5处执行
mov eax, g_iOldsendtoAddr
add eax, 5
jmp eax
}
}
|
|