Ich habe eine alte LED-Platine bekommen, an die Sie etwas Text senden und irgendwo aufhängen ... es wurde 1994/95 hergestellt und kommuniziert über eine serielle Schnittstelle mit einer 16-Bit-MS-DOS-Anwendung in was Sie in etwas Text eingeben können.
Also, weil Sie es wahrscheinlich nirgends außer mit DOSBox oder ähnlichen Tricks ausführen konnten, entschied ich mich, es in C # umzuschreiben.
Nach Port-Überwachung der ursprünglichen DOS-exe habe ich festgestellt, dass es wirklich nicht daran interessiert ist, es neu aufzubauen - Anfragen müssen passender beantwortet werden, variierende Bytes, vorher gesendete "ping" Nachrichten, etc ...
Vielleicht kennst du eine ähnliche Prüfsummenroutine / Muster, wie meine Dos-exe verwendet, oder du könntest irgendwelche Tipps geben, um das zu rekonstruieren ... Außerdem, weil ich nur mit der Programmierung vertraut bin und nicht viel Zeit verbringe über Umkehrmethoden und / oder Analyseprotokolle, verurteile mich bitte nicht, wenn dieses Thema eine dumme Idee ist - ich werde mich über jede Hilfe freuen, die ich bekomme ...
Die Nachricht, die wirklich den Text enthält, der angezeigt werden soll, ist 143 Byte lang (nur so lang, weil Füllbytes eingefügt werden, wenn Sie nicht den ganzen Platz mit Ihrem Text verbrauchen) und dass msg ich habe die folgenden Muster bemerkt:
Das vierte Byte (das immer noch zum msg-Header gehört) variiert von einer Liste von 6 oder 7 sich wiederholenden Werten (in meinen Beispielen ist dieses Byte immer 0F).
Die beiden letzten Bytes funktionieren als Prüfsumme
Einige Beispiele :
Bisher bin ich mir absolut sicher, dass die Prüfsumme wirklich von diesem vierten Byte in der Kopfzeile abhängt, denn wenn sich die Prüfsumme ändert, werden die Prüfsummen für den gleichen anzuzeigenden Text völlig anders sein.
Hier ist ein Beispiel für eine vollständige 143-Byte-Zeichenfolge, die "123" anzeigt, nur um Ihnen eine bessere Orientierung zu geben:
%Vor%(die Textinformation beginnt mit dem 2. Byte in der 2. Zeile) 31 00 32 00 33 00 (...) < p>
Leider gibt es im ganzen Web keine Benutzerhandbücher, Dokumentationen, nicht einmal einen wirklichen Beweis dafür, dass dieses Informationstafel-Gerät jemals existiert hat.
Ich schreibe F (s) für die Prüfsumme, die man erhält, wenn man String s eingibt.
Beachten Sie Folgendes:
all dies stimmt mit der Prüfsumme überein, die die folgende Eigenschaft hat, die Prüfsummen nicht selten haben: das Ändern eines gegebenen Bits in der Eingabe XOR immer die Ausgabe mit der gleichen Sache .
Ich sage z. B. voraus, dass F ("210") = F ("211") x oder D0 A6 = 8D C5 und ähnlich F ("222") = 3C A8 x oder C5 C8 x oder 95 F4 = 6C 94 .
Wenn dies zutrifft, gibt Ihnen das Folgende einen brute-force-y-Weg, um die Prüfsumme im Allgemeinen herauszufinden, vorausgesetzt, Sie haben eine Blackbox, die Prüfsummen für Sie berechnet (was Sie anscheinend haben):
Normalerweise ist b ( k ) eng miteinander verwandt - das übliche Muster ist, dass Sie Bits in ein Schieberegister einspeisen - also das oben ist mehr Brute-Force-y, als Sie angesichts des Verständnisses des Algorithmus benötigen würden. Aber ich erwarte, dass es funktioniert, wenn Sie willkürlich ausgewählte Bitmuster als Eingabe einspeisen können.
Wenn nicht, können Sie es möglicherweise noch tun. Z. B. angenommen, dass alles, was Sie tatsächlich wählen können, 29 7-Bit-ASCII-Zeichenwerte an den Positionen 17, 19, ... 73 Ihrer Eingabe ist. Dann können Sie zunächst alle Leerzeichen (0x20) und dann XOR nacheinander mit 1 Bit an den Positionen 0..6 einspeisen. Das gibt Ihnen nicht alle b ( k ), aber es gibt Ihnen genug für beliebige 29-ASCII-Zeichen-Eingaben.
Tags und Links c# reverse-engineering