AL4 TCU Reverse Engineering

OP #7878777

Hallo, mein Famalienauto (Peugeot 206) hat einen Defekt mit dem Automatikgetriebe (AL4 4-speed). Bei Reparaturversuchen fand ich das Getriebesteuergerät interessant. Es kann auch sehr günstig gekauft werden. Daher versuche ich Reverse Engineering des Gerät.

Das Hardware is abgeschlossen: als der Haupt-mikrokontroler verwendet es den Chip SAK-C167CR-LM (ohne internal ROM), und kontrolliert einige digitale/analoge Ein-/Ausgänge, den CAN/K-Bus und einige Electrovalves (EVS). Ich hab auch Daten vom NAND-Flash (AM29F200BB) heruntergeladen, und das Software Reverse Engineering angefangen. Ich habe einige Fragen:

  1. In der Schaltung für EVS-Antrieb gibt es extra transistors, was machen sie? Wenn die Kathode der Freilaufdiode (D410) direct an +12V angeschlossen ist, dann verstehe ich es vollständig. Ich habe versucht, der Schaltung zu erkennen, vielleicht ist es für schnelleres Abschalten? Während normale EVS-Antrieb, wie funktioniert die Signale MainEVS_CPU_PWM und MainEVS_CPU_CurrentSet?

  2. Was ist das beste Disassembler/Decompiler für diese CPU? Ich habe https://github.com/keyhana/c166-ghidra-module ausprobiert, gibt es etwas Besseres? Wie viel Zeit/Arbeit ist es, 50% des Codes zu dekompilieren? 90%?

Vielen Dank!

#7880533

Kevin schrieb:

  1. Was ist das beste Disassembler/Decompiler für diese CPU? Ich habe https://github.com/keyhana/c166-ghidra-module ausprobiert, gibt es etwas Besseres? Wie viel Zeit/Arbeit ist es, 50% des Codes zu dekompilieren?

IDA Pro der kostet allerdings. Es gibt nichts besseres. 2MB zu disassemblieren geht schnell, das Ganze aber zu verstehen kann viele Wochen dauern. IDA hat auch so nette Funktionen wie FLIRT zum identifizieren der Lib Funktionen. Das setzt aber voraus dass du für den Compiler passende Flirt Dateien hast.

Da der Code mit ziemlicher Sicherheit von einem C Compiler kommt ist es auch hilfreich wenn man dessen Aufruf Konventionen kennt.

Edit: Q411 dürfte ein PNP sein. Vermutlich ist das sowas wie eine diskrete Darlingtion Stufe.

#7880560

Hast Du bereits Erfahrung mit Firmware Reverse Engineering?

Falls nicht: Firmware aus automotive Steuergeräten fällt in die sehr anspruchsvolle Kategorie, ohne viel Erfahrung wird man damit wenig Freude haben. Der Grund ist u.a dass es dort üblicherweise keine Strings oder Debug Funktionen gibt die Hinweise auf die Funktion geben (Ausnahmen sind Infotainment oder Telematik ECUs).

Ob IDA Pro oder Ghidra als Tool ist dabei nicht entscheidend, auf die Erfahrung kommt es an.

Du kannst ja mal den Firmware Dump hier hochladen.

#7880569

Dieter S. schrieb:

auf die Erfahrung kommt es an.

Ich habe mittlerweile auch die Chat Ki'S dafür verwendet. Einen Haufen Asm code rein kopieren und sich erklären lassen. Oft ergeben sich daraus neue erkenntnisse. Wo man vorher denkt das macht irgendwie keinen sinn kennt chatgpt eventuell doch einen sinn.

Natürlich nicht den ganzen code. Nur Teile. Man muss trozdem selber denken.

OP #7880924

Thomas Z. schrieb:

IDA Pro der kostet allerdings. Es gibt nichts besseres. 2MB zu disassemblieren geht schnell, das Ganze aber zu verstehen kann viele Wochen dauern. IDA hat auch so nette Funktionen wie FLIRT zum identifizieren der Lib Funktionen. Das setzt aber voraus dass du für den Compiler passende Flirt Dateien hast.

Da der Code mit ziemlicher Sicherheit von einem C Compiler kommt ist es auch hilfreich wenn man dessen Aufruf Konventionen kennt.

Edit: Q411 dürfte ein PNP sein. Vermutlich ist das sowas wie eine diskrete Darlingtion Stufe.

Danke, aber IDA Pro ist leider viel zu teuer für mich, es kostet mehr als das ganze Auto LOL.

Ich weiß nicht welcher Compiler verwendet wurde, ich denke Keil, weil ich 'R0 stack'(https://www.keil.com/appnotes/files/apnt_124.pdf) und 'Bootloader interrupt vectors'(https://www.keil.com/support/docs/2881.htm) im Code sehe.

Ich bin sicher, dass Q411 ein NPN sein, weil ich es getestet habe, mit der AVR-Transistortester. Auch die Kennzeichnung stimmt mit MJD148 von onsemi (die beiden Transistoren unten).

Angehängte Dateien:
OP #7880927

Dieter S. schrieb:

Hast Du bereits Erfahrung mit Firmware Reverse Engineering?

Falls nicht: Firmware aus automotive Steuergeräten fällt in die sehr anspruchsvolle Kategorie, ohne viel Erfahrung wird man damit wenig Freude haben. Der Grund ist u.a dass es dort üblicherweise keine Strings oder Debug Funktionen gibt die Hinweise auf die Funktion geben (Ausnahmen sind Infotainment oder Telematik ECUs).

Ob IDA Pro oder Ghidra als Tool ist dabei nicht entscheidend, auf die Erfahrung kommt es an.

Du kannst ja mal den Firmware Dump hier hochladen.

Keine Erfahrung, ich hoffe etwas zu lernen.

Soweit ich weiß, werden die Flash-Daten wiederholt, an 0x000000(Bootloader) und 0x040000(Application).

Angehängte Dateien:
#7881126

Dass der Flash an 0x00000 und 0x40000 auftaucht hast Du ja schon gesehen.

Am Besten fängt man dort an wo man eventuell schon etwas über das Steuergerät weiß, das wären z.B. die Diagnosefunktionen der ECU (das bekommt man z.B. über einen Mitschnitt bei der Diagnose des Steuergeräts mit der dazu passenden Diagnosesoftware heraus).

Hier sind zum Einstieg ein paar Adressen:

1
0x747A6  Funktion Diagnostic Services auswerten (verwendete die
2
         folgende Tabelle)
3

4
0x526FC  Tabelle Diagnostic Services
5
         (zeigt teilweise auf weitere Tabellen, z.B. für
6
          "Routine Conntrol")
7

8
0x74A82  Funktion Tester Present (als Beispiel für einen
9
         Diagnostic Service)
10

11
0x749FC  Funktion Diagnostic Error Code (hilfreich weil die
12
         Funktion häufig verwendet wird und der Fehlercode
13
         weitere Rückschlüsse liefert)
OP #7881712

Dieter S. schrieb:

Dass der Flash an 0x00000 und 0x40000 auftaucht hast Du ja schon gesehen.

Am Besten fängt man dort an wo man eventuell schon etwas über das Steuergerät weiß, das wären z.B. die Diagnosefunktionen der ECU (das bekommt man z.B. über einen Mitschnitt bei der Diagnose des Steuergeräts mit der dazu passenden Diagnosesoftware heraus).

Danke schön, könntest du mir sagen, ob der Code wirklich von Keil Compiler kommt? Danach kann ich die Aufruf Konventionen erkennen. Außerdem finde ich die C166 CPU Architektur sehr chaotisch: es gibt viele Zustände, zB, die Register R0-R15 werden im Speicher von CP gesetzt, die DPP Register und Bank Switching usw. Im Vergleich zu ARM/RISCV scheint es schwerig zu disassemblieren/dekompilieren.

#7881723

Kevin schrieb:

Danke schön, könntest du mir sagen, ob der Code wirklich von Keil Compiler kommt? Danach kann ich die Aufruf Konventionen erkennen.

Kann ich nicht sagen, ich sehe dass der erste Parameter normalerweise in "r12" steht, teilweise weitere Parameter in "r4" und "r5". Das reicht mir bei diesem Binary, ich wüßte nicht was mir die Aufruf Konventionen zumindest mit IDA Pro in diesem Fall an Mehrwert bringen würde.

Außerdem finde ich die C166 CPU Architektur sehr chaotisch: es gibt viele Zustände, zB, die Register R0-R15 werden im Speicher von CP gesetzt, die DPP Register und Bank Switching usw. Im Vergleich zu ARM/RISCV scheint es schwerig zu disassemblieren/dekompilieren.

Weder diese CPU Architektur noch das Binary sind für den Einstieg ins Reverse Engineering einfach.

#7881863

Kevin schrieb:

Danke schön, könntest du mir sagen, ob der Code wirklich von Keil Compiler kommt? Danach kann ich die Aufruf Konventionen erkennen.

sieht für mich nicht nach Keil aus.

Keil C166 benutzt R8..R12 für die ersten 4 Parameter. Ich hab mal ein altes CHM angehängt. die neuen von der Keil Website sind kaputt.

Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über ein Jahr alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.