Forum: Mikrocontroller und Digitale Elektronik Komm. Protokoll. Checksum entschlüssseln


von Cyblord -. (cyblord)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich versuche seit einiger Zeit eine Reihe von Sensoren auszulesen bzw. 
zu parametriesieren. Kommunikation via seriell. Protokoll usw. ist mir 
bekannt.

Es hapert im Moment eigentlich nur an der Checksum bzw. das was ich 
dafür halte.
Habe ein Bild angehängt mit 2 Datenblöcken aus dem Sensor. Alles in grün 
sind Nutzdaten welche ich kenne und zuordnen kann.
Die 1. Zeile besteht aus "S" für Sensor, Typ und Version. Diese Daten 
fließen wohl nicht in die Checksum ein. Der Rest in Grün wohl schon.
Rot ist die Checksum. Ändert sich mit jeder Änderung der Nutzdaten. Und 
zwar recht einfach. Erhöhe ich ein Byte um 1, so wird auch die Checksum 
um 1 erhöt. Muss also was einfaches sein. Kein CRC usw.
Zur Verdeutlichung habe ich einen zweiten Block angefügt welcher genau 
um ein Byte verändert ist. Dieses Byte wurde nur um 1 hochgezählt. Hier 
sieht wie die Checksum dann ebenfalls um 1 erhöht ist.
Habe schon diverses versucht (Bytes summieren und dann Mod 255 usw).

Außerdem finde ich die Anordnung sehr merkwürdig. Warum steht die 
Checksum derart in der Mitte?
Jede Zeile definiert einen Satz Parameter für einen Sensorwert 
(Alarmschwelle, Adressen usw.) Die unterste Zeile enthält weitere 
Optionen.
Alles ohne Hintergrundfarbe kann ich nicht zuordnen und ändert sich auch 
meist nicht.

Jemand eine Idee wie sich die Checksum (rot) hier berechnet?

Kann gerne noch weitere Blöcke erzeugen.

gruß
cyblord

von c-hater (Gast)


Lesenswert?

cyblord ---- schrieb:

> Rot ist die Checksum. Ändert sich mit jeder Änderung der Nutzdaten. Und
> zwar recht einfach. Erhöhe ich ein Byte um 1, so wird auch die Checksum
> um 1 erhöt. Muss also was einfaches sein. Kein CRC usw.

> Kann gerne noch weitere Blöcke erzeugen.

Na dann mach das mal. Ist doch ganz einfach, wenn du schon festgestellt 
hast, daß eine Erhöhung um 1 auch die CS um 1 erhöht, dann ist es doch 
naheliegend, erstmal herauszufinden, ob dies ein allgemein gültiges 
Gesetz ist. Sprich: du läßt das Byte von 0..255 durchlaufen und schaust, 
was mit der Checksum passiert. Läuft die auch regulär durch (mit einem 
Wraparound irgendwo natürlich), dann ist das Problem bereits gelöst, 
denn du hast mit der Stelle, an der der Wraparound erfolgt, auch 
gleichzeitig die Konstante gefunden, die zu deinem Testbyte addiert 
werden muß, um auf die CS zu kommen.

Dann probierst du dasselbe mit dem nächsten Byte. usw. Ergibt sich 
überall dasselbe Ergebnis, ist das Gesamtproblem gelöst. Du addierst 
sämtliche gefundenen Konstanten und hast damit die Konstante für's 
Gesamtsystem gefunden.

Vermutlich wirst du aber feststellen, daß es doch nicht so einfach ist.

von Cyblord -. (cyblord)


Lesenswert?

c-hater schrieb:
> cyblord ---- schrieb:
>
>> Rot ist die Checksum. Ändert sich mit jeder Änderung der Nutzdaten. Und
>> zwar recht einfach. Erhöhe ich ein Byte um 1, so wird auch die Checksum
>> um 1 erhöt. Muss also was einfaches sein. Kein CRC usw.
>
>> Kann gerne noch weitere Blöcke erzeugen.
>
> Na dann mach das mal. Ist doch ganz einfach, wenn du schon festgestellt
> hast, daß eine Erhöhung um 1 auch die CS um 1 erhöht, dann ist es doch
> naheliegend, erstmal herauszufinden, ob dies ein allgemein gültiges
> Gesetz ist. Sprich: du läßt das Byte von 0..255 durchlaufen und schaust,
> was mit der Checksum passiert.
So einfach ist das nicht. Viele Bytes können nur Werte von 0-15 oder 
0xFF annehmen.

> Läuft die auch regulär durch (mit einem
> Wraparound irgendwo natürlich), dann ist das Problem bereits gelöst,
> denn du hast mit der Stelle, an der der Wraparound erfolgt, auch
> gleichzeitig die Konstante gefunden, die zu deinem Testbyte addiert
> werden muß, um auf die CS zu kommen.
Werde aber mal versuchen einen Wert zu finden welchen ich komplett 
ablaufen lassen kann.

> Vermutlich wirst du aber feststellen, daß es doch nicht so einfach ist.
Das fürche ich auch.

gruß cyblord

von Gisbert (Gast)


Lesenswert?

Also ich kenne die Prüfsummenberechnung als XOR-Verknüpfung der 
Nutzdaten.
Zuerst wird Byte 1 mit Byte 2 XOR verknüpft, das Ergebnis daraus mit 
Byte 3 usw. bis zum letzen Byte der Nutzdaten. Das Ergebnis der letzten 
XOR-Verknüpfung ist dann die Prüfsumme.

von Cyblord -. (cyblord)


Lesenswert?

Gisbert schrieb:
> Also ich kenne die Prüfsummenberechnung als XOR-Verknüpfung der
> Nutzdaten.
> Zuerst wird Byte 1 mit Byte 2 XOR verknüpft, das Ergebnis daraus mit
> Byte 3 usw. bis zum letzen Byte der Nutzdaten. Das Ergebnis der letzten
> XOR-Verknüpfung ist dann die Prüfsumme.

Hab ich natürlich auch schon versucht. Bisher ohne auf die richtige 
Checksum zu kommen.

Hier mal ein Block als Text:
1
53 06 0122
2
3
571B B70F 05 FF 00 FF 0000
4
FF3F 00C0 0A FF 00 FF 0013
5
FF3F 00C0 0B FF 00 FF 0000
6
FF3F 00C0 FF FF 00 FF 0000
7
FF3F 00C0 FF FF 00 FF 0000
8
FF3F 00C0 FF FF 00 FF 0000
9
FFFFFFFFFFFFFFFFFFFFFF06

gruß cyblord

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.