buffer von gehookter send funktion auslesen??
-
zu 1) was?
zu 2) es wird in dem programm ausschlieslich mit send() und recv() gearbeitet .. SendTo(), RecvFrom(), WSASend(), WSASendTo(), WSARecv() und WSARecvFrom werden nicht benutzt
zu 3) mit NULL wird das senden des packets nicht ausgeführt .. wenn ich statt dem textinhalt nach dem OP Code des packets suche funktioniert es .. wenn dann ein text im chat geschrieben wird, wird es nicht gesendet aber dann is es egal welcher test .. es soll aber nur ein bestimmter text nicht gesendet werden ..
-
ad 1) "buf" muss nicht auf einen Speicherbereich zeigen, wo auch wirklich 18 oder mehr Byte liegen. Wenn du, ohne "len" vorher zu prüfen, einfach auf Byte #9 bis #17 zugreifst, dann könnte es knallen (Access Violation).
ad 2) aha
ad 3) wenn du dem Programm vortäuschen willst, dass alles gesendet wurde, dann solltest du "len" zurückgeben, und nicht 0. 0 ist Unfug. send() kann niemals 0 zurückliefern, ausser wenn "len" als 0 übergeben wurde.
int WINAPI mySend(SOCKET s, char *buf, int len, int flags) { if (len > 17 && buf[9] == 0xD0 && buf[10] == 0x8B && buf[11] == 0x9A && buf[12] == 0x93 && buf[13] == 0x9A && buf[14] == 0x97 && buf[15] == 0x9E && buf[16] == 0x9C && buf[17] == 0x94) { return len; } else return (*oSend)(s, buf, len, flags); }wenn ich statt dem textinhalt nach dem OP Code des packets suche funktioniert es .. wenn dann ein text im chat geschrieben wird, wird es nicht gesendet aber dann is es egal welcher test
Was für ein OP Code? Huch?
Naja, egal. Was soll das überhaupt für ein Text sein? 0x8B, 0x9A, ... lauter Sonderzeichen. Oder was für ein Encoding wird da verwendet?
-
es kommt aber nicht zu einer Acces Violation .. es wird einfach trotzdem gesendet..
hab ich vergessen ^^ jedes byte ausser die länge des packets (Byte 1 und 2) und der OP Code (Byte 3 und 4) werden mit Xor FF verschlüsselt ..
der OP code steht in dem code nich drin weil ich da nich nach suche .. ich habs jetzt mal anders probiert .. das selbe problem:
int WINAPI mySend(SOCKET s, char *buf, int len, int flags) { if ( buf[2] == 0x09 && buf[3] == 0x0A ) { //wenn es ein chat packet is if ( buf[9] == 0xD0 && buf[10] == 0x9E ) { //überprüfe ob "/a" drin steht return NULL; /*wenn ja dann nicht senden*/ } else { return (*oSend)(s, buf, len, flags); } //ansonsten sende es } else { return (*oSend)(s, buf, len, flags); //wenn es kein chat packet is, sende es trotzdem } }buf[2] == 0x09 && buf[3] == 0x0A <-- OP Code
es wird aber trotzdem alles gesendet .. auch wenn ich "/a" in den chat schreibe ...
-
achja .. da das packet ja in einem char array gesendet wird, entspricht Byte 3 natürlich buf[2] und Byte 4 buf[3]
-
okay .. mir wurde grade weiß gemacht dass das theoretisch keine OP Codes sind auch wenn sie bezeichnen was mit dem packet gemacht werden soll (ich wusste nur dass OP Code operation code heisst und dachte das passt :P)
-
(mal so nebenbei es is kacke dass ich meine posts nich bearbeiten kann xD)
also wenn ich len zurückgeben lasse funktionierts auch nicht .. und zwar weil die MySend() funktion NUR eine send funktion ist, wenn sie send zurück gibt .. die funktion ist von mir definiert, das heisst es gibt keinen bestimmten rückgabewert
-
weiss keiner mehr rat? oder is einfach keiner mehr on xD
-
Jetzt hast du schon wieder NULL zurückgegeben.
Schreib halt mal die Daten in ne Datei und schau, ob es die richtigen sind.
Dann kann bei einem compare eigentlich wenig schief gehen...
-
Polko schrieb:
weiss keiner mehr rat? oder is einfach keiner mehr on xD
Im WinAPI-Forum gäbe es vielleicht mehr Interesse.
-
oh warum sagt mir denn keiner dass ich im falschen forum bin xD