Hey,
ich versuche die Funktion recv zu hooken ohne das der hook entdeckt wird. Kurzsichtig wie ich bin hab ich bei send nen midfunction hook gemacht nur bei recv muss sich der buffer ja erstmal füllen also kann ich erst fast am ende der Funktion hooken. Das hab ich auch probiert nur irgendwie funktioniert das nicht.
recv ollydbg
my code:
mein erster Versuch war es hier anzusetzen
nur fürhte das zu problem und irgendwie krieg ich das mit dem ollydbg debuggen unter 64bit(was ich seit 3tagen habe) nicht auf die kette. Also hab ich aus verzweiflung hier versucht zu hooken
jedoch mit dem Hintergedanken könnte mehrfach aufgerufen werden und somit zu problemen führen und das passierte dann auch.
Weiss vlt jemand von euch wie ich mein denken in die Tat umsetzen kann und recv undetected hooke.
mfg Lazeboy
ich versuche die Funktion recv zu hooken ohne das der hook entdeckt wird. Kurzsichtig wie ich bin hab ich bei send nen midfunction hook gemacht nur bei recv muss sich der buffer ja erstmal füllen also kann ich erst fast am ende der Funktion hooken. Das hab ich auch probiert nur irgendwie funktioniert das nicht.
recv ollydbg
Code:
CPU Disasm Address Hex dump Command Comments 76AA47DF /$ 8BFF MOV EDI,EDI 76AA47E1 |. 55 PUSH EBP 76AA47E2 |. 8BEC MOV EBP,ESP 76AA47E4 |. 83EC 10 SUB ESP,10 76AA47E7 |. 53 PUSH EBX 76AA47E8 |. 33DB XOR EBX,EBX 76AA47EA |. 813D 4870AC76 CMP DWORD PTR DS:[76AC7048],76AA3336 76AA47F4 |. 56 PUSH ESI 76AA47F5 |.- 0F85 F4EEFFFF JNE 76AA36EF 76AA47FB |. 391D 7070AC76 CMP DWORD PTR DS:[76AC7070],EBX 76AA4801 |.- 0F84 E8EEFFFF JE 76AA36EF 76AA4807 |. FF35 4470AC76 PUSH DWORD PTR DS:[76AC7044] ; /Index = 4294967295. 76AA480D |. FF15 4812AA76 CALL DWORD PTR DS:[<&API-MS-Win-Core-Pro ; \KERNEL32.TlsGetValue 76AA4813 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX 76AA4816 |. 3BC3 CMP EAX,EBX 76AA4818 |.- 0F84 D1EEFFFF JE 76AA36EF 76AA481E |. 895D FC MOV DWORD PTR SS:[EBP-4],EBX 76AA4821 |> FF75 08 PUSH DWORD PTR SS:[EBP+8] ; /Arg1 76AA4824 |. E8 47E8FFFF CALL 76AA3070 ; \WS2_32.76AA3070 76AA4829 |. 8BF0 MOV ESI,EAX 76AA482B |. 3BF3 CMP ESI,EBX 76AA482D |.- 0F84 E1EEFFFF JE 76AA3714 76AA4833 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] 76AA4836 |. 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10] 76AA4839 |. 57 PUSH EDI 76AA483A |. 83C1 08 ADD ECX,8 76AA483D |. 8D55 FC LEA EDX,[EBP-4] 76AA4840 |. 52 PUSH EDX 76AA4841 |. 51 PUSH ECX 76AA4842 |. 53 PUSH EBX 76AA4843 |. 53 PUSH EBX 76AA4844 |. 8D4D 14 LEA ECX,[EBP+14] 76AA4847 |. 51 PUSH ECX 76AA4848 |. 8D4D 08 LEA ECX,[EBP+8] 76AA484B |. 51 PUSH ECX 76AA484C |. 6A 01 PUSH 1 76AA484E |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX 76AA4851 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+0C] 76AA4854 |. 8D4D F0 LEA ECX,[EBP-10] 76AA4857 |. 51 PUSH ECX 76AA4858 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] 76AA485B |. 8945 F4 MOV DWORD PTR SS:[EBP-0C],EAX 76AA485E |. 8B46 0C MOV EAX,DWORD PTR DS:[ESI+0C] 76AA4861 |. FF50 54 CALL DWORD PTR DS:[EAX+54] 76AA4864 |. 8BCE MOV ECX,ESI 76AA4866 |. 8BF8 MOV EDI,EAX 76AA4868 |. E8 E3E7FFFF CALL 76AA3050 ; [WS2_32.76AA3050 76AA486D |. 3BFB CMP EDI,EBX 76AA486F |. 5F POP EDI 76AA4870 |.- 0F85 B27F0000 JNE 76AAC828 76AA4876 |. F745 14 00800 TEST DWORD PTR SS:[EBP+14],00008000 76AA487D |.- 0F85 85EEFFFF JNE 76AA3708 76AA4883 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 76AA4886 |> 5E POP ESI 76AA4887 |. 5B POP EBX 76AA4888 |. C9 LEAVE 76AA4889 \. C2 1000 RETN 10
my code:
Code:
unsigned long dwBufRecv = 0;
int lenRecv = 0;
char *lpBufRecv = 0;
unsigned long dwBackRecv = 0x76D9486D;
unsigned long callAddr = 0x76D93050;
__declspec(naked) void hkRecv()
{
__asm
{
call [callAddr]
//push edx
//mov edx, dword ptr [ebp+0xc]
//mov dwBufRecv, edx
//mov edx, eax
//mov lenRecv, edx
//pop edx
push edx
mov edx, dword ptr [ebp+0xc]
mov dwBufRecv, edx
mov edx, dword ptr ss:[ebp+0x8]
mov lenRecv,edx
pop edx
}
lpBufRecv = (char*)malloc(lenRecv+1);
printf("RecvPacket: Len: %d AddrStr: %08X\n", lenRecv, dwBufRecv);
memcpy(lpBufRecv, &dwBufRecv, lenRecv);
for(int i=0; i < lenRecv; i++)
{
printf("%02X ", (unsigned char)lpBufRecv[i]);
}
//MessageBox(0,lpBufRecv,0,0);
printf("\n\n\n");
delete[] lpBufRecv;
__asm
{
jmp [dwBackRecv]
}
MakeJMP((unsigned char*)GetProcAddress(GetModuleHandle("Ws2_32.dll"), "recv")+0x89, (unsigned long)&hkRecv ,5);
mein erster Versuch war es hier anzusetzen
Code:
76AA4883 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 76AA4886 |> 5E POP ESI 76AA4887 |. 5B POP EBX
Code:
76AA4868 |. E8 E3E7FFFF CALL 76AA3050
Weiss vlt jemand von euch wie ich mein denken in die Tat umsetzen kann und recv undetected hooke.
mfg Lazeboy