Extrahieren von Firmware mit JTAG

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

Also, ich habe diese Kaffeemaschine, die jedes Mal, wenn sie benutzt wird, ein riesiges Durcheinander macht. Ich dachte, ich würde mich an einem Reverse Engineering versuchen, indem ich das Ding zerlege und möglicherweise die Firmware entpacke/patche. Nach ein wenig Umkehren und Analysieren der Konstruktion ist die Gesamtarchitektur wirklich einfach. Es gibt ein paar Schalter, die anzeigen, ob das Gerät sicher mit dem Brühen beginnen kann oder nicht, zusammen mit einem Thermoelement zum Messen der Wassertemperatur und einer Pumpe zum Erzeugen eines Überdrucks, um das erhitzte Wasser zum Kaffeesatz zu bringen. Den alten Controller könnte ich problemlos rausschmeißen und durch meine eigene Logik ersetzen, aber ich dachte mir, ich versuche erstmal, die vorhandene Hardware zu nutzen, da ich sonst die Steuermechanismen für den mitgelieferten LCD-Bildschirm umkehren müsste und das wirkt nicht sehr einladend .

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

Beim Durchlesen des Datenblatts (und ganz offensichtlich von der Platine) unterstützt dieses Gerät die JTAG-Debugging-/Programmierschnittstelle. Die einzige Information, die ich im Zusammenhang mit diesem Unterfangen finden konnte, war, dass es möglich war, einen Flash-Lese-/Schreibvorgang durchzuführen, vorausgesetzt, die Schutzbits waren bei der Veröffentlichung nicht gesetzt. Wenn man bedenkt, dass dieses Gerät eine einfache Kaffeemaschine ist, sind sie vielleicht nicht eingestellt? Weiterführend fand ich die folgende Aussage auf Seite 20 im Datenblatt:

Erst nachdem die spezifizierte Wellenform in die vier Stifte eingegeben wurde, tritt die CPU in den Programmiermodus ein

Welche Eingangswellenformen sind also erforderlich?

Die einzige andere Information, die ich finden konnte, war (Seite 19):

Flash-Programmierer im ICP-Modus senden Schreib-/Lese-Code-Anweisungen, um Schreib-/Lese-Code auszuführen

Etwas mehr Recherche ergab, dass der Begriff Wellenform wahrscheinlich nicht die beste Beschreibung war, die verwendet werden konnte, da wir gemäß der folgenden Zustandsmaschine einfach eine Reihe von Registerschreibvorgängen durchführen müssen, um in den Programmiermodus zu gelangen (Seite 23):

Geben Sie hier die Bildbeschreibung ein

Die Idee ist also vermutlich, dass wir zunächst über den oben im Zustandsdiagramm skizzierten Pfad in den Programmiermodus gelangen. Angenommen, wir kommen so weit, was passiert als nächstes? Lesen wir jede einzelne Zeile von Flash-Adresse 0 bis Flash-Adresse MAX? Wie funktioniert das über JTAG?

Und weiß jemand möglicherweise, worauf sich dieser Teil des Zustandsdiagramms bezieht?Geben Sie hier die Bildbeschreibung ein

Dies ist die eigentliche Hardware, um die es geht:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

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

Zusammengefasst :

  • Irgendeine Ahnung, was für ein LCD dieser Bildschirm ist? Allgemeine Modell-/Befehlsinformationen?
  • Wie können wir feststellen, ob die Schutzbits aktiviert sind?
  • Wie werden Befehle (wie 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 Pech?
  • Lesen wir einfach den gesamten Flash-Adressraum und geben ihn in eine Datei aus?
  • Was machen wir als nächstes, sobald wir die Binärdatei haben? Schreiben Sie einen Parser, um die Binärdatei in ein lesbares ASCII zu konvertieren?
  • Was ist die Möglichkeit, das Gerät zu mauern und/oder die aktuelle Firmware zu löschen?
Wenn Hardware wiederverwendet werden kann, können Sie die Hardwareabschnitte im Detail mit Benchmarks versehen. später kann nur die MCU isoliert werden. Der Rest der Hardware kann von einer neuen MCU gesteuert werden. Ich würde diesen Weg bevorzugen, um den Kaffee bald zu bekommen
@Umar, schlagen Sie vor, den Firmware-Dump zu überspringen und alles mit benutzerdefinierter Logik und einem neuen Controller zu steuern? Der Controller und das LCD sind unverändert auf dieselbe Platine gelötet, aber die Thermoelement-Messwerte und Schaltzustandsinformationen kommen über ein Flachbandkabel. Wie würden Sie eine Schnittstelle mit dem bereits auf dem Board befindlichen Bildschirm vorschlagen?
@sherrellbc - Es ist wirklich, wirklich unwahrscheinlich, dass Ihre Kaffeemaschine echte Thermoelemente verwendet. Sie sind ziemlich teuer. Es verwendet wahrscheinlich Thermistoren.
@ConnorWolf, insofern hast du wahrscheinlich recht. Ich nahm nur an, dass es sich um Thermoelemente handelt, aber es könnten genauso gut Thermistoren sein. Tatsächlich ist der Ausgang ein variabler DC-Wert, der vom Controller gelesen wird, also noch mehr Beweise, die auf Thermistoren hinweisen.
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. Das Zurückverfolgen der LCD-Pins zur MCU sollte den Pin leicht aus dem LCD herausgeben.
Können Sie bitte diese Frage der SE Embedded System- Site posten? Da es sich um eine Firmware-Frage handelt, gehört sie zur Embedded System- Site.

Antworten (1)

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

JTAG ist vor allem deshalb ein universeller „Standard“, weil er alles definiert, ohne wirklich etwas zu definieren. Denken Sie daran, dass es als eine Möglichkeit begann, ganze Leiterplatten und ihre Integrität im Allgemeinen zu testen, es wurde nie als Programmier-/Debugging-/In-Circuit-Emulationsprotokoll definiert (und soll es auch nicht sein), obwohl es einen großartigen physischen Bus dafür darstellt Implementieren Sie solche Funktionen auf. Eine der praktischeren Funktionen ist, dass es in hohem Maße verkettbar ist, sodass Sie viele Geräte auf einer Platine verketten und sie alle mit nur einer JTAG-Schnittstelle testen (oder was auch immer) können.

JTAG ist wirklich nur eine Zustandsmaschine, eine, die Ihnen Zugriff auf Speicheradressen gibt. Es spezifiziert kein Protokoll oder System, um irgendetwas mit irgendetwas zu tun, es stellt lediglich das Medium bereit. Wie oder was Sie tatsächlich über die JTAG-Schnittstelle tun, ist höchst spezifisch für den betreffenden Chip, und häufig werden diese Funktionen nicht veröffentlicht und erfordern die Verwendung von vom Anbieter 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 speziellem Papier und Umschlägen, die verwendet werden müssen, alles sehr streng definiert. Was es nicht besonders gut definiert, ist, was Sie tatsächlich auf diese Briefe 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 bei dieser Analogie erhebliche Freiheiten genommen, aber ich denke, es bringt den Punkt auf den Punkt.

Wenn also auf dem Datenblatt dieses Chips steht, dass die angegebene Wellenform eingegeben wurde, ist das die nette Art, Ihnen zu sagen, dass sie Ihnen nicht sagen werden, wie Sie den Chip in den Programmiermodus versetzen. Es heißt, das Benutzerhandbuch für ihren Flash-Programmierer, den JET51, zu konsultieren. Es ist auf chinesisch, aber es enthüllt sicherlich nicht ihr proprietäres Protokoll (das eindeutig geistiges Eigentum im Wert von Milliarden ist, zumindest in der Meinung eines naiven Managers), sodass Sie Ihr eigenes Gerät und Ihre eigene Software erstellen können.

Leider sind die Antworten auf viele Ihrer Fragen nur für Sino Wealth und für Sie … nun ja … nicht. Haben Sie versucht, ihnen eine E-Mail zu schreiben? Wer weiß, vielleicht lassen sie dich ein NDA oder so etwas unterschreiben.

Jetzt könnte es noch schlimmer kommen. Es gibt Anbieter, die Ihnen nicht einmal einen Programmierer oder die dafür benötigte proprietäre Software verkaufen, es sei denn, Sie sind ein großes Unternehmen und Ihre Ingenieure unterzeichnen alle Geheimhaltungsvereinbarungen, schließen eine Art Pakt mit okkultem Blut usw. Aber glücklicherweise weiß Sino Wealth, wie das geht um sich ein wenig zu entspannen, 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 sagen will, bleibt Ihnen leider nur noch die Möglichkeit, all das nachzukonstruieren. Angesichts der Tatsache, dass es mehrere Programmierer von Drittanbietern gibt, die diesen speziellen Chip unterstützen, und dass sie die Software und sogar Firmware für ihre Programmierer bereitstellen, ist es wahrscheinlich nicht allzu schwierig, sie zurückzuentwickeln. Oder Sie können einfach einen JET51-Programmierer kaufen.Ob Sie es verwenden oder seinen Betrieb zurückentwickeln, liegt bei Ihnen.

Außerdem ist das Flussdiagramm der Zustandsmaschine, das Sie mit einer Bildschirmabdeckung versehen haben, von Sino Wealths proprietärem SSP-Programmiermodus und völlig irrelevant für die im Abschnitt ICP-Flash-Programmierung erwähnte „spezifizierte Wellenform“ und hat nichts mit der JTAG-Programmierschnittstelle zu tun. Das hat leider nichts mit dem Rest deiner Frage zu tun.

Was das LCD angeht, spielt es keine Rolle. Der SH79F1619 ist ein Segment-LCD-Controller. Es steuert Segmente eines LCD mit 12 Segmenttreibern und 4 gemeinsamen Pins für das 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 ansteuern und sie funktionieren mit jedem anderen Treiber genauso wie dieser Mikrocontroller.

Der einzige Unterschied zwischen einem LCD und einer LED besteht darin, dass LCDs mit Wechselstrom betrieben werden müssen, während LEDs offensichtlich mit Gleichstrom betrieben werden. Dies ist völlig generisch und funktioniert normalerweise so, als würden Sie eine LED betreiben, nur mit Wechselstrom. Möchten Sie, dass ein Segment eingeschaltet ist? Legen Sie eine Wechselspannung an. Willst du es aus? Legen Sie keine Wechselspannung an (oder wirklich nur eine viel kleinere Wechselspannung). Alles, was der LCD-Controller für Sie tut, ist das Hin- und Herschalten von COM und den verschiedenen Segmentstiften relativ zueinander und normalerweise zwischen einigen Vorspannungen, um eine gestufte Wellenform zu erzeugen und Ihnen einige nette Funktionen wie Kontrast- / Graustufenänderungen usw. zu bieten Aber das ist absolut generisch und Sie brauchen nichts über dieses LCD zu wissen. Wenn Sie ein Wochenende voller Frust beschleunigen möchten, Sie können es sogar selbst mit einem Mikro und ein paar Transistoren bitbangen, um zwischen Vorspannungen umzuschalten. Wenn Sie unter Suizidgedanken leiden, rate ich jedoch davon ab, dies zu versuchen.

Meine letzten abschließenden Gedanken:

Das Leben ist kurz. Verbringen Sie nicht die wertvollste Ressource von allen, Zeit, damit. Es gibt keinen Grund, all dies zurückzuentwickeln. Es wird keine besonders wertvolle Lernerfahrung sein - Sie werden viel über einen sehr spezifischen Chip und seine proprietäre Programmierschnittstelle lernen, die völlig unauffällig und nur eine weitere Variation desselben Mistes sein wird, der jahrzehntelang in oberflächlich unterschiedlichen Implementierungen von gemacht wurde alle Arten von Mikros. Und in diesem Chip gibt es sowieso nichts, was es wert wäre, wiederhergestellt und dekompiliert zu werden. Es gibt nichts Revolutionäres an einem beschissenen Blitzmikro mit eingebautem LCD-Segment-Controller und einem "10-Bit" (wahrscheinlich näher an 6 Bit und weiteren 4 wertlosen Rauschen) Analog-Digital-Wandler. Aus diesem Code kann man nichts lernen, und Sie werden es erreichen oder verbessern, indem Sie einfach Ihr eigenes von Grund auf neu schreiben, um ein offeneres und verfügbareres Mikro zu erhalten. Atmel stellt Chips wie den Atmega169 her, der über die gleichen LCD-Segment-Controller-Pins verfügt, eine öffentliche und gut dokumentierte Programmierschnittstelle, Open-Source-Tools und Unmengen von Beispielcode.

Ich maße mir nicht an, Ihnen zu sagen, ob sich ein Projekt lohnt oder nicht, ob es interessant ist oder nicht. Jeder hat seine eigene Definition von Spaß – und ich sage, viel Spaß dabei. Lassen Sie diese Kaffeemaschine sich benehmen, oder geben Sie ihr eine PID-Regelschleife, oder lassen Sie sie Linux laufen und fügen Sie einen CAN-Bus hinzu, damit Ihr Auto damit sprechen kann - verrückt. Aber verschwenden Sie nicht Ihre Zeit mit dem Reverse-Engineering von etwas, das die Zeit für das Reverse-Engineering nicht wert ist. Wenn Sie sich nicht so sehr für die Kaffeemaschine interessieren und etwas zurückentwickeln möchten, dann wählen Sie etwas, das Ihnen beim Erlernen von Reverse-Engineering-Fähigkeiten hilft, nicht sinnlose Besonderheiten eines proprietären Systems. Oder wählen Sie aus einem anderen Blickwinkel etwas aus, das tatsächlich etwas Interessantes und Wertvolles haben könnte. Ich bezweifle jedoch, dass irgendetwas Wertvolles nur da sitzen und darauf warten würde, dass jemand es fallen lässt.

Vertrauen Sie mir – es gibt unzählige ebenso interessante Dinge, mit denen Sie Ihre Zeit verbringen können, weit mehr, als in eine menschliche Lebensspanne passen. Wählen Sie die Guten aus, oder die Besten von Ihnen können es schaffen, und verzichten Sie auf die Geringeren. Auch wenn das bedeutet, niemals die 200 Montageanleitungen zu lernen, die Ihre Kaffeemaschine zum Ticken bringen.