Forum: Mikrocontroller und Digitale Elektronik unbekanntes Datenformat - Kodierung gesucht


von Ralf H. (sycorax)


Lesenswert?

Hallo zusammen,

ich habe hier ein unbekanntes Protokoll, bei dem mir GPS Daten 
übermittelt werden. Leider fehlt mir der Algorythmus der beschreibt, wie 
die Werte kodiert wurden. Vielleicht hat ja jemand eine Idee.

Hier mal zwei Datensätze und Inhalte, die übertragen werden:
Satz1: 0x01 0xA8 0xD2 0x56 0x36 0x8F 0x66 0x66 0x2A 0xBE 0x25 0x64 0x0C 
0xEA 0x3B 0x64 0x81

wird dekodiert zu:
Azimuth: 278 Grad
Trip: 851 m
Date: 02.01.12

Satz2: 0x01 0xA8 0xD2 0x56 0xEA 0x53 0xA6 0xBA 0xF6 0x62 0xF9 0xB8 0xD0 
0x36 0xE7 0xB8 0x43

wird dekodiert zu:
Azimuth: 278 Grad
Trip: 847 m
Date: 02.01.12

Die ersten 4 Bytes sind eine Geräte ID, die sich wie folgt berechnet:
01 A8 D2 56 = 001 168 210 86 wird zu 001 + 168*256 : 210 + 86*256 = 
43009:22226 ( kann ich so aus der Quelle lesen )

Nach der ID folgen die Daten. Ändere ich ein Bit, wird der gesamte 
Datensatz ungültig und im original Gerät nicht mehr dargestellt. Ändert 
sich in den übertragenen Werten ein Bit ( Trip: 851m zu 847m ... 
Differenz = 4 , das ist in einem Bit darstellbar - war Zufall, dass ich 
das protokollieren konnte ), ändern sich alle Bytes des Datenpakets.

Hat jemand eine Idee, mit welchem Algorythmus die Messwerte in den Daten 
codiert wurden ?
von Erich (Gast)


Lesenswert?

Einen tollen Betreff haste da ja ausgesucht, und natürlich das ominöse 
Gerät auch nicht benannt.
Es wär' ja auch viel zu einfach als Betreff zu nennen:
   " GPS Datenformat und Protokoll für Gerät XYZ gesucht "
von Klaus T. (gauchi)


Lesenswert?

1. Was ist denn das für ein streng geheimes Gerät, das du da 
auseinandernimmst?
2. bist du sicher, dass die Daten, die angezeigt werden, die sind die 
übertragen werden und in der Anzeige nicht noch intelligenz steckt?
3. Dass sich von einer Messung zur anderen alle Zeichen ändern spricht 
für mich für eine ernstzunehmende Verschlüsselung, da sehe ich mit den 
Daten die hier sind ziemlich schwarz. Anscheinend ist auch eine 
Prüfsumme mit drin, sonst würde das ding nicht sofort erkennen, dass die 
Daten ungültig sind.

4. Dass sich an den Daten genau ein Bit geändert hat, halte ich für eher 
unwahrscheinlich, denn vermutlich wird nicht das Datum sondern die 
komplette Zeit übertragen und "trip" (was auch immer das ist) nicht als 
Integer in Metern gespeichert.
von Stefan (Gast)


Lesenswert?

Hallo,

Ralf Horstmann schrieb:
> Die ersten 4 Bytes sind eine Geräte ID ...

Das 5. Byte scheint eine Zufallszahl zu sein !

eine XOR Verknüpfung aller weiteren Bytes eines Datensatzes mit jeweils 
diesem 5.Byte ergibt eine Bytefolge die für beide Datensätze gleich ist 
(bis auf den 1Bit Unterschied)
Das letzte Byte scheint dann eine Prüfsumme über alle Bytes zu sein 
(ebenfalls mit XOR-Verknüpfungen zusammengebastelt)

Gruss Stefan
von Lötspitze (Gast)


Lesenswert?

Was ist das für eine CPU/µC, die das empfängt?

Ich könnte mir gut vorstellen, daß bei den Daten jede Zahl als 16 Bit 
Integer gespeichert wird (wäre am einfachsten).
Also auch das Datum in Tag, Monat und Jahr.
Falls es ein spezielles Datumsformat ist, dann müßtest du da genauer 
nachschauen, wäre nämlich auch denkbar.

Falls du die Daten, die übergeben werden, vor der Kodierung bestimmen 
kannst, dann würde ich mal für die Meter Angabe einmal 2^16-1 und ein 
anderes mal 2^16 eingeben und dann schauen was passiert und wo sich 
etwas ändert.
Falls es dann zu einem Überlauf kommt, dann sind es auf jedenfall 16 Bit 
pro Zahl.


Im übrigen gibt es nicht nur Verschlüsselungsverfahren, damit ein 
Datensatz sich komplett ändert.
In manchen Fällen genügt schon eine entsprechende Komprimierung, daß 
sich alles ändert. Hier gibt's mehrere mögliche Komprimierungsverfahren.
Das das letzte Byte eine Prüfsumme ist, würde ich auch sagen.
von Ralf (Gast)


Lesenswert?

Danke Stefan, das war schon mal ein sehr guter Tipp. Das zieht sich 
tatsächlich durch die verschiedenen Datensätze. Das nach dem XOR nur ein 
Bit kippt wenn sich der Wert von 847 auf 851 ändert spricht erstmal 
dafür, dass der Wert digital und nicht als einzelne Ziffen übertragen 
wird, dann müssten sich ja zwei Stellen ändern. Jetzt brüte ich darüber, 
wie die Zahlen kodiert sind.

Datensatz mit 851 = 0x03 0x53
Satz1: 0x36 0x8F 0x66 0x66 0x2A 0xBE 0x25 0x64 0x0C 0xEA 0x3B 0x64 0x81
xored:      0xB9 0x50 0x50 0x1C 0x88 0x13 0x52 0x3A 0xDC 0x0D 0x52 0xB7

Datensatz mit 847 = 0x03 0x4F
Satz2: 0xEA 0x53 0xA6 0xBA 0xF6 0x62 0xF9 0xB8 0xD0 0x36 0xE7 0xB8 0x43
xored:      0xB9 0x4C 0x50 0x1C 0x88 0x13 0x52 0x3A 0xDC 0x0D 0x52 0xA9

Mir ist aufgefallen, dass die Stelle der Änderung mit dem dekodierten 
Highbyte des Messwertes XORed das LowByte ergibt, also z.B. 0x50 XOR 
0x03 = 0x53 .. oder 0x4C XOR 0x03 = 0x4F .. das kann allerdings auch 
Zufall sein, ich versuche mal, das an anderen Datenreihen zu prüfen.
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
Noch kein Account? Hier anmelden.