Hey leute,
ich bin gerade dabei einen kleinen PacketLogger zu schreiben und stoße da auf ein Problem. Ich möchte nicht groß drum reden und fange am besten gleich mit meinem Problem an:
Also ich möchte gerne diese Funktion hooken:
Aufruf:
Anfang der Funktion:
so hooke ich:
Da es aus meiner Sicht eine __fastcall funktion ist und das Paramter in edx übergeben wird lese ich mit meinem 2. Parameter das Packet aus. Die MessageBox gibt mir auch das komplette Packet aus. Das Problem entsteht wenn ich die orginale funktion aufrufen möchte :
005DBB73 8BD8 MOV EBX,EAX -> hier wird das Register EBX verändert und dadurch ensteht her:
CMP BYTE PTR DS:[EBX+31],0
der Crash.
das Problem ist halt das mein hook irgendwie das eax register verändert und nicht sichert.
Kann mir vlt jemand sagen wie ich das verhindern kann.
mfg Lazeboy
ich bin gerade dabei einen kleinen PacketLogger zu schreiben und stoße da auf ein Problem. Ich möchte nicht groß drum reden und fange am besten gleich mit meinem Problem an:
Also ich möchte gerne diese Funktion hooken:
Aufruf:
Code:
005DBD68 53 PUSH EBX 005DBD69 56 PUSH ESI 005DBD6A 8BF2 MOV ESI,EDX 005DBD6C 8BD8 MOV EBX,EAX 005DBD6E EB 04 JMP SHORT NostaleX.005DBD74 005DBD70 EB 05 JMP SHORT NostaleX.005DBD77 005DBD72 3919 CMP DWORD PTR DS:[ECX],EBX 005DBD74 8BD6 MOV EDX,ESI 005DBD76 8BC3 MOV EAX,EBX 005DBD78 E8 E7FDFFFF CALL NostaleX.005DBB64
Code:
005DBB64 55 PUSH EBP ; ENCRYPT PACKET 005DBB65 8BEC MOV EBP,ESP 005DBB67 6A 00 PUSH 0 005DBB69 6A 00 PUSH 0 005DBB6B 6A 00 PUSH 0 005DBB6D 53 PUSH EBX 005DBB6E 56 PUSH ESI 005DBB6F 57 PUSH EDI 005DBB70 8955 FC MOV DWORD PTR SS:[EBP-4],EDX 005DBB73 8BD8 MOV EBX,EAX 005DBB75 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 005DBB78 E8 C395E2FF CALL NostaleX.00405140 005DBB7D 33C0 XOR EAX,EAX 005DBB7F 55 PUSH EBP 005DBB80 68 40BD5D00 PUSH NostaleX.005DBD40 005DBB85 64:FF30 PUSH DWORD PTR FS:[EAX] 005DBB88 64:8920 MOV DWORD PTR FS:[EAX],ESP 005DBB8B 807B 31 00 CMP BYTE PTR DS:[EBX+31],0
Code:
typedef void (__fastcall *tSend)(DWORD, char *, DWORD);
tSend oSend;
oSend = (tSend)DetourFunc((PBYTE)SendHookAdr, (PBYTE)SendHook,
5);
void __fastcall SendHook (DWORD ecx, char *edx, DWORD esp4)
{
MessageBox(0,edx,0,0);
oSend(ecx, edx, esp4);
}
005DBB73 8BD8 MOV EBX,EAX -> hier wird das Register EBX verändert und dadurch ensteht her:
CMP BYTE PTR DS:[EBX+31],0
der Crash.
das Problem ist halt das mein hook irgendwie das eax register verändert und nicht sichert.
Kann mir vlt jemand sagen wie ich das verhindern kann.
mfg Lazeboy