Frage:
Firmware mit JTAG extrahieren
sherrellbc
2015-06-27 23:36:54 UTC
view on stackexchange narkive permalink

Ich habe mich umgesehen und einige Beispiele für Artikel gefunden, die behaupten, über die JTAG-Schnittstelle Firmware von einem Gerät extrahiert zu haben. Ich habe weiter gelesen, dass es kein allgemeines Verfahren dafür gibt, da jeder Hersteller unterschiedliche Einschränkungen und Anforderungen auferlegt.

Also, ich habe diese Kaffeemaschine, die jedes Mal, wenn sie benutzt wird, ein großes Durcheinander macht. Ich dachte, ich würde mich an einem Reverse Engineering versuchen, indem ich das Ding zerlege und möglicherweise die Firmware extrahiere / patche. Nach einigem Umkehren und Analysieren der Konstruktion ist die Gesamtarchitektur wirklich einfach. Es gibt einige Schalter, die anzeigen, ob das Gerät sicher mit dem Brühen beginnen kann oder nicht, sowie ein Thermoelement zur Messung der Wassertemperatur und eine Pumpe zur Erzeugung von Überdruck, um das erwärmte Wasser zum Kaffeesatz zu bringen. Ich könnte den alten Controller leicht wegwerfen und durch meine eigene Logik ersetzen, aber ich dachte, ich würde zuerst versuchen, die vorhandene Hardware zu verwenden, da ich sonst die Steuermechanismen für den mitgelieferten LCD-Bildschirm umkehren müsste, und das scheint nicht sehr einladend zu sein .

Der Controller, den ich auf der Platine gefunden habe, ist die Sino Wealth SH79F1619 - Geräteseite. Nach dem, was ich im Datenblatt gefunden habe, verfügt dieses Gerät über einen kompatiblen Befehlssatz mit der 8051 -Familie von Intel. Ich habe mich kurz umgesehen und festgestellt, dass es Compiler gibt, die mit dieser Architektur arbeiten, daher mache ich mir keine Sorgen, dass der Code nach dem Extrahieren neu kompiliert wird - aber wir werden bei Bedarf darauf zurückkommen.

Dieses Gerät liest das Datenblatt (und ganz offensichtlich von der Karte) durch und unterstützt die JTAG-Debugging- / Programmierschnittstelle. Die einzige Information, die ich im Zusammenhang mit diesem Unternehmen finden konnte, war, dass es möglich war, ein Flash-Lese- / Schreibprogramm durchzuführen, vorausgesetzt, die Schutzbits wurden bei der Freigabe nicht gesetzt. Wenn man bedenkt, dass dieses Gerät eine einfache Kaffeemaschine ist, sind sie vielleicht nicht eingestellt? Weiter habe ich die folgende Anweisung auf Seite 20 im Datenblatt gefunden:

Erst nachdem die vier Pins die angegebene Wellenform eingegeben haben, wechselt die CPU in den Programmiermodus

Welche Eingangswellenformen sind also erforderlich?

Die einzigen anderen Informationen, die ich finden konnte, waren (Seite 19):

Flash-Programmierer im ICP-Modus senden Schreib- / Lesecode-Anweisung zum Ausführen von Schreib- / Lesecode

Ein bisschen mehr Forschung ergab, dass der Begriff Wellenform wahrscheinlich nicht der beste Deskriptor war, der hätte verwendet werden können, da wir gemäß der folgenden Zustandsmaschine einfach eine Reihe von durchführen müssen Register schreibt, um in den Programmiermodus zu gelangen (Seite 23):

enter image description here

Vermutlich besteht die Idee darin, dass wir zuerst über den oben in beschriebenen Programmiermodus in den Programmiermodus wechseln das Zustandsdiagramm. Angenommen, wir kommen so weit, was passiert als nächstes? Lesen wir jede einzelne Zeile von der Flash-Adresse 0 bis zur Flash-Adresse MAX? Wie funktioniert das über JTAG?

Und weiß jemand möglicherweise, worauf sich dieser Teil des Zustandsdiagramms bezieht? enter image description here

Dies ist die eigentliche Hardware, um die es geht:

enter image description here enter image description here

Diese 4 blanken Pads rechts vom Controller sind die JTAG-Pins.

Zusammenfassend :

  • Gibt es einen Hinweis darauf, um welche Art von LCD es sich bei diesem Bildschirm handelt? Allgemeine Modell- / Befehlsinformationen?
  • Wie können wir feststellen, ob die Schutzbits aktiviert sind?
  • Wie werden Befehle (wie das Set-Register IB_CON4 = 0x9H) mit JTAG gesendet?
  • Wie lesen wir den Flash, wenn wir uns im Programmiermodus befinden?
  • Angenommen, das Schutzbit ist gesetzt, haben wir kein Glück?
  • Lesen wir nur den gesamten Flash-Adressraum und speichern ihn in einer Datei?
  • Was machen wir als nächstes, wenn wir die Binärdatei haben? Einen Parser schreiben, um die Binärdatei in ein lesbares ASCII zu konvertieren?
  • Welche Möglichkeit besteht, das Gerät zu blockieren und / oder die aktuelle Firmware zu löschen?
Wenn Hardware wiederverwendet werden kann, können Sie die Hardwareabschnitte im Detail bewerten.später kann die MCU allein isoliert werden.Der Rest der Hardware kann von einer neuen MCU gesteuert werden.Ich würde diesen Weg bevorzugen, um bald den Kaffee zu bekommen
@Umar, schlagen Sie vor, den Firmware-Speicherauszug zu überspringen und alles mit benutzerdefinierter Logik und einem neuen Controller zu steuern?Der Controller und das LCD sind unverändert auf derselben Platine verlötet, aber die Thermoelementwerte und Informationen zum Schaltzustand werden über ein Flachbandkabel eingegeben.Wie würden Sie eine Schnittstelle mit dem Bildschirm vorschlagen, der sich bereits auf der Platine befindet?
@sherrellbc - Es ist wirklich * wirklich * unwahrscheinlich, dass Ihre Kaffeemaschine echte Thermoelemente verwendet.Sie sind ziemlich teuer.Es werden wahrscheinlich Thermistoren verwendet.
@ConnorWolf, bis zu diesem Grad haben Sie wahrscheinlich Recht.Ich habe nur angenommen, dass es sich um Thermoelemente handelt, aber es könnten genauso gut Thermistoren sein.Tatsächlich ist der Ausgang ein variabler Gleichstromwert, der von der Steuerung gelesen wird, sodass noch mehr Hinweise auf Thermistoren vorliegen.
LCD-Treiber: - 4 x 12 Punkte (1/4 Duty 1/3 Bias) gemäß Datenblatt.Dies deutet darauf hin, dass möglicherweise kein Controller auf dem LCD vorhanden ist.SEG-Leitungen und COM-Leitungen werden direkt vom internen LCD-Treiber angesteuert.Wenn Sie die LCD-Pins zur MCU zurückverfolgen, sollte der Pin leicht aus dem LCD herauskommen.
Können Sie bitte diese Frage der SE ** Embedded System ** Seite posten?Da es sich um eine Firmware-Frage handelt, gehört sie zur Site ** Embedded System **.
Einer antworten:
metacollin
2016-12-29 17:37:02 UTC
view on stackexchange narkive permalink

Ah, JTAG. Der Standard, der universell ist, da er nutzlos ist.

JTAG ist ein universeller 'Standard', vor allem, weil es alles definiert, ohne wirklich etwas zu definieren. Denken Sie daran, es begann als ein Weg, ganze Leiterplatten und ihre Integrität im Allgemeinen zu testen. Es wurde nie als Programmier- / Debugging- / In-Schaltungsemulationsprotokoll definiert (und soll es auch nicht sein), obwohl es ein großartiger physischer Bus ist Implementieren Sie solche Funktionen auf. Eine der praktischeren Funktionen ist die hohe Verkettbarkeit, sodass Sie viele Geräte auf einer Karte verketten und alle (oder was auch immer) mit nur einer JTAG-Schnittstelle testen können.

JTAG ist eigentlich nur eine Zustandsmaschine, mit der Sie auf Speicheradressen zugreifen können. Es gibt kein Protokoll oder System an, um irgendetwas zu tun, sondern stellt lediglich das Medium bereit. Wie oder was Sie tatsächlich über die JTAG-Schnittstelle tun, ist sehr spezifisch für den betreffenden Chip. Oft werden diese Funktionen nicht veröffentlicht und erfordern die Verwendung von vom Hersteller bereitgestellter Hardware und Software.

Eine 'JTAG-Programmier- / Debugging-Schnittstelle' ist keine standardisierte Sache. Es wird in gewisser Weise die JTAG-Zustandsmaschine verwenden, aber es gibt hier keine Auswirkungen auf Interoperabilität oder Universalität. Diese Schnittstelle ist so einzigartig und spezifisch für den betreffenden Chip, wie es der JTAG-Standard zulässt. Um eine Analogie zu verwenden, könnte JTAG ein standardisiertes Mailsystem sein, mit Adressen und Formatierungen und möglicherweise spezifischem Papier und Umschlägen, die verwendet werden müssen, alle sehr streng definiert. Was es nicht besonders gut definiert, ist das, was Sie tatsächlich auf diese Buchstaben schreiben. Es gibt die Schreibmaschine, das Schriftbild, die Größe, den Abstand, das Alphabet usw. an, aber was Sie tatsächlich schreiben, bleibt größtenteils Ihnen überlassen.

OK, ich habe mir mit dieser Analogie erhebliche Freiheiten genommen, aber ich denke, das bringt den Punkt auf den Punkt.

Wenn auf dem Datenblatt dieses Chips "Eingegeben der angegebenen Wellenform" steht, können Sie auf diese Weise feststellen, dass Sie nicht erfahren, wie Sie den Chip in den Programmiermodus versetzen. In der Bedienungsanleitung des Flash-Programmiergeräts JET51 heißt es. Es ist auf Chinesisch, aber es enthüllt sicherlich nicht das proprietäre Protokoll (das eindeutig geistiges Eigentum im Wert von Milliarden ist, zumindest in den Augen einer naiven Führungskraft), sodass Sie Ihr eigenes Gerät und Ihre eigene Software erstellen können .

Leider müssen Sino Wealth die Antworten auf viele Ihrer Fragen wissen und Sie ... nun ... nicht. Haben Sie versucht, ihnen eine E-Mail zu schreiben? Wer weiß, vielleicht lassen sie dich eine NDA unterschreiben oder so.

Jetzt könnte es schlimmer kommen. Es gibt Anbieter, die Ihnen nicht einmal einen Programmierer oder die dafür erforderliche proprietäre Software verkaufen, es sei denn, Sie sind ein großes Unternehmen und Ihre Ingenieure unterzeichnen alle NDAs, schließen einen okkulten Blutpakt usw. Aber zum Glück weiß Sino Wealth, wie um sich ein wenig auszuruhen, und hat freundlicherweise das Benutzerhandbuch, die Firmware (!!) für ihre Programmierer und die benötigte Software zur Verfügung gestellt. Wie funktioniert es? Wenn Sino Wealth es Ihnen nicht sagt, besteht Ihre einzige verbleibende Option leider darin, all dies ebenfalls rückzuentwickeln. Angesichts der Tatsache, dass es mehrere Programmierer von Drittanbietern gibt, die diesen bestimmten Chip unterstützen, und dass sie die Software und sogar die Firmware für ihre Programmierer bereitstellen, ist es wahrscheinlich nicht allzu schwierig, ein Reverse Engineering durchzuführen. Oder Sie können einfach einen JET51-Programmierer kaufen. Ob Sie ihn verwenden oder seinen Betrieb rückentwickeln, liegt bei Ihnen.

Außerdem ist das von Ihnen gescreente Flussdiagramm der Zustandsmaschine der proprietäre SSP-Programmiermodus von Sino Wealth und für die im Abschnitt ICP-Flash-Programmierung erwähnte 'angegebene Wellenform' völlig irrelevant. Es hat nichts mit der JTAG-Programmierschnittstelle zu tun. Es hat leider nichts mit dem Rest Ihrer Frage zu tun.

Das LCD spielt keine Rolle. Der SH79F1619 ist ein Segment-LCD-Controller. Es steuert Segmente eines LCD mit 12 Segmenttreibern und 4 gemeinsamen Pins zum Multiplexen. Hier gibt es nichts Besonderes, es unterscheidet sich nicht vom Ansteuern einer 7-Segment-LED-Anzeige. Jedes Segment lässt ein Segment auf dem LCD "aufleuchten". Welches Segment das ist oder wie es überhaupt aussieht, bleibt dem Designer des LCD überlassen. Es gibt nichts Besonderes zu wissen - Sie können die Segmente mit jedem LCD-Segment-Treiberchip steuern und sie funktionieren mit jedem anderen Treiber wie diesem Mikrocontroller genauso.

Das einzige, was sich zwischen einem LCD und einer LED unterscheidet, ist, dass LCDs mit Wechselstrom betrieben werden müssen, während LEDs offensichtlich mit Gleichstrom betrieben werden. Dies ist völlig allgemein gehalten und funktioniert normalerweise so, als würden Sie eine LED nur mit Wechselstrom betreiben. Möchten Sie, dass ein Segment aktiviert ist? Legen Sie eine Wechselspannung an. Willst du es aus? Legen Sie keine Wechselspannung an (oder wirklich nur eine viel kleinere RMS-Wechselspannung). Alles, was der LCD-Controller für Sie tut, ist, COM und die verschiedenen Segmentstifte relativ zueinander hin und her zu schalten, und normalerweise zwischen ein paar Vorspannungen, um eine abgestufte Wellenform zu erzeugen und Ihnen einige nette Funktionen wie Variation in Kontrast / Graustufen usw. Zu geben Dies ist jedoch absolut allgemein gehalten und Sie müssen nichts über dieses LCD wissen. Wenn Sie ein Wochenende voller Frustrationen beschleunigen möchten, können Sie es sogar selbst mit einem Mikro und einigen Transistoren zum Umschalten zwischen Vorspannungen verwenden. Wenn Sie unter Selbstmordgedanken leiden, rate ich jedoch davon ab, dies zu versuchen.

Meine letzten abschließenden Gedanken:

Das Leben ist kurz. Geben Sie nicht die wertvollste Ressource von allen, Zeit, dafür aus. Es gibt keinen Grund, dies alles rückzuentwickeln. Es wird keine besonders wertvolle Lernerfahrung sein - Sie werden viel über einen sehr spezifischen Chip und seine proprietäre Programmierschnittstelle lernen, die absolut unauffällig sein wird und nur eine weitere Variation desselben Mistes, der jahrzehntelang in oberflächlich unterschiedlichen Implementierungen von gemacht wurde alle Arten von Mikros. Und es gibt sowieso nichts, was es wert wäre, in diesem Chip wiederhergestellt und dekompiliert zu werden. Es ist nichts Revolutionäres an einem beschissenen Blitzmikro mit einem eingebauten LCD-Segment-Controller und einem "10-Bit" -Analog-Digital-Wandler (wahrscheinlich näher an 6 Bit und weitere 4 an wertlosem Rauschen). Aus diesem Code kann man nichts lernen, und Sie können ihn anpassen oder verbessern, indem Sie einfach Ihren eigenen Code für ein offeneres und verfügbareres Mikro von Grund auf neu schreiben. Atmel stellt Chips wie den atmega169 her, der über dieselben LCD-Segment-Controller-Pins verfügt, eine öffentliche und gut dokumentierte Programmierschnittstelle, OpenSource-Tools und unzählige Beispielcodes.

Ich nehme nicht an, Ihnen zu sagen, ob sich ein Projekt lohnt oder nicht oder interessant oder nicht. Jeder hat seine eigene Definition von Spaß - und ich sage, haben Sie es. Lassen Sie diese Kaffeemaschine sich verhalten, oder geben Sie ihr einen PID-Regelkreis, oder lassen Sie sie unter Linux laufen und fügen Sie einen CAN-Bus hinzu, damit Ihr Auto mit ihr sprechen kann - verrückt werden. Aber verschwenden Sie nicht Ihre Zeit mit dem Reverse Engineering, das niemandes Zeit für das Reverse Engineering wert ist. Wenn Sie sich nicht so sehr für die Kaffeemaschine interessieren und etwas zurückentwickeln möchten, wählen Sie etwas aus, das Ihnen hilft, Reverse Engineering-Fähigkeiten zu erlernen, und nicht sinnlose Besonderheiten eines proprietären Systems. Oder wählen Sie aus einem anderen Blickwinkel etwas aus, das tatsächlich etwas Interessantes und Wiederherstellbares enthält. Ich bezweifle jedoch, dass irgendetwas, das sich lohnt, nur dort sitzen und darauf warten würde, dass jemand es wegwirft.

Vertrauen Sie mir - es gibt unzählige ebenso interessante Dinge, an denen Sie Ihre Zeit verbringen können, weit mehr, als in eine menschliche Lebensspanne passen kann.Wählen Sie die guten aus, oder die besten von Ihnen können es schaffen, und verzichten Sie auf die kleineren.Auch wenn dies bedeutet, dass Sie niemals die 200 Montageanleitungen lernen, die Ihre Kaffeemaschine zum Ticken bringen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...