AL4 TCU Reverse Engineering

#7878777
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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.

#7880924
Lesenswert?

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:
#7880927
Lesenswert?

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
Lesenswert?

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)
#7881555
Lesenswert?

Thomas Z. schrieb:

Kevin schrieb:

ch 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).

ok, seltsam aber dass der Emiter auf +12V liegt

Ja, das denke ich auch, soweit ich sehe: Q406 und Q411 machen ein Sziklai-Paar, das zusammen wie ein großer PNP wirkt.

#7881712
Lesenswert?

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
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren