Operation am offenen Hirn - Recovery eines gebrickten TP Link WDR-4300

in #hacking2 years ago

Wie gestern bereits berichtet, habe ich leider durch eine kleine Dummheit auf meinem TP-Link WDR-4300 eine falsche Firmware geflasht. Dieser ist zumeist im Flash-Speicher der jeweiligen Hardware und sagt dem Gerät was es tun soll, nachdem es mit Strom versorgt wurde. Für den Laien ein wenig so wie quasi das Betriebssystem auf deinem Rechner. Anfangs läuft das BIOS durch und danach versucht es das eigentliche System zu starten.

Hierbei trat jedoch das Problem auf. Ich habe einfach geistesabwesend das falsche Betriebssystem installiert von einem ganz anderen Gerät. Da die Firmware üblicherweise sehr genau auf das jeweilige Gerät angepasst wird, passt es alles nicht zusammen, es stürzt ab und beginnt den Zyklus vom neuen. Es hängt in einer Boot-Loop fest ohne das es jemals wieder die Chance hat dort raus zu kommen.

Da nie ein System startet, können wir uns auch nicht mehr z.B. per Netzwerkkabel via Browser darauf verbinden. Theoretisch haben wir hier also nur noch einen „Brick“, einen Backstein ohne andere Funktion als vielleicht noch als hässlicher Briefbeschwerer. Bei allem sollte man im Hinterkopf behalten, dass ich der Software-Mensch bin ... von Hardware habe ich ja keine Ahnung und kann nicht einmal löten. Na, gut ... rauslöten geht schon, aber für alles andere fange ich mir jemanden von der Straße und lasse es machen ;)

Aber Computer sind eben keine magischen Geräte und ich witzel nicht umsonst immer, dass man alles fixen kann, was einen USB-Anschluss hat. Es erfolgt zunächst ein grundlegender Sanity Check des Systems. Bringt es etwas das Gerät stromlos zu machen? Reagiert es vielleicht noch auf die Reset-Funktion? Alles negativ, es bleibt in seiner Loop gefangen. Positiv ist zu vermerken, dass die LEDs alle schön flackern, grundlegend ist da schon Leben drin, dass Ding ist halt nur leider Hirntod. Also brauchen wir eine USB-Anschluss. Diese befinden sich zwar hinten auf dem Gerät, aber wir müssen ins innere rein.

20190703_214738.jpg

Damit beginnt dann auch immer schon der unangenehme Teile der Arbeit: Dem öffnen des Patienten. Was nämlich dem Chinesen beim Zusammenbau durchs Hirn ging, kann manches Mal sehr abenteuerlich sein. Also fägnt man erst einmal mit dem offensichtlichsten an. Die Antennen lassen sich abschrauben und auch darunter sind vier Schrauben, die sich leicht rausdrehen lassen. Natürlich sitzt das Gehäuse danach immer noch bombenfest!

Ich taste über das Edikette auf der Unterseite, ob ich irgendwo eine Einbuchtung fühle. Gerne versteckt man noch eine Schraube unter diesen, allerdings scheint alles sehr solide zu sein. Nirgendwo sonst lassen sich irgendwelche Schrauben finden. Das ist ärgerlich, weil man nun ein wenig Kraft braucht, da eben vielleicht das Gerät geclipt wurde. Irrt man sich, kann man jedoch leicht das Plastik beim Versuch es auseinander zu ziehen beschädigen. Daher schaut man es sich lieber noch ein zweites und drittes Mal an, wo vielleicht Verschraubung sind.

Hilft das nicht, kommt bei mir ein Satz an alten EC- und Gesundheitskarten zum Einsatz. Diese sind ideal, um solche Dinge aufzuhebeln, da sie sehr robust, recht flach und gleichzeitig die Kraft auf eine größere Fläche verteilen und somit das Risiko senkt, dass es irgendwo bricht. Dazu zwei kleine Schlitzschraubenzieher. Ich fange an mich langsam an der Fassade zu schaffen zu machen. Vorne bei den LEDs kriege ich die erste Karte rein und arbeite mich langsam zur Seite vor. Bietet es sich an, kommt eine Karte rein, damit es nicht gleich wieder zusammenfält.

20190703_221805.jpg

Nach einigen Minuten macht es endlich klick! Das Gerät öffnet sich endlich und der Verdacht ist bestätigt. Es wurde geclipt und ich habe keine Schraube übersehen. Das ist gut, da der Zusammenbau dann leichter geht ;) Innen sehen wir die Platine und das Innenleben des Gerätes. Insbesondere gut sieht man die Antennen, die auf das Gerät geführt werden. Man beobachte, dass diese schlichtweg vom Chinesen mit Tesafilm auf dem Board befestigt wurde.
Eine erste Sichtprüfung lässt mich ein wenig verzweifeln. Kein serieller Port zu sehen oder irgend etwas, dass auch nur in der Richtung aussieht. Wir brauchen üblicherweise immer etwas, dass VCC, GND, RX und TX heißt. Nichts, trotz Augenlupe. Auch auf der Rückseite lasst sich diese Stelle nicht identifizieren.

Ich suche also die Bauteile ab. Die Firmware muss ein wenig wie ein kleiner Speichern sein und einige Anschlüsse haben. Ein kleines Bauteil entspricht genau diesem und thront ein wenig über allem. Von der Beschriftung her verät es aber nichts: J1. Aber es sieht aus wie Firmware und hat daneben 4 Löcher. Es ist die beste Chance, die ich habe.

20190703_221824.jpg

Ich krame meinen FTDI heraus mit dem ich einen seriellen Port auf USB bekomme. Ein kleiner Chip, der an den Rechner kommt. Mit Jumperkabel (männlich->weiblich) verbinde ich die 4 Pins auf dem FTDI. Ich zögere einen Moment. Kriege ich wirklich das gesamte Gerät über den USB mit Energie versorgt? Immerhin hängt da ja einiges an Hardware drin. Ich komme zum Schluss, dass ich das Gerät mit Strom versorgen werden muss. Dabei wäre es aber schlecht, wenn ich ne eigene Stromquelle dran habe. Daher entschließe ich mich den VCC weg zu lassen und einfach nur auf Boden und RX, TX zu beschränken.

20190703_222516.jpg

Auf dem Board werden die Jumperkabel, dann ebenfalls verbunden und einfach die Stecker in die Löcher gesteckt. Wichtig ist dabei, dass üblicherweise immer RX und TX getauscht werden. Das eine Gerät ließt eben auf dem RX und das andere schreibt dort rein und vice versa. Es soll ja eine Kommunikation stattfinden. Ich nehme einfach die Standardbelegung, wie sie in einigen anderen Geräten ist, die ich vor kurzem angesehen habe.

20190703_222654.jpg

Alles ist angerichtet. Also kommt nun der normale Netzstecker ans Gerät. Auf dem folgenden Bild sieht man auch bereits meinen Fehler, der mir einige Minuten kosten wird. Erkennt ihn jemand schon? ;) Das Gerät blinkt fröhlich vor sich hin und geht wieder in seine Boot-Loop über. Aber wir haben ja nun unsere Geheimwaffe, den FTDI im Einsatz, der inzwischen mit dem Linux-System verbunden ist.

20190703_223839.jpg

Zaghaft verbinde ich mich vom Linux-System mit dem FTDI:

picocom -b 115200 /dev/ttyUSB0

Die Baudrate ist geraten gewesen, aber nicht unüblich. Und siehe da, wir haben Erfolg! Das hirntode Gerät spricht mit uns! Ein wenig als würde der Zombie uns plötzlich wieder mitteilen, wo er den gebissen wurde.

20190703_223848.jpg

Wir sehen also, dass er versucht das Image zu starten und den Kernel zu starten, dabei allerdings ein Fehler beim Entkomprimieren auftritt. Ich habe dem armen Ding halt einen anderen Geist in den falschen Körper gepflanzt. Fast so als würde man einem stolzen Zweibeiner eine Affenseele einhauchen. (hust).

Bereits von einem anderen Gerät kenne ich die magischen Worte für die Konsole und hauche „tpl“ ins Terminal. Das ist natürlich ein wenig tricky, weil das Gerät ja ständig bootet und wieder abschmiert und wieder bootet. Dabei muss ich genau den Moment erwischen in dem der Boot-Loader greift um der kleinen digitalen Seele im richtigen Moment ins Licht zu führen ;)

Plötzlich hört das Gerät auf zu blinken und begrüßt mich mit einem:

db12x>

Das ist ein Prompt und eben jene Art von Computer zu sagen: Ja, Meister? Ich habe das Gerät wieder und weiß bereits zu diesem Zeitpunkt, dass wieder Hoffnung besteht. Ich schaue mich kurz um auf dem System, was mir so zur Verfügung steht. Als Entwickler fühle ich mich nicht besonders wohl, da mir eben kein besonders mächtiger Satz ans Tools zur Verfügung steht, die man sonst so einsetzen kann. Ein Copy, ein Erase und ein Kommando für ein tftp tool. Das ist nicht sehr viel.

Also setze ich auf meinem Linux-System fix einen tftp-Server auf und versuche mich daran mit einem Aufruf die aktuelle Firmware auf den Router zu laden. Es klappt nicht. Ich realisiere, dass die IP-Adressen falsch eingestellt sind und korrigiere das fix. Auch jetzt klappt es immer noch nicht. Ich bin verwundert, dass ich den tftp vielleicht falsch eingestellt habe oder die Firewall mir einen Strich durch die Rechnung macht. Doch das Notebook ist in der Lage die Firmware herunterzuladen.

Erst jetzt schwenkt mein Blick über das Gerät... was ist daran bloss anders als beim Notebook. Doh! Der Vollprofi hat natürlich vergessen das LAN-Kabel einzustecken. Kann ja schonmal vergessen werden, wenn da soviele Kabel aus dem Kasten kommen. Erklärt es aber wunderbar, warum der Server nicht da ist ;)

db12x> tftpboot 0x81000000 openwrt-18.06.2-ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin
Using eth0 device
TFTP from server 192.168.0.1; our IP address is 192.168.0.166
Filename 'openwrt-18.06.2-ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin'.
Load address: 0x81000000
Loading: #################################################################
[...]
done
Bytes transferred = 8126464 (7c0000 hex)

Erfolg! Das neue Hirn des Gerätes ist nun auf dem Gerät drauf. Ich entschließe mich dazu zuvor noch einmal sicher zu gehen und einen Teil des alten zu löschen. Die Speicheradressen sind Gott sei Dank recht gut dokumentiert.

db12x> erase 0x9f020000 +7b0000
First 0x2 last 0x7c sector size 0x10000
124
Erased 123 sectors

Nun wird das Image von der Adresse in die wir es geladen haben in den eigentlichen Flashspeicher geladen.

db12x> cp.b 0x81000000 0x9f020000 0x7c0000
Copy to Flash... write addr: 9f020000
done

Das mag alles ein wenig nach Magie aussehen, ist aber eigentlich eben nur eine Adressierung. Eine Quelladresse, eine Zieladresse und ... na schaut mal, wieviel ich runtergeladen habe! Ich gebe einfach nur an wieviel geschrieben werden soll.

Nachdem dies nun auch erfolgreich ist, gebe ich nur noch ein Reset ab und das Gerät beginnt fröhlich vor sich zu blinken. Die Sys LED geht an und stabilisiert sich, ein LAN-Port beginnt zu blinken und nach einer Weile ein normaler operationeller Status. Ein Blick auf den Terminal offenbart, dass ein ganz normaler Bootvorgang eines Linux-Systems durchgeführt wurde. Das Gerät hat wieder das richtige Hirn im richtigen Körper. Ich brauche nur noch alles wieder abzubauen und zusammen zu stecken.

Ein solcher Zugriff ist natürlich immer ein Abenteuer und nahezu jedes Gerät hat irgendwo eine böse Überraschung parat. Am schwersten ist immer das erste Mal so etwas zu recovern. Danach kennt man das Muster und muss es nur noch finden. Leider trauen sich viel zu wenige Leute zu eine solche Reparatur durchzuführen.

Wer aber ein wenig mit Computern auskennt und nicht gerade in die Kategorie DAU gehört, sollte sich durchaus einmal ranwagen. Es ist einfach Schade zu sehen wieviele Geräte einfach so entsorgt werden, weil sie scheinbar kaputt sind. Dabei kann man viele davon leicht wieder flott machen. Wenn ihr das nächste Mal also einen Router wegschmeißen wollt, schraubt ihn doch mal auf und versucht Euch auch ein wenig daran. Man kann bei solchen Fehltritten immer noch eine Menge lernen ;)

Sort:  

Super beschrieben und erklärt, fand ich sehr interessant.

ich sponser dir mal einen kleinen minnowbooster upvote für den interessanten artikel

Vielen Dank. Hoffe halt auch, dass man ein wenig damit die Begeisterung wecken kann. Man muss sich viel häufiger mal zutrauen etwas aufzuschrauben und wieder fix zu kriegen. Die meisten Menschen geben heutzutage viel zu fix auf und kaufen sich dann lieber etwas neues nach.

Coin Marketplace

STEEM 0.91
TRX 0.12
JST 0.129
BTC 54094.44
ETH 2365.15
BNB 546.72
SBD 7.85