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
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
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
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.
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).
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).
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
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) |
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.
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.
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.