Forum: Fahrzeugelektronik AL4 TCU Reverse Engineering


von Kevin (gspeed)



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!

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Kevin schrieb:
> 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?

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.

: Bearbeitet durch User
von Dieter S. (ds1)


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.

: Bearbeitet durch User
von S. M. (lichtmensch)


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.

von Kevin (gspeed)


Angehängte Dateien:

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

von Kevin (gspeed)


Angehängte Dateien:

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

von Thomas Z. (usbman)


Lesenswert?

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

von Dieter S. (ds1)


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.