Frage

Nehmen wir an, dass ich einige Pakete mit einem 16-Bit-Prüfsumme am Ende haben. Ich möchte die Prüfsummen-Algorithmus erraten, verwendet wird.

Für den Anfang von Dump-Daten kann ich sehen, dass eine Byte Änderung des Nutzlast des Pakets vollständig die Prüfsumme ändert, so kann ich davon ausgehen, dass es nicht irgendeine Art von einfacher XOR oder Summe ist.

Dann habe ich versucht mehrere Variationen von CRC16 , aber ohne viel Glück.

Diese Frage könnte mehr in Richtung Kryptographie voreingenommen, aber ich bin wirklich Interesse an einem einfachen statistische Instrumente zu verstehen, um herauszufinden, welche CRC dies sein könnte. Ich könnte sogar drehen, um verschiedene CRC-Algorithmen wenn alles andere fehlschlägt.

Backgroud Geschichte: Ich mit irgendeiner Art von Prüfsumme serielles RFID-Protokoll habe. Ich kann Nachrichten ohne Probleme wiedergeben, und interpretieren Ergebnisse (ohne Prüfsumme check), aber ich kann nicht modifiziert Pakete senden, da Gerät auf den Boden fällt.

bestehende Software verwendet, kann ich Nutzlast von RFID-Chips ändern. Allerdings eindeutige Seriennummer ist unveränderlich, so ich habe keine Möglichkeit, jede mögliche Kombination zu überprüfen. Allthough Ich konnte Dumps von Werten erzeugen, indem sie eins erhöht, aber nicht genug, um erschöpfende Suche für dieses Problem zu machen.

Dump-Dateien mit Daten verfügbar sind, wenn Frage selbst ist nicht genug: -)

Need Referenzdokumentation? A PAINLESS GUIDE TO CRC ERROR Erkennungs-Algorithmen ist gute Referenz, die ich hier nach zu fragen Frage gefunden.

Am Ende nach sehr hilfreicher Hinweis in akzeptierte Antwort, als es CCITT ist, ich dieser CRC-Rechner verwendet, und XOR-verknüpft mit bekannten Prüfsumme erzeugt Prüfsumme 0xffff zu erhalten, die mich zu Schluss, dass die endgültige xor ist 0xffff instread von CCITT 0x0000.

War es hilfreich?

Lösung

Es gibt eine Reihe von Variablen für eine CRC zu berücksichtigen:

Polynomial
No of bits (16 or 32)
Normal (LSB first) or Reverse (MSB first)
Initial value
How the final value is manipulated (e.g. subtracted from 0xffff), or is a constant value

Typischen CRCs:

LRC:    Polynomial=0x81; 8 bits; Normal; Initial=0; Final=as calculated
CRC16:  Polynomial=0xa001; 16 bits; Normal; Initial=0; Final=as calculated
CCITT:  Polynomial=0x1021; 16 bits; reverse; Initial=0xffff; Final=0x1d0f
Xmodem: Polynomial=0x1021; 16 bits; reverse; Initial=0; Final=0x1d0f
CRC32:  Polynomial=0xebd88320; 32 bits; Normal; Initial=0xffffffff; Final=inverted value
ZIP32:  Polynomial=0x04c11db7; 32 bits; Normal; Initial=0xffffffff; Final=as calculated

Das erste, was zu tun ist, einige Proben zu erhalten, indem das letzte Byte sagen zu ändern. Dies wird Ihnen helfen, die Anzahl der Bytes in der CRC herauszufinden.

Ist das ein „hausgemachter“ Algorithmus. In diesem Fall kann es einige Zeit dauern. versuchen ansonsten die Standardalgorithmen.

Versuchen Sie entweder das msb oder das lsb des letzten Bytes ändern, und sehen, wie dies die CRC ändert. Dies wird einen Hinweis auf die Richtung geben.

Um es schwieriger zu machen, gibt es Implementierungen, die die CRC manipulieren, damit sie nicht das Kommunikationsmedium (Protokoll) auswirken wird.

Von Ihrem Kommentar über RFID, impliziert dies, dass die CRC-Kommunikation verwendet ist. Normalerweise wird CRC16 für die Kommunikation verwendet, obwohl CCITT auch auf einigen Systemen verwendet wird.

Auf der anderen Seite, wenn dieses UHF-RFID-Tagging ist, dann gibt es ein paar CRC Systeme - ein 5-Bit ein und einige 16-Bit-Einsen. Diese werden in den ISO-Standards dokumentiert und die IPX-Datenblättern.

IPX:  Polynomial=0x8005; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6B: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
ISO 18000-6C: Polynomial=0x1021; 16 bits; Reverse; Initial=0xffff; Final=as calculated
    Data must be padded with zeroes to make a multiple of 8 bits
ISO CRC5: Polynomial=custom; 5 bits; Reverse; Initial=0x9; Final=shifted left by 3 bits
    Data must be padded with zeroes to make a multiple of 8 bits
EPC class 1: Polynomial=custom 0x1021; 16 bits; Reverse; Initial=0xffff; Final=post processing of 16 zero bits

Hier ist Ihre Antwort !!!!

Nachdem durch Ihre Protokolle gearbeitet, ist der CRC der CCITT ein. Das erste Byte 0xd6 wird von der CRC ausgeschlossen.

Andere Tipps

würden Sie haben alle möglichen Prüfsummen-Algorithmus, um zu versuchen und die man erzeugt das gleiche Ergebnis zu sehen. Allerdings gibt es keine Garantie, auf welche Inhalte in der Prüfsumme enthalten. Zum Beispiel überspringen einige Algorithmen weißen Räume, die zu unterschiedlichen Ergebnissen führen.

ich wirklich sehe nicht, warum jemand, dass, obwohl wissen möchte.

Es ist vielleicht nicht ein CRC sein, es könnte ein Fehlerkorrekturcode wie Reed-Solomon sein.

ECC-Codes sind oft ein wesentlicher Bruchteil der Größe der ursprünglichen Daten, die sie schützt, in Abhängigkeit von der Fehlerrate zu handhaben sie wollen. Wenn die Größe der Nachrichten mehr als etwa 16 Byte, 2 Byte ECC würde nicht ausreichen, um nützlich zu sein. Also, wenn die Nachricht groß ist, sind Sie höchstwahrscheinlich richtig, dass seine irgendeine Art von CRC.

Ich versuche hier ein ähnliches Problem zu knacken und ich eine ziemlich saubere Website, dass Ihre Datei nehmen und laufen Prüfsummen es mit 47 verschiedenen Algorithmen und zeigen die Ergebnisse. Wenn der Algorithmus verwendet, um Ihre Prüfsumme zu berechnen jeder dieser Algorithmen ist, würden Sie es einfach unter der Liste der Prüfsummen finden mit einem einfachen Textsuche erzeugt werden.

Die Website ist https://defuse.ca/checksums.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top