第一次做dll注入,目的是HOOK掉目标EXE中一个发包call,注入后调试总引起EXE崩溃
,OD看代码发现dll中函数代码前面多了几行,dll中函数代码:
BYTE * __stdcall MyFengBao::Getpack(void)
{
__asm
{
push eax
push edx
mov eax, dword ptr [esp+0x10]
mov edx, dword ptr [esp+0xC]
pushad
push eax
push edx
call m_Display
popad
pop edx
pop eax
push -1
push 0x893908
mov eax,0x5BD977 被HOOK掉的函数入口,跳回原函数
jmp eax
}
return NULL;
}
现在已经成功HOOK掉EXE的发包函数,跳转到自己的Getpack,但是代码多出4行,引起EXE退出,OD里看具体代码:
0D411690 55 PUSH EBP 从这行开始多出来
0D411691 8BEC MOV EBP,ESP
0D411693 53 PUSH EBX
0D411694 56 PUSH ESI
0D411695 57 PUSH EDI 到这行结束
0D411696 50 PUSH EAX 从这里开始是正常在代码
0D411697 52 PUSH EDX
0D411698 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10]
0D41169C 8B5424 0C MOV EDX,DWORD PTR SS:[ESP+C]
0D4116A0 60 PUSHAD
0D4116A1 50 PUSH EAX
0D4116A2 52 PUSH EDX
0D4116A3 E8 08FEFFFF CALL fengbao.0D4114B0
0D4116A8 61 POPAD
0D4116A9 5A POP EDX
0D4116AA 58 POP EAX
0D4116AB 6A FF PUSH -1
0D4116AD 68 08398900 PUSH 893908 ; 入口地址
0D4116B2 B8 77D95B00 MOV EAX,5BD977
0D4116B7 FFE0 JMP EAX
0D4116B9 33C0 XOR EAX,EAX 这后门4行也多出来在代码
0D4116BB 5F POP EDI
0D4116BC 5E POP ESI
0D4116BD 5B POP EBX
0D4116BE 5D POP EBP
0D4116BF C3 RETN
正是多出来在这几行代码引起在问题,前面入栈后面出栈应该是VC编译系统自己加在,但是我在程序在0D4116B7 FFE0 JMP EAX就跳回原发包函数了,导致堆栈不平衡,请教高手指点
程序在XP SP2,VC2008编译,已经选了release模式,还是搞不定
先谢谢各位大大了
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!