Beruflich Dokumente
Kultur Dokumente
Diese Kurzanleitung beruht in weiten Teilen auf der wunderbaren Arbeit von den Autoren der
Dateien „AnleitungMIB2.pdf“ und „MIB2_Patch_DE_v0.7.pdf“, einige Informationen wurden
weggelassen und wenige wurden hinzugefügt. Die Credits gehen daher an die Autoren dieser
Dokumente!
Der Sinn dieses Dokuments ist das Aufzeigen der theoretischen Möglichkeit der Modifikation einer
Firmware zur Akzeptanz von erzeugten Feature Enabling Codes (FECs) ohne Signatur. Außer zu
Testzwecken ist daher von einem Einsatz abzusehen.
Ob unbedingt ein Firmware-Update bei dem Fahrzeug durchgeführt werden sollte, dass muss jeder
selbst entscheiden. Grundsätzlich ist ein Backup der bestehenden Software für das Patchen der MIB
ausreichend.
Dieser Schritt ist optional erforderlich, wenn der „Freundliche“ den Zugang zum Engineering Mode
bei einem Update auf „nicht aktiv“ gesetzt hat.
Die Tastenkombinationen, um in den Engineering Mode zu wechseln sind je nach Baujahr und
Fahrzeug unterschiedlich.
- Wechsel in das Menü CAR (Menü-Taste drücken, auf Einstellung CAR gehen)
- Tastenkombination BACK + obere Linke Funktionstaste (neben dem Multi-Wheel) gleichzeitig
drücken.
- Nach einige Sekunden erscheint das sog. RED-Menü
Falls es nicht sofort funktioniert, dann mehrfach versuchen. Das gleichzeitige Drücken klappt nicht
immer sofort. Falls es jedoch überhaupt nicht funktioniert, dann muss via VCDS/VCP etc. der
Engineering Mode freigeschaltet werden.
Grundsätzlich befindet sich die gewünschte Einstellung im Steuergerät 5F. Allerdings ist im
Beispielfahrzeug der Parameter IDE02122 Developer Mode (Entwicklermodus) auf nicht aktiv. Der
Versuch diesen auf aktiv zu setzen wird mit einem Fehler (ungültiger Wert) quittiert. Unter
Zugriffsberechtigungen wird seitens VCDS kein Code angezeigt. Auch bei Eingabe der
Sicherheitsnummer „20103“, welche als gültig quittiert wird, ändert sich das Verhalten nicht.
Folgende Schritte sind einmalig notwendig, damit VCDS den Developer-Code anzeigt:
Im STG 5F die VAG-Nummer merken (links oben). In meinem Fall „8V0 035 019“.
Im Verzeichnis Labels (C:\Ross-Tech\VCDS-DRV\Labels) die Datei entsprechende Datei des
verbauten MMI suchen, in meinem Fall 8V0-035-MIB-HIGH1.clb. Die Datei duplizieren und in
den Namen des Steuergeräts umbenennen, also 8V0-035-019.clb.
VCDS neustarten
STG 5 anwählen, unter ZUGRIFFSBERECHTIGUNG 16 sollte nun der notwendige Code
erscheinen, in meinem Fall „S12345“
b Prüfung, ob die neue Version die aktuelle Firmware-Version unter „Supported Trains“
auflistet. Diese Information findet sich in der Datei metainfo2.txt.
c In den Engineering Mode wechseln
c.a Bei Audi A3 8V 2016: MENÜ – CAR – Tastenkombination BACK + oberste
Funktionstaste neben dem Steuerrad.
d Im Engineering Mode den Punkt Update auswählen und den Aufforderungen folgen
e Wenn das Update abgeschlossen ist, dann fragt das Setup nach den Rückspielen der neuen
Firmware-Informationen zum Herstellerserver. Diese Abfrage abbrechen.
Dumpifs: https://github.com/askac/dumpifs
Linux:
Vorbemerkung: Dieser Schritt ist nicht notwendig, wenn mit dem Tool IFSTool.exe gearbeitet wird,
eine Firmware für das MIB zur Verfügung steht und kein Dump der rcc_fs0 als Grundlage dienen soll.
Empfehlenswerter ist es meiner Meinung nach aber mit einem Dump zu starten. Diese Informationen
stammen schließlich aus dem funktionsfähigen Fahrzeug.
Um mit dem Tool dumpifs arbeiten zu können, wird eine Linux-Umgebung benötigt. Windows 10
bietet mit dem Subsystem für Linux eine einfache Möglichkeit. Allerdings ist es auch mit einem
vollständig installierten Linux möglich. Nachfolgend wird mit dem Subsystem gearbeitet.
Unter Windows 10 das Windows Subsystem für Linux (Systemsteuerung -> Programme und Features)
installieren, dann den Computer neustarten.
Im nächsten Schritt aus dem Windows Store Ubuntu (Entwicklungstools für die Kommandozeile)
installieren.
Nach der Installation auf die Öffnen Schaltfläche klicken. Ein Terminalfenster öffnet sich. Dort einen
Benutzernamen und ein Kennwort vergeben.
Im Windows Explorer oder auf der Kommandozeile von Windows (nicht Ubuntu) legen wir ein
Arbeitsverzeichnis an. Da auch unter Ubuntu auf dieses Verzeichnis zugegriffen werden wird, ist ein
kurzer Name sinnvoll.
c:
cd \
mkdir a
Vorbemerkung: Dieser Schritt ist nicht notwendig, wenn mit dem Tool IFSTool.exe gearbeitet wird.
Nach dem Herunterladen von dumpifs aus dem Github- Repository von askac, das ZIP-Archiv von
dumpifs im Arbeitsverzeichnis (aka c:\a) entpacken.
Für die unterschiedlichen Fahrzeuge des VW-Konzerns existieren etliche verschiedene Kennwörter,
die meisten Zugangsdaten sind mit etwas Internetrecherche zu finden. Für das Beispielfahrzeug
nachfolgend eine kurze Aufstellung:
Die MIB-Unit bietet 2 Möglichkeiten sich per Telnet einzuloggen. Jede seiner Hauptkomponenten –
MMX und RCC – hat seinen eigenen Zugang. Die Komponente RCC ist interessant, da sich dort die
Dateien MIBRoot und FecContainer.fec befinden.
RCC MMX
IP4: 172.16.250.248 IP4: 172.16.250.248
Port: 123 Port: 23
User: root User: root
Kennwort: siehe oben Kennwort: siehe oben
Erstellung eines Backups der originalen MIB-Software. Nach dem erfolgreichen Login auf der MIB
RCC, bitte die folgenden Dateien sichern:
- Eeprom
- FecContainer.fec
- Variant.txt
- RCC
- MMX
Die Dateien dann von der SD-Karte auf einen sicheren Speicherort übertragen. Die Dateien „rcc_fs0“
und „FecContainer.fec“ werden in den nächsten Schritten benötigt.
Es gibt unterschiedliche Wege des Patchens des ifs-root.ifs Containers. Die nachfolgend vorgestellte
Methode basiert darauf, dass die Überprüfung von Hash-Werten ausgeschaltet wird. Damit werden
dann auch nicht-signierte FEC-Dateien anerkannt.
Im Folgenden wird der Prozess beschrieben, wie aus dem erstellten Backup die Datei MIBRoot
extrahiert, angepasst wird und wieder in einen IFS-Container zurückintegriert wird, damit die Datei
auf der MIB eingespielt werden kann.
Firmware-Images enthalten selbstverständlich die Datei ifs-root.ifs. Die Datei kann mit dem IFSTool
und der Funktion „Split“ in die gewünschten Teile zerlegt werden. Man erhält die beiden Dateien ifs-
root-part1.ifs und ifs-root-part2.ifs. Die Datei ifs-root-part2.ifs ist die Interessante von beiden, da
diese Datei die Dateien MIBRoot und FecContainer.fec enthält.
a Kopieren der rcc_fs0 vom Sicherungsort in das bereits erstellte Arbeitsverzeichnis c:\a
Die meisten MIB haben Ihren Offset-Beginn für den zweiten Teil der ifs-root bei
00BA0000. Dies ist aber keine Garantie! Am besten mit der Datei ifs-root-part2.ifs
vergleichen. Selbiges gilt für das Offset-Ende.
Im Beispiel ist der Offset Anfang 00BA0000 und das Offset Ende 01865CDF
Den Block (Offset-Anfang bis Offset-Ende) via Menü „Bearbeiten – Block markieren“
auswählen:
Um die Datei MIBRoot zu extrahieren, gibt es zwei Möglichkeiten. Die erste führt über die Linux-
Konsole durch das Tool dumpifs, die zweite Möglichkeit führt über das Tool IFSTool. Der Weg über
das IFSTool ist einfacher und wird in den meisten Fällen bevorzugt werden.
Zunächst müssen wir die Offset-Adresse der Datei MIBRoot sowie die Dateilänge herausfinden. Dies
geschieht mit Hilfe des Tools „dumpifs“.
Dazu begeben wir uns in die Linux Konsole, wechseln in das Arbeitsverzeichnis und führen folgenden
Befehl aus:
100 4 startup.*
104 5c Image-header
...
...
Dumpifs dekomprimiert die Datei new.ifs und listet anschließend sowohl den Offset-Beginn der
enthaltenden Dateien als auch die jeweilige Dateilänge auf. Uns interessiert die Datei MIBRoot,
welche im Beispiel oben bei der Offset-Adresse 01698000 beginnt und eine Dateilänge von a66c54
aufweist. Diese beiden Werte merken wir uns.
Es gilt zu beachten, dass sich die Offset-Adresse und Dateilänge auf die dekomprimierte/entpackte
Version der Datei new.ifs beziehen, welche wir im nächsten Schritt erzeugen müssen.
lzo1x_decompress(buf, 9393344...)
Aus der dekomprimierten Datei kann nun mittels Hex-Editor die Datei MIBRoot extrahiert werden.
Mittels des Menüs “Bearbeiten – Block auswählen” (STRG E) den Bereich der zu
extrahierenden Daten angeben. Dazu benötigen wir die Offset-Adresse und die
Dateilänge, die wir uns gemerkt haben.
Die Auswahl als neue Datei „MIBRoot“ via Menü „Datei – Auswahl speichern“ sichern
Mit dem IFSTool sind die Schritte zur Extraktion der MIBRoot wesentlich leichter und komfortabler.
Nach dem Start des Tools laden wir die Datei new.ifs und entpacken diese mit einem Klick auf die
Schaltfläche “Extract”. Das IFS-Tool entpackt nun den Inhalt der Datei new.ifs in den Unterordner
new.
C:\a\new\usr\apps
Die Datei MIBRoot wurde korrekt entpackt. Problematisch ist nur, wenn man an dieser Stelle einen
direkten „Repack“ versucht, dann variierte die Dateigröße von der Ursprungsdatei. Eine Extraktion
aus der zuvor entpackten new.ifs in new-unpacked.ifs scheiterte in der mir zur Verfügung stehenden
Version des IFSTools mit einer Ausnahme-Fehlermeldung. Daher bleibt nur der Weg über die
manuelle spätere Integration via Hex-Editor.
Extraktion der Datei MIBRoot aus der Datei new.ifs. Entpacken der Datei new.ifs in new-unpacked.ifs.
Umbenennung der Datei new-unpacked.ifs in new_dk.ifs (damit die Dateinamen nachfolgend
passen).
Wichtig ist, dass man sich an dieser Stelle – für die spätere Reintegration der gepatchten MIBRoot
Datei – die Offset Adresse und die Dateilänge aus dem IFSTool abschreibt. Andernfalls scheitert das
Einsetzen des Codes der gepatchten MIBRoot in die dekomprimierte Datei new_dk.ifs.
Damit stehen die beiden – für den weiteren Prozess notwendigen – Dateien zur Verfügung:
.1 new_dk.ifs
.2 MIBRoot
Egal, ob der Weg via dumpifs oder via IFSTool gewählt wurde. Als Ergebnis muss nun die originale
Datei MIBRoot vorliegen. In den folgenden Schritten benötigen wir einen Disassembler, um die
Stellen herauszufinden, welche modifiziert werden müssen. Der Disassembler muss Support für die
ARM-Plattform bieten.
Nachfolgend wird der Weg über den Disassembler IDA beschrieben. Mit anderen Disassemblern
sollte es aber in der Theorie genauso gut funktionieren.
Nach dem Start von IDA legen wir ein neues Projekt an:
In dem sich öffnenden Datei-Auswahlfenster setzen wir die Dateiendungen auf * und wählen die
Datei MIBRoot aus dem Arbeitsverzeichnis aus. IDA erkennt nun den Dateityp und präsentiert
folgendes Fenster:
Die vorausgewählten Einstellungen können mit einem Klick auf die Schaltfläche „OK“ übernommen
werden. Der nächste Schritt kann etwas dauern, da IDA nun mit dem Disassemblieren der Datei
MIBRoot beginnt.
In dem sich öffnenden Dialog wird als Suchstring „aCalculatedHash“ eingetragen und – falls noch
nicht vorausgewählt – das Feld „Find all occurrences“ angehakt. Mit einem Klick auf die Schaltfläche
„OK“ wird die Suche angestoßen. Diese dauert naturgemäß ebenfalls etwas.
Mit einem Doppelklick auf die erste Zeile (LOAD:006A4818…) öffnet sich in IDA View-A in der
Baumansicht an der betreffenden Stelle des ersten Suchergebnisses.
Die Baumansicht ist in diesem Fall nicht sehr übersichtlich, daher wird zur Textansicht gewechselt.
Mit einen Rechtsklick auf den grauen Rahmen öffnet sich ein Pop-Up-Fenster, in welchem „Text
view“ angeklickt wird.
Wichtig ist zunächst die gelb hinterlegte Adresse. Aus der Anweisung
werden. Dazu wechselt man in die HEX-Ansicht und erhält folgende Ansicht:
Nach einem Druck auf die „F2“ Funktionstaste ist der Editiermodus freigeschaltet und die HEX-Werte
00 40 A0 13 können in 01 40 A0 13 geändert werden. Zum Abschluss der Bearbeitung wieder die
„F2“-Taste drücken und in die Ansicht „IDA View-A“ wechseln, in welcher das Ergebnis der
Bearbeitung zu sehen ist:
LOAD:006A4880 BL MEMCMP
LOAD:006A4884 RSBS R4, R0, #1
LOAD:006A4888 MOVCC R4, #0
LOAD:006A4880 NOP
LOAD:006A4884 NOP
LOAD:006A4888 MOV R4, #1
Das Endergebnis des ersten Blocks in der IDA View-A sieht wie folgt aus:
Hier beginnt das Verfahren erneut. Nachfolgend die Änderungen gemäß den erzeugten Screenshots
vornehmen.
Nach Abschluss der Arbeiten im Fenster IDA View-A nach oben scrollen und eine Adresse markieren,
vgl. nachfolgenden Ausschnitt:
Im folgenden Dialog wähle ich zusätzlich die Checkbox „Create backup“ an und bestätige den Dialog
mit einem Klick auf die Schaltfläche „OK“.
Läuft alles korrekt ab, dann sollte ich im „Output Window“ (unten) folgenden Hinweis finden:
Ziel ist es hier die gepatchte Datei MIBRoot wieder in den IFS-Container zu integrieren.
In einem Hex-Editor werden die Dateien new_dk.ifs und MIBRoot geöffnet. Der gesamte Inhalt der
Datei MIBRoot wird markiert und in die Zwischenablage kopiert.
Nun benötigen wir die Offset-Adresse und die Dateilänge der vorher entnommenen Datei MIBRoot,
die wir uns gemerkt haben. In diesem Fall war es die Offset-Adresse 01698000 und eine Dateilänge
von A66C54.
In der Datei new_dk.ifs den obigen Bereich mittels des Menüs “Bearbeiten – Block auswählen” (STRG
E) markieren. Dann den Inhalt der Zwischenablage (den Inhalt der neuen MIBRoot) einfügen (STRG V)
und die geänderte Datei new_dk.ifs speichern und den Hex-Editor schließen.
Zuletzt muss die Datei new_dk.ifs wieder komprimiert werden. Der einfachste Weg führt über das
IFSTool. Dort laden wir die Datei new_dk.ifs und klicken auf die Schaltfläche „Pack“.
Hat alles richtig funktioniert, dann haben nun die neue Datei new_dk-repacked.ifs und die Basisdatei
new.ifs die gleiche Dateigröße. In diesem Fall sind es 13392853 bytes aka 13080 kb.
Final habe ich für mich die Datei new_dk-repacked in patched_ifs.ifs umbenannt.
Im entscheidenden Schritt wird die gepatchte Version des zweiten Teils der ifs-root.ifs in die MIB
übertragen. Dazu legen wir die SD-Karte mit der gepatchten Datei in den Slot 1 der MIB und führen
auf der MIB RCC Konsole die folgenden Befehle aus:
flashunlock
flashlock
Nach deinem Reboot des MMI ist die gepatchte MIB-Software aktiv und sollte nun die Anpassungen
der FEC-Datei im folgenden Kapitel akzeptieren.
Beim Beispielfahrzeug gelingt der Reboot/Reset des MMI mit der Tastenkombination MENÜ – WHEEL
– OBERE RECHTE FUNKTIONSTASTE.
0ABCCCDD — Karten:
DD:
- 4c= 2030
- FF = ~2075/Lifetime
Die Signatur ist grün, damit ist diese auch auf nicht gepatchten MIB funktionsfähig. Nun fügen wir
eine weitere FEC hinzu (hier Verlängerung der MAPS bis 2030).
Die Signatur ist nun rot (ungültig) und damit auf nicht gepatchten MIBs nicht zu benutzen.
Nach dem Login auf der MIB RCC, Ausführung der folgenden Kommandos:
mount -uw /net/mmx/fs/sda0/
mount -uw /net/rcc/mnt/efs-persist
cp -r /net/mmx/fs/sda0/FecContainer.fec /net/rcc/mnt/efs-persist/FEC/FecContainer.fec
mount -ur /net/rcc/mnt/efs-persist
Bei mir waren nach den Anpassungen Fehler im Steuergerät 5F zu finden, u.a. der Fehler „Software
version management check failed“ steht nach dem Update im Fehlerspeicher des Steuergerätes 5F.
Da ich aber keine Änderung der Verbauart vorgenommen hatte, ließen sich die Fehler einfach mit
VCDS löschen, ohne das auf Tools wie XORechner-XTR etc. zurückgegriffen werden musste.
Sofern Änderungen in der Verbauart vorgenommen wurden, dann führt folgender Weg bei VCDS
zum Ziel: