Reverse Engineering: Serial / JTAG
Um notfalls einen zerschossenen Bootloader neu zu flashen Debugmessages beim Booten zu beobachten oder gar eine Shell zu erhalten, wäre JTAG oder wenigstens ein serieller Zugang wichtig.
Ohne Dokumentation nicht ganz trivial – aber nicht unmöglich. Bei der optischen Untersuchung der Platine fallen mehrere Anschlüsse und Pins ins Auge.
ACHTUNG: Mangels aktuell vorhandenem Gerät an meinem Standort bin ich auf vorher geschossene Fotos angewiesen und kann die Schritte im Moment nicht selbst praktisch durchführen! Kommt aber noch!
Grundsätzlich interessant wäre ein serieller Anschluss bzw. UART:
- 1 Pin Masse (messbar per Durchgangsprüfer ans Gehäuse oder andere Abschirmung)
- 1 Pin +3.3 Volt (Stromspannung messen gegen Massepin)
- 1 Receive RX: (Stromspannung messen gegen Massepin – sollte beim Bootvorgang stark schwanken zwischen 3,3V und 0, Beim schlechten Gerät kann ein Mittelwert wegen der Latenz angezeigt werden)
- 1 Transmitter Pin TX: am schwersten zu messen – aber da wenig beschädigt wird, am besten Testpins anhängen und putty starten!
oder ein JTAG Anschluss (10 – 20 Pins – recht eindeutig bei der optischen Betrachtung).
Unsere Kandidaten:
USB / Debug(Con10,15):
Con15 ist mit den normalen USB Breakout-Kabeln belegt. CON10 ist ebenfalls ein normaler USB Hostanschluss – leider nur 4 Pins (dh. kein 5. Sense / ID Pin) und funktioniert soweit ganz normal. Darüber erspäht man ein nicht eingelöteter Anschluss für „Debug“. Erster Gedanke: Uh – Seriell? Multimeter gezückt und durchgemessen – leider sind sowohl der erste wie auch der letzte Pin auf Masse – die mittleren Pins dazwischen haben konstante 3.3V. Also eher kein brauchbarer Zugang.
Con3:
Con 3 sieht ebenfalls vielversprechend aus: Ganz in der Nähe der ARM CPU (!) finden wir von rechts nach links:
- Masse
- Plus 3.3V
- schwankend beim Booten zw. 0V und 3.3V – dh. evtl. RX
- fast keine Reaktion beim booten – aber innerhalb der 3.3V evtl. TX
Das wäre der erste gute Kandidat für eine serielle Verbindung! Die nächsten Schritte wären also Testpins / ein Kabel (ich verwende ein USB-Serial Kabel) anzulöten: Masse auf Masse, TX auf RX , RX auf TX – und FINGER WEG vom Plus – das bleibt unverbunden sonst wird mit an Sicherheit grenzender Wahrscheinlichkeit das Board gebraten.
Die Verbindungsparameter sind „höchstwahrscheinlich“ 8N1 dh. 8 Bit, kein Partitybit und 1 Stopbit. Bleibt noch die Frage nach der Baudrate – wer nicht zuviel experimentieren will -> hier gibts ein kleines Pythonscript welches mit der Autoerkennung schnell die richtige Baudrate ausspuckt. Nun müsste es möglich sein, eine Verbindung herzustellen und bis zu einer Shell vorzudringen.
Rückseite des Mainboards – hier wirds nochmal richtig spannend:
Wir finden einen Haufen Testpunkte für die einzelnen Units: RST, MCU RX/TX, MPU CLK, MPEG RX/TX/CTL wie auch BT RX/TX/MIC+ <– welcher zur blauen BT Platine geht. Hier wird übrigens das lästige Brummen bei verbundenem Bluetooth herkommen?
J1 kann auch ausgeschlossen werden.
more to come!
Schreibe einen Kommentar