Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Support VCDS V2 Supportthread: Fragen, Infos und HowTo

Da bin ich mir gerade nicht sicher.....ich lade den nochmal und teste.....

EDIT: Funktioniert mit dem Installer von MEGA!!! Danke für den nochmaligen Hinweis das man nur den verwenden kann!:D:cool:;)
 
Zuletzt bearbeitet:
Doch die aus dem Downloadordner geht aber nur wenn man sie in VCDS installiert, nicht DRV. Läuft jetzt bei mir. Aber nur auf dem 2. Laptop, wer weiß waa die in dem installer geändert haben.
FW update gabs keins komischerweise für das Interface...
 
@talk2me

Ja, ich bin weitergekommen, aber noch nicht an dem Punkt,
an dem ich einen brauchbaren Dump vom eigentlichen Dongle vorzeigen kann.

In dem Projekt stecken mittlerweile auch schon einige hundert Stunden Arbeit.
Das klingt vielleicht etwas verrückt 😄, aber je tiefer ich in das Thema eingestiegen bin, desto mehr habe ich gemerkt,
dass es eben nicht damit getan ist, einen ST-Link anzuschließen und auf "Read" zu drücken.

Ich habe mir deshalb inzwischen eine eigene Testumgebung für den STM32F429 aufgebaut.

Darin steckt mittlerweile deutlich mehr als nur eine kleine Test-Firmware.
Im Grunde ist daraus ein eigenes kleines STM32F429-Testlabor geworden: mit definierter Speicheraufteilung,
verschiedenen Boot- und Recovery-Zuständen, Secure-Boot- und Update-Tests, Diagnosefunktionen,
Hardwaretests sowie automatisierten Tests und Auswertungen.

Der Grund dafür ist eigentlich relativ einfach:

Bevor ich versuche, Daten aus dem eigentlichen Dongle zu bekommen, möchte ich überhaupt verstehen,
was bei meinen Versuchen mit dem Controller und seinen Speicherinhalten passiert.


Dafür habe ich eigene Test-Firmwares gebaut, bei denen ich den ursprünglichen Inhalt natürlich genau kenne.

So kann ich anschließend kontrollieren:

  • Lese ich tatsächlich die Daten aus, die vorher im Flash lagen?
  • Bleiben die Daten beim Versuch unverändert?
  • Verändere oder beschädige ich Speicherbereiche durch meine eigene Vorgehensweise?
  • Bekomme ich einen vollständigen Dump oder fehlen bestimmte Bereiche?
  • Sind ausgelesene Daten tatsächlich echt oder durch den Versuch bereits verfälscht?
  • Was passiert bei Reset, Boot und unterschiedlichen Schutz- bzw. Fehlerzuständen?
  • Lässt sich ein Ergebnis überhaupt reproduzieren?

Genau das finde ich wichtig.

Wenn ich irgendwann beim Dongle einen vermeintlichen Firmware-Dump bekomme, bringt mir das wenig,
wenn ich anschließend nicht weiß, ob beispielsweise 20 % davon durch meinen eigenen Versuch verändert wurden
oder ob bestimmte Bereiche überhaupt nicht korrekt ausgelesen wurden.

Auf den Development Boards kann ich dagegen einen bekannten Ausgangszustand herstellen,
Versuche durchführen und danach Byte für Byte vergleichen, was tatsächlich passiert ist.

Dazu gehören unter anderem:

  • Boot- und Reset-Verhalten
  • Flash- und Speicherverhalten
  • Secure Boot / Update-Verhalten
  • UART-Diagnose
  • verschiedene Schutz- und Fehlerzustände
  • reproduzierbare Hardwaretests
  • Vergleich von Speicherständen vor und nach einem Versuch

Ich habe dafür inzwischen mehrere STM32F429IGT6 Development Boards verwendet.

Bis jetzt habe ich dabei drei STM32F4-Controller bzw. Boards "verbraten". 😄

Bei einem Versuch war ich nach meiner Einschätzung schon relativ weit und hatte ungefähr 60 % von dem erreicht,
was ich testen bzw. auslesen wollte. Danach war der Controller allerdings nicht mehr brauchbar.

Ärgerlich, aber genau dafür habe ich die Development Boards gekauft....

Dort kann ich Fehler machen, daraus lernen und anschließend den Aufbau oder die Vorgehensweise verändern.
Beim eigentlichen Dongle möchte ich dagegen möglichst wenig blind ausprobieren.

Das zeigt mir aber auch, dass das Ganze wesentlich schwieriger und empfindlicher ist, als einfach nur einen Programmer anzuschließen und einen Dump zu ziehen.

Beim eigentlichen Dongle ist der normale Debug-Zugriff nach wie vor komplett gesperrt.
Über ST-Link/SWD bekomme ich weiterhin keinen normalen Zugriff auf den internen Flash.

Deshalb gibt es momentan auch noch keinen Firmware-Dump vom Dongle, den ich guten Gewissens als brauchbar oder vollständig bezeichnen würde.

Für mich ist momentan der wichtigste Schritt, zuerst den STM32F429 selbst und das Verhalten seiner Speicherinhalte wirklich zu verstehen.

Erst wenn ich auf meiner eigenen Hardware einen reproduzierbaren Ablauf habe und anschließend zweifelsfrei sagen kann,
dass die erhaltenen Daten vollständig und unverändert sind, macht es für mich Sinn, daraus Rückschlüsse auf den Dongle zu ziehen.

Für mich bleibt das deshalb ganz klar ein Forschungs- und Hobbyprojekt.

Ich bin darin auch kein Experte. Das ist für mich Freizeitgestaltung und ich arbeite mich Stück für Stück in die Materie ein. Mal habe ich mehr Zeit dafür, mal weniger.

Was ich am Ende tatsächlich schaffe oder nicht, wird die Zeit zeigen.

Deshalb kann und möchte ich auch keine zeitliche Prognose abgeben,
wann ich einen vollständigen Dump oder etwas anderes wirklich Verwertbares habe. Alles andere wäre einfach geraten.

Was ich inzwischen auf jeden Fall sagen kann:

Die Dongles sind ziemlich gut abgesichert. Das Ganze wurde offensichtlich bewusst so konstruiert,
dass man nicht einfach mal eben an Firmware und andere interessante interne Daten kommt.
Da wurde schon einiges dafür getan, neugierige Blicke draußen zu halten. 😄

Aber genau das macht das Projekt für mich auch interessant.

Wenn mir irgendwann der entscheidende Durchbruch gelingt und ich einen Firmware- bzw. Speicherstand bekomme,
bei dem ich auch sicher bin, dass die Daten vollständig und unverfälscht sind, werde ich das hier natürlich mitteilen.

Ich bleibe auf jeden Fall dran.

Mehr kann ich dazu momentan ehrlich gesagt nicht versprechen. 🙂
 
@Malisums

Mich würde auch mal interessieren was der VIIPlusLoader denn eigentlich macht? Für Dein Projekt selbst - wenn Du mit dem VIIPlusLoader Experimente machst - ersetze die hidapi durch eine passende Proxy DLL zum Mitschneiden. Ich weiß nicht ob man den VIIPlusLoader dazu bekommt jedesmal die Firmware neu zu flashen - aber das könnte ein interessanter Ansatz sein.

Ältere Firmware die extrahiert wurde findet man ja im Internet - teilweise incl. decodiertem RAM Inhalt. Sowas könnte man auch als Grundlage nehmen.
 
@talk2me

Der Ansatz mit einer hidapi-Proxy-DLL ist auf jeden Fall interessant. 👍

Ich bin bei der Untersuchung bisher allerdings einen etwas anderen Weg gegangen und inzwischen
lässt sich auch schon deutlich genauer sagen, was Loader und Dongle miteinander machen.

Der VIIPlusLoader ist nicht einfach nur ein Programm, das schaut "Dongle vorhanden = VCDS starten".

Die Kommunikation besteht aus mehreren Ebenen.

Vereinfacht sieht das inzwischen ungefähr so aus:

Code:
VIIPlusLoader
     |
     | HID / eigenes Protokoll
     v
STM32F429 im Dongle
     |
     | Authentifizierung / Gerätezustand
     v
Loader
     |
     | teilweise FLY-Backend
     v
Freigabe / weitere Session

Den USB/HID-Teil habe ich inzwischen ziemlich ausführlich mitgeschnitten und zerlegt.

Der Dongle meldet sich als Vendor-Specific HID-Gerät. Die eigentliche Kommunikation läuft über 64-Byte-Reports
und größere Antworten werden über mehrere Reports fragmentiert.

Dabei gibt es verschiedene Endpoints bzw. Kommunikationskanäle. Einer wird beispielsweise sehr häufig für
kleine Statusmeldungen bzw. Polling verwendet, während über einen anderen Kanal die eigentlichen Antworten des Dongles kommen.

Interessanter sind aber die Kommandos innerhalb dieser HID-Reports.

Dort konnte ich inzwischen verschiedene wiederkehrende Kommandoklassen unterscheiden.

Es gibt beispielsweise eine Abfrage, auf die der Dongle einen relativ großen und bei identischer Anfrage reproduzierbaren Datenblock zurückliefert.

Daneben gibt es weitere Kommandos mit deutlich kleineren, aber sehr hochentropischen Antworten sowie größere Antworten,
die über mehrere HID-Fragmente verteilt werden.

Das sieht inzwischen sehr stark danach aus, dass der Dongle nicht nur eine Seriennummer speichert, sondern aktiv an der Authentifizierung beteiligt ist.

Vereinfacht würde ich den Ablauf momentan ungefähr so beschreiben:

Code:
Status prüfen
     |
     v
Geräteinformationen / Identität abfragen
     |
     v
Authentifizierung zwischen Loader und Dongle
     |
     v
weitere Session-/Freigabedaten
     |
     v
geschützte Funktionen des Loaders

Ein weiterer interessanter Punkt ist Code-DRV.dat.

Diese Datei ist ungefähr 2 MB groß und hat eine sehr hohe Entropie. Sie ist also offensichtlich nicht einfach eine normale
unverschlüsselte STM32-Firmware, die man mit einem Hexeditor öffnen und analysieren kann.

Gleichzeitig enthält V2Plus bzw. der Loader einen Crypto-Unterbau mit OpenSSL und lädt entsprechende Funktionen teilweise dynamisch.

Meine derzeitige Arbeitshypothese ist deshalb, dass Loader, Dongle und Code-DRV.dat wesentlich enger zusammenspielen als ursprünglich gedacht.

Der Dongle könnte dabei beispielsweise gerätespezifisches Material bzw. Ergebnisse einer kryptografischen Operation liefern,
die der Loader für die weitere Verarbeitung benötigt.

Ob Code-DRV.dat komplett auf dem PC entschlüsselt wird, ob Teile davon durch den Dongle verarbeitet werden oder ob
das Ganze hybrid funktioniert, ist allerdings noch nicht abschließend geklärt.

Genau an dieser Stelle wird es momentan interessant.

Die reine USB-Kommunikation ist nämlich inzwischen gar nicht mehr das größte Rätsel.

Ich habe vollständige Sessions aufgezeichnet und kann Host → Dongle und Dongle → Host voneinander trennen,
Fragmentierung rekonstruieren und verschiedene wiederkehrende Kommandotypen erkennen.

Wir haben dabei unter anderem gesehen, dass der Dongle auf bestimmte Anfragen reproduzierbar antwortet,
während andere Antworten offensichtlich dynamische bzw. kryptografische Daten enthalten.

Auch ein interessantes Detail:

Wenn man dem Dongle einfach irgendeinen syntaktisch falschen HID-Report schickt, ignoriert er das nicht unbedingt einfach,
sondern kann darauf mit einem Reset reagieren.

Da läuft also definitiv eigene Logik, die das Protokoll relativ streng überprüft.

Deshalb ist Dein Vorschlag mit der hidapi Proxy-DLL durchaus interessant,
aber für mich momentan eher noch eine zusätzliche Beobachtungsebene.

Ich habe die Kommunikation bisher direkt über USB-Captures und die HID-Reports untersucht und dadurch bereits
einen großen Teil des Transportprotokolls sichtbar gemacht.

Eine Proxy-DLL hätte natürlich den Vorteil, zusätzlich genau zu sehen, welche hidapi-Funktion der Loader
wann aufruft und welche Buffer die Anwendung unmittelbar davor bzw. danach verwendet.

Das könnte später noch hilfreich werden.

Mein größeres Problem liegt momentan aber eine Ebene höher:

Was macht der Loader mit den Daten, nachdem die Authentifizierung erfolgreich war?

V2Plus.exe ist zusätzlich ziemlich stark geschützt. Große Teile der eigentlichen Programmlogik liegen
nicht schön lesbar in normalen PE-Sektionen, sondern in Bereichen, die sehr stark nach VMProtect aussehen.

Unter Linux/Wine verhält sich das Programm außerdem anders und klassische Instrumentierung hat sich ebenfalls als problematisch erwiesen.

Deshalb bringt mir ein weiterer Mitschnitt derselben HID-Pakete momentan weniger als die Frage,
was anschließend im Windows-Prozessspeicher passiert.

Wenn dort irgendwann Code-DRV.dat in entschlüsselter Form auftaucht, wäre das natürlich wesentlich interessanter.

Deinen zweiten Punkt mit den älteren Firmwareständen sehe ich genauso.

Die im Netz vorhandenen extrahierten Firmwarestände und insbesondere bekannte RAM-Inhalte können als Referenz extrem hilfreich sein.

Allerdings muss man dabei genau wissen, was man eigentlich vor sich hat:

  • kompletter interner Flash?
  • nur Application?
  • Bootloader?
  • RAM-Abbild?
  • Update-Payload?
  • bereits entschlüsselte Daten?
  • bestimmte Hardware-/Firmwaregeneration?

Genau deshalb habe ich parallel mein STM32F429-Testprojekt aufgebaut.

Ich möchte auf eigener Hardware verstehen, wie die Speicherbereiche tatsächlich aussehen und vor allem feststellen können,
ob ein erzeugtes Abbild vollständig und unverändert ist.

Sonst findet man irgendwann irgendeine BIN-Datei im Internet und vergleicht sie tagelang mit etwas,
das möglicherweise überhaupt nicht denselben Speicherzustand repräsentiert. 😄

Ein weiterer Punkt, den wir inzwischen ziemlich gut bestätigen konnten:

Der BOOT-Dongle ist nicht wirklich "tot".

Der STM32 läuft, USB läuft und es findet weiterhin Kommunikation statt.

Was blockiert ist, ist der normale Debug-Zugriff auf den STM32.

Das passt wiederum ziemlich gut zu den Informationen, dass diese Geräte bewusst gegen das direkte Auslesen geschützt wurden.

Deshalb laufen bei mir momentan eigentlich drei Untersuchungen parallel:

  • USB/Protokoll: weitgehend verstanden, weitere Kommandos und Authentifizierung analysieren.
  • Loader/Code-DRV.dat: herausfinden, was nach erfolgreicher Dongle-Authentifizierung im Prozessspeicher passiert.
  • STM32F429-Testhardware: Speicher-, Boot- und Schutzverhalten auf eigener Hardware nachvollziehen, damit spätere Dumps überhaupt zuverlässig bewertet werden können.

Und irgendwann müssen diese drei Teile zusammenpassen.

Dann lässt sich hoffentlich nicht nur sagen "hier ist eine Firmware", sondern auch:

Wo kommt sie her, was enthält sie, wie wird sie verwendet und was unterscheidet einen funktionierenden Dongle tatsächlich von einem BOOT-Dongle?

Das ist momentan eigentlich die spannende Frage.

Die Proxy-hidapi behalte ich aber definitiv im Hinterkopf. Als zusätzliche Ebene zwischen Loader und echter hidapi.dll könnte das später noch interessante Informationen liefern, insbesondere wenn ich einen Update-/Recovery-Vorgang gezielt untersuche.


Vielleicht noch kurz dazu, warum ich mir den ganzen Aufwand überhaupt antue:

Mein ursprüngliches Ziel war eigentlich ziemlich simpel: Ich möchte einen günstigen FLY-Dongle wieder zum Leben erwecken.

Ich finde es einfach bescheuert, funktionierende Hardware auszusortieren, nur weil sie plötzlich softwareseitig nicht mehr nutzbar ist.
Vermutlich gibt es einen Aktivierungszähler. Laut Hersteller ist der Dongle nach 100 Schreibvorgängen nicht mehr nutzbar.🤬🤬🤬🤬🤬🤬🤬🤬

Bei mir war es konkret so:

Ich musste bei meinem relativ aktuellen Auto die Batterie wechseln und wollte vorher prüfen,
ob ich die neue Batterie anschließend mit VCDS entsprechend anlernen bzw. einprogrammieren kann.

Dongle angeschlossen, VCDS gestartet, Zugriff auf die entsprechenden Steuergeräte geprüft, alles funktionierte problemlos.

Danach VCDS sauber beendet, Dongle abgesteckt, Batterie gewechselt,
gemütlich ein Bier getrunken 😄 und anschließend den Laptop wieder gestartet.

Loader geöffnet, und plötzlich stand der Dongle nur noch auf BOOT.

VCDS war damit ebenfalls nicht mehr nutzbar.

Und genau das finde ich einfach Mist.

Vor allem weil sich bei meiner bisherigen Analyse immer deutlicher gezeigt hat, dass viele dieser Dongles technisch sehr eng miteinander verwandt sind.
Badrax, Kolimer, VII Plus, V2 Plus und weitere Varianten verwenden teilweise dieselbe Hardwarebasis und
einen sehr ähnlichen bzw. teilweise identischen Software-Unterbau.

Aus der ursprünglich simplen Frage:

"Warum funktioniert mein Dongle plötzlich nicht mehr und kann ich ihn reparieren?"

ist dann irgendwann dieses komplette Forschungsprojekt entstanden. 😄

Ich möchte am Ende eigentlich gar keinen neuen "Super-Dongle" entwickeln.
Mir würde es vollkommen reichen zu verstehen, warum funktionierende Hardware plötzlich im BOOT-Zustand landet und
ob man solche Geräte sinnvoll wiederherstellen kann, anstatt sie wegzuwerfen.

Und noch eine Frage zu den erwähnten älteren Dumps bzw. den bereits extrahierten Firmware- und RAM-Inhalten:

Wo genau findet man diese Dateien?

Falls jemand die entsprechenden Dumps noch hat und sie zur Analyse zur Verfügung stellen kann, wäre ich sehr daran interessiert.

Gerade ältere Flash-Dumps, RAM-Dumps oder bereits extrahierte Firmwarestände wären für meine Vergleichsanalyse sehr hilfreich,
auch wenn sie nicht exakt von derselben Firmware-Version stammen.
Bitte nur HEX V2

Falls jemand etwas davon hat, gerne hier im Thread oder per PN melden. 👍
 
Zuletzt bearbeitet:
@Malisums

Nicht jeder hat PN Funktionen...
Bei digital-kaos mal nach repair stm32f405 suchen

Gibt es eigentlich HEX V2 mit/ohne CryptoChip?
 
Zuletzt bearbeitet:
Okay - da ich recht neu bin erklärt das natürlich einiges :)

Wenn jemand mal ein wenig was in seiner Pause zu dem Thema lesen will -
Einfach die Webseite auf die bevorzugte Sprache übersetzen lassen.

Da wird sehr schön beschrieben warum der VIIPlusLoader überhaupt Dongle "zerstört". Weiterhin sind auch auch die verschiedenen Hardware Varianten beschrieben.
 
Zurück
Oben
📱
Forum App auf dein Handy
Schneller. Push-Benachrichtigungen. Offline-fähig.
Öffnen