Nach dem
Experimentieren mit dem CAN-Bus im Auto gab es den wilden Wunsch, etwas tiefer in das Allerheiligste einzutauchen. Ich denke, jeder kennt einen Begriff wie "Chip-Tuning". Auf Russisch ist dies eine einfache Firmware fĂŒr SteuergerĂ€te (Motor, Getriebe usw.). Der GerĂ€tehersteller legt zunĂ€chst Funktionen fĂŒr die Aktualisierung oder Ănderung der Mikrocontroller-Software in seinen GerĂ€ten fest. Der Mechanismus wird jedoch aus offensichtlichen GrĂŒnden niemandem offengelegt. Um diesen Vorgang zu verkomplizieren, wird das Programm selbst, mit dem es mit nichtflĂŒchtigem Speicher arbeitet, nicht in der Firmware gespeichert, sondern geladen Controller nur zum Zeitpunkt der Wartung. In diesem Artikel wird erlĂ€utert, wie der Dashboard-Mikrocontroller den Code eines anderen Benutzers ausfĂŒhren kann, wĂ€hrend er auf den Autodiagnose-Connector zugreifen kann.
Im Allgemeinen wird der Datenlademechanismus in der ECU (elektronische Steuereinheit) im
UDS- Diagnoseprotokoll beschrieben, nÀmlich die Funktionen:
34 - Download anfordern
36 - Daten ĂŒbertragenIm Hinblick auf die Implementierung von UDS sind die Autohersteller jedoch nicht gezwungen, Ănderungen / ErgĂ€nzungen am Protokoll vorzunehmen und ein proprietĂ€res Add-On zu erstellen. In meinem Fall sieht der Update-Vorgang ungefĂ€hr so ââaus:
- Anmelden bei einer erweiterten Diagnosesitzung
- Starten Sie im Bootloader neu
- Erhalten des Sicherheitszugriffs, um eine Datenladeoperation zu ermöglichen
- Ăbertragung der Adresse in den Speicher, in dem die Aufzeichnung und das Datenvolumen aufbewahrt werden
- Daten werden geladen
- Tun, was geladen wurde
- Als nÀchstes programmieren Sie das EEPROM mit dem Programm, das Sie zuvor heruntergeladen haben.
Die Punkte 1-3 waren nicht schwierig, aber was machen wir als nÀchstes? Woher bekommen Sie die Adresse und die maximale Datenmenge? Wie nach dem Booten zu tun, was heruntergeladen wurde? Aus diesem Grund wird gerade ein Artikel geschrieben.
Als Testobjekt wurde eine GerĂ€tekombination ausgewĂ€hlt, da ich erstens eine weitere fĂŒr den Fall einer Apokalypse habe und zweitens deren Controller mit einem einfachen USB-RS232-Adapter ausgelesen werden kann. Nachdem wir die Innenseiten untersucht haben, haben wir den Fujitsu MB91F223 Controller. Dies ist ein 32-Bit-Mikron mit einem FR60Lite-Kern, 512 KB Speicher und 16 KB RAM. Datenblatt, RM, Assembler-Handbuch, ein Programmierer dafĂŒr sind leicht im Internet zu suchen, ich werde hier nicht aufhören. Hier sieht er gut aus:

Aktionsplan:
- Suchen Sie nach Diagnoseanforderungshandlern
- Finden Sie Adressen im Speicher, an die Sie etwas schreiben können
- Finden Sie einen Weg, um aufgezeichneten Code auszufĂŒhren
Um Schritt 1 auszufĂŒhren, mĂŒssen Sie den Interrupt-Handler vom CAN-Bus aus untersuchen und verstehen, wo die Daten zur weiteren Verarbeitung gespeichert sind. Viele Steuerungen haben eine sogenannte Interrupt-Vektortabelle, die die Adressen der Funktionen enthĂ€lt, die fĂŒr deren Verarbeitung zustĂ€ndig sind. In der Fujitsu FR-Familie befindet sich diese Tabelle in ihrer Branche, und der Zeiger darauf wird im TBR-Register (Table Base Register) gespeichert. Eine einfache Textsuche in der IDA liefert bei uns ein positives Ergebnis und die Adresse der Interrupt-Tabelle.

Laut Handbuch befindet sich die CAN-Interrupt-Adresse am Offset 0x370 vom Beginn des TBR. Da ist er.

Er ist aber bereits im vollen Wachstum und ein Message-Handler, der das ISO-TP-Protokoll verwendet
Der ISO-TP-Handler ist nicht vollstÀndig, aber Frames unterschiedlicher Typen weichen voneinander ab

Aus der Datenbank der HĂ€ndlerdiagnosesoftware hatte ich die SID- und LID-Kennungen (31E1) des UDS-Protokolls, mit denen die CodeausfĂŒhrung gestartet wurde. Dies vereinfachte die Aufgabe und ermöglichte es mir, von Ende bis Anfang zu handeln. In dem Funktionshandler 31E1 wurde ein Fragment gefunden, in das die zum RAM-Bereich gehörende Adresse geladen wurde, und dann wird ein Aufruf an diese Adresse durchgefĂŒhrt. Ist es nicht das, wonach wir suchen?

Die Suche nach der Verwendung der Konstanten 0x3F100 fĂŒhrt uns zu einer anderen Stelle in der Firmware, zum UDS 34-Funktionshandler - Download anfordern! Dies ist genau das, was Sie brauchen, die Adresse zum Schreiben von Daten und die maximale Menge (0x700 Bytes) im RAM wird gefunden.

Nach dem Senden eines Befehls zum Anfordern der Erlaubnis zum Herunterladen von Daten 34
03F100 00
00010C (die in Kursivschrift angegebene Adresse ist in Fettschrift angegeben) antwortet das Dashboard nun mit einem guten 740401. AnschlieĂend werden Benutzerdaten mit der Funktion Daten ĂŒbertragen geladen und ein Befehl ausgegeben zu erfĂŒllen. Wir haben das Laden und AusfĂŒhren herausgefunden, aber jetzt mĂŒssen Sie herausfinden, was Sie herunterladen können. Ich habe keine Open-Source-Entwicklungsumgebung fĂŒr diesen Mikrocontroller gefunden, aber nach einem Monat wurde der technische Support von Cypress angeklopft (ja, nicht Fujitsu, sie haben sie entweder absorbiert, ich weiĂ im Allgemeinen nicht). Sie gaben einen Link zu einer IDE namens Shaggy Softune Workbench 97 Jahre, mit denen der Compiler unter den FR-Kernel kam.
So sieht es aus, kein vscode-Paar.
Im Screenshot ein Fragment des Programms zum Blinken von LEDs (nicht fĂŒr den Schreibstil in Assembler kicken, dies ist meine erste Erfahrung).

Der gleiche Code, aber schon in si
void delay(int loops) { while(--loops) { #pragma asm NOP NOP #pragma endasm __asm(" nop"); } } #define DDR2 (*((char*)0x402)) #define PDR2 (*((char*)0x2)) #define WPR (*((char*)0x485)) #define LVRC (*((char*)0x57D)) void wdt_reset(void) { WPR = 0xA5; WPR = 0x5A; LVRC = 0x10; } void main(void) { int current_pin = 2; DDR2 |= 0x7E; while(1) { wdt_reset(); PDR2 |= current_pin; delay(0x7FFF); PDR2 &= ~current_pin; delay(0x7FFF); current_pin <<= 1; if(current_pin >= 0x80) { current_pin = 2; } } }
Nun, das Ergebnis selbst
Bei anderen Knoten sieht alles ziemlich gleich aus, mit Ausnahme der Controller-Architektur und der Reihenfolge, in der die Befehle ausgefĂŒhrt werden. Ist es sicher, solche LĂŒcken in der FahrzeugausrĂŒstung zu belassen? Anscheinend ja, da der Hersteller dies tut. Warum mache ich das? Es war einfach interessant, der Monteur war lange Zeit fĂŒr mich von Interesse, ich habe es sozusagen getroffen.
Betreff - Mitsubishi 8100B197 Instrumententafel, Die Kommunikation auf dem CAN-Bus erfolgte ĂŒber den Tactrix OpenPort 2.0-Adapter, eine Software auf einem Computer seines eigenen Designs.