Hi!
Ich habe die send&recv function von Winsock gehooked (von einem Spiel).
Das Problem aber ist irgendwie die recv Funktion und zwar liefert sie mir falsche Werte bzw. "unmögliche" Werte. Verglichen mit WPE Pro liefert WPE Pro die richtigen Werte.
Siehe Screens: (Achtets aufs Recv)
Mein Sniffer:
WPE Pro:
Komisch, send funktioniert, aber recv nicht :confused:
Code:
Habe erst vor kurzem angefangen mich mit Sockets zu beschäftigen und kann sein das ich etwas übersehe. Man lernt ja immer wieder was neues dazu, also seits nicht ganz böse zu mir :p :)
Wo ist mein fehler? :/
PS: Falls gefragt, ich leite das cout in die Console, deswegen das cout da.
Ich habe die send&recv function von Winsock gehooked (von einem Spiel).
Das Problem aber ist irgendwie die recv Funktion und zwar liefert sie mir falsche Werte bzw. "unmögliche" Werte. Verglichen mit WPE Pro liefert WPE Pro die richtigen Werte.
Siehe Screens: (Achtets aufs Recv)
Mein Sniffer:
WPE Pro:
Komisch, send funktioniert, aber recv nicht :confused:
Code:
Code:
void printPacket(const char *buf, int len) {
cout << "0000 ";
for ( int i = 0; i < strlen(buf); ++i ) { //weil recv failt, verwende ich strlen(buf) um unnötigen packet inhalt nicht auszugeben
if ( i != 0 && i % 16 == 0 ) {
cout << " ";
int line = ( i / 16 ) - 1;
for ( int j = 0; j < 16; ++j ) {
char c = buf[line * 16 + j];
if ( c >= 32 && c <= 126 ) {
cout << c;
} else {
cout << '.';
}
}
cout << "\n" << hex << setw( 4 ) << setfill( '0' ) << i << dec << setw( 0 ) << " ";
} else if ( i % 16 == 8 ) {
cout << ' ';
}
cout << hex << setw( 2 ) << setfill( '0' ) << ( int( buf[i] ) & 0xFF ) << ' ';
cout << dec << setw( 0 );
if ( i == len - 1 ) {
int remaining = 16 - ( len % 16 );
int fill = ( remaining * 3 ) + 2;
if ( remaining >= 8 ) {
++fill;
}
for ( int j = 0; j < fill; ++j ) {
cout << ' ';
}
int line = ( i - ( ( len % 16 ) - 1 ) ) / 16 ;
for ( int k = 0; k < ( len % 16 ); ++k ) {
char c = buf[line * 16 + k];
if ( c >= 32 && c <= 126 ) {
cout << c;
} else {
cout << '.';
}
}
}
}
cout << "\n\n";
}
int WINAPI send_hook(SOCKET s, const char *buf, int len, int flags){
cout << "Send "<< TimeToString() << ": (Length: " << len << " bytes)\n\n";
printPacket(buf, len);
cout << endl;
//Sleep(10);
return send_detour(s, buf, len, flags);
}
int WINAPI recv_hook(SOCKET s, const char *buf, int len, int flags){
cout << "Recv "<< TimeToString() << ": (Length: " << len << " bytes)\n\n";
printPacket(buf, len);
cout << endl;
//Sleep(10);
return recv_detour(s, buf, len, flags);
}
Habe erst vor kurzem angefangen mich mit Sockets zu beschäftigen und kann sein das ich etwas übersehe. Man lernt ja immer wieder was neues dazu, also seits nicht ganz böse zu mir :p :)
Wo ist mein fehler? :/
PS: Falls gefragt, ich leite das cout in die Console, deswegen das cout da.