Hallo, ich versuche gerade in einer Software (Client-Server-Kommunikation) den Prüfsummenalgorithmus herauszufinden, aber ich komme nicht weiter. Es ist kein CRC32 mit Standardpolynom, keine XOR-Verknüpfung, kein CRC32 mit einigen weiteren verbreiteten Polynomen. Da allerdings eine ziemlich einfache Übertragung (gerade mal 2 bit gesetzt, siehe unten) eine so krumme Prüfsumme ergibt, vermute ich, dass es irgendeine "echte" Prüfsumme und nicht einfache Addition oder XOR-Rechnung von irgendwelchen Teilen ist. Wenn ich einige Bytefolgen (8 bis ca. 500 Byte, die meisten haben 204 Byte) und die dazugehörige Prüfsumme (4 Byte) posten würde, könnte mir dann einer der Profis helfen und mal schauen, ob er da etwas bezüglich der Prüfsumme rauslesen kann? Was würde bei so einer Analyse mehr helfen? Datenübertragungen, bei denen die Prüfsumme nahezu gleich ist? Datenübertragungen, bei denen die Nutzwerte möglichst gleich sind? Es gibt leider nur ein einziges ziemlich kurzes Paket mit Prüfsumme, einige weitere habe ich mal in den Anhang gepackt. Daten: 1000 0000 0000 0000 Checksumme: 9000 7a7e Vielen Dank für eure Hilfe, Florian B.
Und du bist dir sicher, dass die Checksumme 32 bit sind? Würde da eher auf die letzten 2 Bytes (16 Bit) tippen.
Es mag vielleicht bei dieser einen Bytefolge so aussehen, aber bei den anderen Übertragungen (Anhang) sieht das schon mehr nach Prüfsumme aus. Ich bin mir relativ sicher, dass das eine 4-Byte-Prüfsumme ist. Ich habe mal über meine gesammelten Übertragungen ein Script laufen lassen - die Prüfsummen sind ungefähr gleichnäßig verteilt. Es wird also wohl keine einfache Summe o. ä. sein da - wie gesagt - viele Pakete so aussehen wie im Anhang und es dann auch viele ähnliche Prüfsummen geben müsste.
Schuss ins Blaue: vielleicht ist das eine Variante von https://en.wikipedia.org/wiki/Fletcher%27s_checksum?
Also eine Standard-Fletcher32-Checksum (wie hier beschrieben: https://gist.github.com/regularcoder/8254723) ist es nicht. Gibt es da noch Varianten von bzw. was müsste ich da variieren?
Hat noch jemand eine Idee, welche Prüfsumme das sein könnte oder ist die Suche danach aussichtslos ohne genauere Anhaltspunkte?
wenn das auf nem PC berechnet wird und nicht auf nem µC wo Speicher und Rechenzeit knapp sind: schau Dir auch mal die MD5- und SHA1-Summe an. Vielleicht ist es ein Teil davon (also z.B. die ersten oder letzten 32 Bit davon). Hab ich auch schon als Prüfsumme verwendet gesehen. Ach so: immer sowohl den tatsächlich übertragenen Klartext, als auch die Binärdaten anschauen. Du weißt ja nicht worüber von beidem die Prüfsumme gemacht wird.
Es handelt sich um ein Spiel für eine Spielkonsole - genauer gesagt die Wii von Nintendo. Ich denke nicht, dass da die Rechenleistung für ne Prüfsumme knapp wird. Sowohl MD5 als auch SHA1 habe ich mir bereits angesehen, keine Übereinstimmungen gefunden, auch nicht teilweise.
Probier mal die hier durch. www.nongnu.org/avr-libc/user-manual/group__util__crc.html
Nach langer Zeit habe ich es endlich rausgefunden! Für den Fall, dass das später jemand findet, der auch die Lösung sucht: Die Prüfsumme ist eine ganz normale CRC32, die allerdings nicht über den Datenbereich gebildet wird, sondern über das ganze Paket inkl. Prüfsumme. Zur Prüfung, ob eine Prüfsumme stimmt, ersetzt man diese durch vier Nullbytes, berechnet dann vom gesamten Paket (inklusive der leeren Prüfsumme) eine CRC32-Prüfsumme. Dabei sollte dann die Prüfsumme herauskommen, die vorher im Paket stand. Eigentlich hätte ich auf eine so simple Lösung viel früher kommen sollen, gerade da dieses "Prüfsumme auf 0 setzen" auch in TCP / UDP gemacht wird... Dennoch Danke an alle, die versucht haben, mir zu helfen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.