Forum: Mikrocontroller und Digitale Elektronik Wie wird die Prüfsumme berechnet ?


von Da-Ben (Gast)


Lesenswert?

Hallo,

Ich habe hier ein 15 Jahre altes Gerät mit den ich per RS232 
Kommunizieren kann.
Die Nachricht die es verschickt ist immer gleich lang, nun gibt es da 
noch eine Prüfsumme die ich Umbedingt brauche.

Hier mal ein Beispiel (Bytes):

Folge 1:
067 079 068 069 058 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 035 032 008 000 164

Folge 2:
067 079 068 069 058 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 035 032 000 000 078

Das letzte ist die Prüfsumme, unterscheiden tun sie sich nur um das 
vorvor letzte Byte.

Hab keine ahnung wie die berechnet wurde, währe sehr Glücklich wenn mir 
jemand dabei helfen könnte oder Tipps geben was man vor 15Jahren dafür 
benutzt hat.

von Michael U. (amiga)


Lesenswert?

Hallo,

Möglichkeiten hibt es viele...

Für einfache Sachen wurde auch da noch gern eine simple Addition ohne 
Berücksichtigung des Übertrags oder eine XOR-Verknüpfung genommen.

Als Hex-Werte wäre es handhabbarer.

Gruß aus Berlin
Michael

von Da-Ben (Gast)


Lesenswert?

Danke für deine Antwort.
Mit Addition hab ich es schon probiert kommt aber nicht hin die 
Prüfsummen unterscheiden sich bei ein kleinen änderung ja schon enorm.
Kenn mich mit XOR überhaupt nicht aus hab das nur mal gehört befrage 
gerade Google dazu aber so richtig komm ich da auch zu nichts.

Hier nochmal als HEX:

Folge 1:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 08 00 A4

Folge 2:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 00 00 4E

von gast (Gast)


Lesenswert?

Ist Ascii
Der Unterschied besteht hier nur darin, daß im ersten String ein 
Backspace hinter der Raute gesendet wird und beim zweiten String ein 
Leerzeichen.
Dann kommt die Checksumme (?)


CODE:..................................#BSNUL164
CODE:..................................#.NUL78

(Die Punkte repräsentieren Leerzeichen, 20h,32d)

von Tim (Gast)


Lesenswert?

Vieleicht Crc8?

von Esko (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

meine Vermutung ist, dass es sich um eine ganz simple Prüfsumme handelt.

Mit dem folgenden Programm habe ich 58 bekanntere Prüfsummen von der 
ersten Folge erstellt.
(Datei im Anhang)
http://www.jonelo.de/java/jacksum/index_de.html

von Da-Ben (Gast)


Lesenswert?

Das ist ja nicht so gut die können ja alles mögliche genommen haben.

Die ersten 40 sind ASCII, dann ein byte für Leds, eins für 
Tastendruckbestätigung und dann eben die Prüfsumme.

Vielleicht hat ja noch jemand eine Idee.

von Tim (Gast)


Lesenswert?

Wer sagt eigentlich das die Prüfsumme hier über ALLE Bytes gebildet 
wird?
Vielleicht ja auch nur über die Daten ohne das "CODE:"?

von Da-Ben (Gast)


Lesenswert?

Das ist sozusagen ein Serielles Terminal wenn man sein Code eingegeben 
hat dann gehts weiter durch Menüs und ich hab schon fast alle Bytes 
ausprobiert Prüfsumme ändert sich immer.

Hab nochmal 2 Stück gemacht wo sich die letzten 2 Bytes diesmal geändert 
haben, mach nochmal alle rein:

Byte
Folge 1:
067 079 068 069 058 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 035 032 008 000 164

Folge 2:
067 079 068 069 058 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 035 032 000 000 078

Folge 3:
067 079 068 069 058 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 035 032 000 068 057

Folge 4:
067 079 068 069 058 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 032 
032 032 035 032 008 068 211

Hex
Folge 1:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 08 00 A4

Folge 2:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 00 00 4E

Folge 3:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 00 44 39

Folge 4:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 08 44 D3


Wäre echt toll wenn das jemand knackt bin schon paarmal an diesen Gerät 
verzweifelt und würde ungern kurz vorm Ziel aufgeben.

von Tom (Gast)


Lesenswert?

Such mal Gesetzmässigkeiten und Abhängigkeiten, zum Beispiel ist die 
Prüfsumme immer ungerade, wenn das vorletzte Byte $44 ist - und so 
weiter.

Diese Zusammenhänge mit vielen Beispielen überprüfen, und die 
richtigen zusammenfassen - was besseres weiss ich auch nicht.

von Da-Ben (Gast)


Lesenswert?

Habe die ganze Nacht rumgerechnet aber noch zu nix gekommen, bin nur 
sicher das die einzelnen Bytes nicht addiert wurden weil kleinste 
änderungen schon eine ganz andere Prüfsumme ergeben.
Das gerät hat ja auch kein riesigen Speicher das man da große Integer 
rechnungen anstellen kann, es kann trotzdem die Prüfsumme in weniger als 
5ms haurrausfinden.

Hab nochmal 2 Folgen diesmal hat sich nur eine Stelle um 1 erhöht:

Folge 1:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 33 (<-hier) 20 20 23 20 00 00 EA

Folge 2:
43 4F 44 45 3A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 
20 20 20 20 20 20 20 20 20 20 20 34 (<-hier) 20 20 23 20 00 00 9C

von Dieter Stotz (Gast)


Lesenswert?

Hallo,

kannst Du denn beliebige Werte vorgeben? Falls ja, dann mach doch mal 
alle Bytes 00, und nur immer eines 01. Vielleicht kommt man über die 
Gewichtung drauf.

Dieter

von Frank L. (franklink)


Lesenswert?

Hallo,

schau mal hier:

http://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung

Ich vermute, dass die Prüfsumme nicht errechnet wird, sondern per 
Hardware-Schieberegister.

Gruß
Frank

von Kai G. (runtimeterror)


Lesenswert?

Dein Beitrag von 21:55 ist interessant:

Die Differenz zwischen den Prüfsummen der Folgen 1 und 2 ist eine andere
als zwischen 3 und 4, obwohl in beiden Fällen dasselbe Bit geändert 
wurde.

Das ist für die meisten einfachen Prüfsummenverfahren ungewöhnlich. 
Einfaches addieren, addieren mit Gewichtungen, shiften und XOR fallen 
damit raus. Denkbar wäre noch die Weiterverarbeitung des 
Additionsübertrages - dazu müsste man mal versuchen die Summe der 
Byte-Werte gering (<< 256) zu halten, was bei ASCII nicht unbedingt 
geht.

Im Moment fällt mir nichts ein, außer wie bereits vorgeschlagen die 
Testreihe zu verlängern und Regelmäßigkeiten zu suchen. Insbesondere das 
Erhöhen eines Bytes um 1 ist sehr aufschlussreich. Auch die Prüfsumme 
von n identischen Bytes gibt gute Hinweise (speziell bei XOR).

Sind die Prüfsummen immer identisch, wenn auch die Folge identisch ist? 
Nicht, dass das Byte was anderes bedeutet.

Eventuell auch ein ECC Algorithmus, wobei ich denke, dass das zu viele 
Bits für ein Byte Korrekturdaten sind.

Vielleicht ist auch nur ein Teil des letzten Bytes die Prüfsumme... 
grübel...

@Frank Link
>Ich vermute, dass die Prüfsumme nicht errechnet wird, sondern per
>Hardware-Schieberegister.

Fällt für mich auch unter die Kategorie "berechnen" ;)
x << 1 == (x * 2) MOD 256
x >> 1 == ((x - x MOD 2) / 2)
uns so halt... oder meintest du was anderes?

Gruß

Kai

von Karl H. (kbuchegg)


Lesenswert?

Du wirst es zwar schon versucht haben, aber Fragen kostet nichts.

> 15 Jahre altes Gerät

Welches?
Vielleicht hat noch jemand Unterlagen dazu oder findet über
Google was raus.

von Frank L. (franklink)


Lesenswert?

Hallo Kai,
wie der Beitrag beschreibt, kann man CRC-Checksummen sehr einfach mit 
Hardware erzeugen. Wenn die Maschine 15 Jahre alt ist, ist dies sehr 
wahrscheinlich.

Ich glaube kaum, dass wir es hier mit einem aufwändigen Verfahren zu tun 
haben. Wenn ich heute Abend Zeit habe, werde ich das ganze mal in eine 
Software vom mir reinkippen, die wir früher genau für solche Zwecke 
gebaut haben. Wenn es ein CRC-Code ist, kann ich auch die Codierung 
ermittelt.

Gruß
Frank

von Da-Ben (Gast)


Lesenswert?

Das ist ja Super das hier noch so viele vorschläge kommen.

Ich lasse jetzt mal alle Posts ausser Dieters unbeantwortet weil er hat 
mich dazu angeregt.
Zu den gerät gehört noch ein Bedientteil und wenn das die flasche 
Prüfsumme erhält dann sendet es ein E wie Error zurück.
Zum glück besteht die Prüfsumme nur aus einen Byte, da hab ich kurz ein 
Programm geschrieben was das Prüfbyte von 0 bis 255 durchgeht und wenn 
kein Error zurückkommt hab ich die passende Prüfsumme zu jeder 
beliebigen Folge.

Habe hier jetzt mal 5 Stück gemacht, schreibe nur das erste und die 
Prüfsumme, weil die anderen 41Stück auf 000 sind:

1. Erstes Byte: 000 Prüfsumme: 000
2. Erstes Byte: 001 Prüfsumme: 124
3. Erstes Byte: 003 Prüfsumme: 132
4. Erstes Byte: 004 Prüfsumme: 049
5. Erstes Byte: 005 Prüfsumme: 077

Wollte dann noch wissen was für Folgen ich prüfen sollte.

von Dieter Stotz (Gast)


Lesenswert?

Ben,

das würde ich noch mit anderen Bytes machen, also z. B. mit dem #01 und 
#02. Mal sehen, ob die Prüfsummen anders sind. Immer jeweils die 
restlichen Bytes wieder auf Null belassen.

Dieter

von Karl H. (kbuchegg)


Lesenswert?

Und bitte, bitte, bitte:
Gewöhn dir den Unsinn mit den Dezimalzahlen wieder ab.
Nimm Hex. Wenn es irgendwelche Bitzusammenhänge gibt,
dann kann man die in Hex eventuell sehen, weil die Profis
hier Hex in untr 2 Zehntel Sekunden in die binäre Schreibweise
im Kopf umwandeln können. Mit Dezimalzahlen siehst du aber überhaupt
nichts ohne zum Taschenrechner zu greifen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bei einer so breiten Streuung der Prüfwerte ist es wohl eine 
Hashfunktion. Die sind extra dafür ausgelegt, dass bei geringen 
Änderungen im Klartext eine möglichst grosse Variation in der Prüfsumme 
(Hash) auftritt.

Wenn dein Gerät z.B. ein Zugangskontrollsystem ist, besteht eine grosse 
Chance, dass der Hashgenerator ein spezieller IC ist. So ähnlich wie ein 
Hashgenerator in einer Smartcard. Da kannst du dann lange analytisch 
rangehen. Vielleicht hilft eine Literaturrecherche zu Hashfunktionen, 
die als Ausgabe genau ein Byte liefern. Oder eine Literaturrecherche zu 
Geräten, die 33-Byte Klartext (plus 2 weitere Byte Nutzlast) haben. Im 
Bereich der Datenerfassungsgeräte gibt es da was.

ABER, du hast ja, so wie ich sehe, die Möglichkeit eine Brute-Force 
Attacke zu reiten. Bastele deinen benötigten Klartext und probiere max. 
256 Werte durch, bis die richtige Prüfsumme ermittelt ist. Im Mittel 
hast du in ca. 0,6s dein Prüfbyte für einen Klartext...

von Da-Ben (Gast)


Lesenswert?

Hab jetzt schon eine Menge probiert und es gibt keine Muster die 
offensichtlich sind auch nicht in Bitcode.

Hab mal die Bausteine angeschaut da wären:

Der MC ist ein "M37450S1SP"
http://www.datasheetcatalog.net/de/datasheets_pdf/M/3/7/4/M37450S1SP.shtml

2 Eproms
http://www.datasheetcatalog.com/datasheets_pdf/X/2/8/H/X28HC256PI-15.shtml

1 CMOS GATE ARRAYS (Weiss nicht was das ist, Irgendein Speicher?)
http://www.datasheetcatalog.com/datasheets_pdf/M/B/6/0/MB606XXX.shtml

2 USART 82C51A-2
http://www.datasheetcatalog.com/datasheets_pdf/8/2/C/5/82C51A.shtml

1 MSM82C55A-2
http://www.datasheetcatalog.com/datasheets_pdf/M/S/M/8/MSM82C55A.shtml

1x 256kbit SRAM

Ne ganze menge Schieberegister und sonst keine wichtigen Chips mehr.
Sieht mir nich so aus als wenn ein Hash in ein extra baustein erzeugt 
wird, bin echt Ratlos.

Und so schnell geht das mit der Brute-Force nicht das dauert schon ein 
wenig bis ein Error zurückkommt dazu kommt noch das ein byte 013 oder 
002 ist nix zurückkommt weil das die start ende anweisung ist.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Da-Ben wrote:
> 1 CMOS GATE ARRAYS (Weiss nicht was das ist, Irgendein Speicher?)
> http://www.datasheetcatalog.com/datasheets_pdf/M/B/6/0/MB606XXX.shtml

Kein Speicher, sondern ein seltsamer Vorläufer eines CPLD oder FPGA oder 
ASIC.

Im Unterschied zu einem CPLD oder FPGA kann ein User den IC nicht ohne 
den Hersteller programmieren (Bild Post-Design-Process im DB). Der User 
gibt ein "Logic Design" und ein "Test Data Design" ab und Fujitsu stellt 
die Innereien des IC ein.

In dem Ding kann man logische Schaltungen basteln, die sonst viele 
schwarze Käfer auf der Platine erfordern. Das wäre eine Anwendung des 
Fujitsu-IC als eine IO-Anpassung zwischen dem µC und externer 
IO-Hardware.

Ich halte es auch für möglich, mit dem Ding eine Hardware-Hashfunktion 
zu implementieren.

Die Nutzung des Fujitsu-IC als Speicher wäre bei entsprechender 
Programmierung auch möglich, IMHO aber zu aufwendig. Da wäre ein 256kbit 
SRAM, wie er eh an Bord ist, wesentlich schlauer.

Ein Wissens-/Nachbau-Schutz mit einem solchen IC besteht darin, dass es 
aufwändig ist, diesen IC zuerst analytisch oder brute-force zu verstehen 
und später dann nachzubilden. Wenn man es darauf anlegt, reicht es nicht 
zu schauen, was geht rein und was kommt raus - die Ausgabe ist u.U. von 
einer langen Latte von Eingaben in der korrekten Reihenfolge abhängig...

Wenn es so ist, hängt es davon ab, wie gut der Rest entworfen wurde. 
Steht z.B. an einem Pin ein Pegel an, wenn die Prüfsumme richtig oder 
falsch ist? Wertet der µC nur diesen Pin aus oder braucht er das 
konkrete Ergebnis zum Weiterarbeiten (z.B. zum Sprung in bestimmte 
Programmteile).

von Da-Ben (Gast)


Lesenswert?

Hm das ist nett das du mir den Baustein erklärst, weiss ich jetzt 
wenigstens was das ist.
Was ich wohl vergessen habe zu schreiben das auf der anderen Seite 
eigentlich nur ein MC und ein paar Schieberegister sind.
Hab den herrsteller mal eine E-Mail geschrieben glaube aber nicht das da 
was laufen wird ohne viel Geld.
Ansonsten würde ich mich natürlich über alle möglichen Tipps freuen, 
habe ja schon soviele das ich mich bis zu mein Lebensende damit 
beschäftigen könnte :) aber kann ja sein das jemand noch "die" Idee hat.

von Decoder (Gast)


Lesenswert?

Was gebraucht wird um das etwaige CRC-Polynom zu bestimmen sind Folgen 
dieser Art:

0x01 0x00 0x00 ...
0x02 0x00 0x00 ...
0x04 0x00 0x00 ...
0x08 0x00 0x00 ...
0x10 0x00 0x00 ...
0x20 0x00 0x00 ...
0x40 0x00 0x00 ...
0x80 0x00 0x00 ...

und

0x01 0x00 0x00 ...
0x00 0x01 0x00 ...
0x00 0x00 0x01 ...

usw...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Schau auch im Bedienteil nach, ob dort der gleiche IC drin ist.

Wenn ja, ist die Funktion des IC als Prüfbyteberechner 
hochwahrscheinlich. Wenn nein, ist es eher ein IC für IO-Aufgaben und 
Zoo für Logikgatter.

Hast du einen Logikanalyzer und kannst analysieren, ob und wann das 
Rrüfbyte an den Ausgängen des IC (oder Eingängen des µC) erscheint?

Wenn du mit den Bitfolgen weitermachst:

Versuche auch herauszufinden, welches die Klartextbytes sind, d.h. 
welche Bytes nicht in das Prüfbyte einfliessen bzw. statisch sind 
("Code:"? "#").

Vielleicht kannst du auch auf den ASCII-Text verzichten und nur die 
beiden Bytes nach dem # benutzen (LEDs und Tastendrücke). Da sind 
wesentlich weniger mögliche Prüfbytes zu berechnen.

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.