-- Einleitung --
Ab den 3er-Versionen der SPH Firmware gibt es keine reine Software-Lösung mehr, um das System des SPHs anzupassen...
Der SPH hat allerdings (schon länger bekannt) gleich mehrere serielle COM-Schnittstellen auf der Platine - eine davon gehört zum Linux-System des Routers. Bis jetzt war das Problem allerdings, daß diese Schnittstelle nicht sinnvoll auf Eingaben reagierte - sie ist wohl eigentlich nur als Debug-Schnittstelle (Ausgabe) gedacht.
Bis kürzlich fehlten mir die Ressourcen / Werkzeuge / Zeit, um mich mit der COM zu befassen...
Der Hardware-Zugriff (und zwischenzeitliche 'Erfahrung') haben aber auch Vorteile - diese Anleitung benötigt kein FTP oder Manipulationen an der Config des SPHs
(Die Firewall-Regeln für Telnet und LTE-Modul setzen wir direkt -- Anpassungen am Startscript machen wir per 'sed' in der Konsole)
>>>>> bitte bedenkt, daß ihr alles auf eigene Gefahr macht - wenn Ihr Euch traut <<<<<
----> das Ganze ist zwar schon mehrfach getestet, aber es gibt keine Garantie (und die 'echte' Garantie geht auch flöten )
Credits:
@danXde --> für das Foto der Platine (hatte vergessen ein 'Vorher-Bild' von meinem SPH zu machen)
@Stricted --> weil er mich nochmal auf die 'richtige' COM gestuppst hat (deren Kontakte waren bei meinem SPH stark oxidiert und haben erst keinen Kontakt gegeben - Reinigung half...)
-- Was man braucht --
- Auf jeden Fall schonmal einen USB-Seriell-Adapter mit 3,3V-TTL-Pegel...
Ich persönlich empfehle da die mit FTDI-Chipsatz - Andere können aber auch funktionieren. Es gibt zB. welche für Arduino mit 3,3V...
(notfalls überprüft die Spannung der Datenleitungen - es gibt Adapter, welche trotz 3,3V Versorgung die Datenleitungen mit 5V treiben - auch wenn das nicht sein sollte)
--> die gibt's ab €4.- aber auch über €20.-
- Dupont-Kabel (männlich/weiblich) sind auch immer hilfreich - eine Seite passt meist an den Adapter, die Andere kann man notfalls entfernen.
- Lötwerkzeug, Nadeln - je nachdem, wie man die Verbindung herstellen möchte.
- Fluxx / Reinigungsmittel oder wenigstens die blaue / rauhe Seite eines Radiergummies, um die Kontakte zu reinigen.
- USB-Stick mit busybox-mips und/oder bootstrap-script (im Anhang - entpacken und auf den USB-Stick - busybox-mips ist neueste Version!)
- Ein passendes Terminal-Programm: unter Linux zB. 'Screen' oder 'GtkTerm' (das nutze ich) - unter Windows ist glaub' ich 'putty' ok.
- Eine ruhige Hand und/oder Mut
-- Öffnen des SPHs --
Unter dem Fuß des SPHs sind zwei Gummistreifen - unter jedem Streifen ist eine Schraube.
Der Rest des Gehäuses ist geklippt - dafür gibt's spezielles Werkzeug...
...ich nehm' da einfach eine alte Plastikkarte
Wir müssen an die Rückseite der Platine - also abschrauben...
-- Verbindung des USB-Serial-Adapters -- da hab' ich ein Bild für euch...
Verbindungen:
Adapter-GND an SPH-GND
Adapter-RX an SPH-TX
Adapter-TX an SPH-RX (ja - das ist links von dem kleinen SMD-Widerstand)
Löten dürfte am sichersten sein - eventuell könnte man auch feine Nadeln in die Kontakt-Stellen 'bohren'...
Verbindungsparameter der COM:
- 115200 Baud
- 8 Datenbits
- keine Parität
- 1 Stoppbit
---> also 115200-8-N-1
So verbunden, sollte beim Boot einiges an Meldungen durchlaufen...
-- Anpassen des Bootscripts --
Jetzt kommt der 'fiese' Part...
Wie oben erwähnt reagiert die Konsole über die COM nicht wirklich sinnvoll - was daran liegt, das der letzte Befehl im Startscript des Routers nicht zurückkehrt. Zusätzlich ist die 'erweiterte Jobkontrolle' deaktiviert, weshalb es auch keine Reaktion auf typische Tastenkombinationen gibt, um einen Abbruch anzustreben.
Deshalb ging es hier auch nicht weiter - bis ich selbst testen konnte...
Der Trick ist, im richtigen Moment einen Lesefehler am Flash-Chip zu erzwingen
Dafür muß man eigentlich nur mindestens zwei der Datenleitungen des Chips miteinander kurzschließen...
--> CRC-Prüfsummenfehler --> Abbruch des Startscripts --> Drop auf die Root-Shell
Im Bild oben habe ich am Flash-Chip (unten - fast mittig) einen Bereich markiert (Pin 5,6,7,8 von unten - rechts) - das sind 'sichere' Daten-Pins zum Kurzschließen.
--> in beiden Ausführungen des Flash-Chips sind das Datenleitungen und die direkten Nachbarn darüber und darunter sind ungefährlich, selbst wenn man etwas verrutschen sollte.
Man schaut also dem Boot zu - und sobald man die Meldungen bzgl. der 'mounts' sieht, alsoschließt man dort kurz -- mindestens zwei der vier Pins, zB. mit einem Schraubenzieher, Büroklammer, Prüfspitze...
--> man landet in der Root-Shell...
Jetzt passen wir das Startscript (/etc/profile) an, damit es beim nächsten Mal auch ohne Kurzschluß geht.
(wir machen dafür einen Zwischenschritt, weil man für den Rest den USB-Stick benötigt - der nur nach einem 'sauberen' Boot richtig funktioniert)
Folgende Befehle kopieren das Startscript, passen es an und schreiben es in das RootFS zurück:
-- normalerweise kann man die Befehle zeilenweise kopieren --
Jetzt warten wir ein paar Sekunden zur Sicherheit - dann Reboot...
--> wenn der SPH komplett 'oben' ist - funktioniert nun auch die COM.
-----> sie ist allerdings auch weiterhin für Debug-Meldungen zuständig, die manchmal einfach so 'dazwischen' kommen - davon nicht irritieren lassen
...und man sieht nicht unbedingt sofort einen Prompt - wenn der Boot durch ist, nichts mehr an Meldungen durchläuft, einfach mal 'Strg-C' hilft da.
-- Das eigentliche Ziel --
Je nachdem, was man erreichen will, gibt's jetzt zwei Möglichkeiten - Telnet oder Bootstrap...
Die schließen sich zwar nicht aus, aber wenn man den Bootstrap machen will, kann man Telnet auch dort einbinden - und braucht das nicht direkt im Startscript des SPHs zu erledigen.
--> Deshalb zwei Versionen - einmal Telnet (inkl. Firewall-Regeln für Telnet und LTE-Modul) und einmal für Bootstrap.
--> alle Anpassungen am Startscript machen wir per 'sed' - dadurch brauchen wir die Datei nicht erst auf den PC zu ziehen und alles geht direkt in der Konsole.
-- Version 1 - Telnet --
Die folgenden Befehle kopieren erstmal die busybox-mips vom USB-Stick nach /tmp (Sony_Storage_Media-054C8388_usb1 ist dabei die Kennung meines Sticks)
--> Am einfachsten ist, nach 'cp /mnt' ein paar mal die TAB-Taste drücken --> der Pfad sollte dann ergänzt werden
Danach wird das Startscript nach /tmp kopiert, per 'sed' angepasst und in das RootFS zurückgeschrieben... (zeilenweise kopieren - 'sed'-Befehl ist laaang)
Jetzt warten wir ein paar Sekunden zur Sicherheit - dann Reboot...
--> sobald der SPH komplett 'oben' ist, sollte er per Telnet erreichbar sein
--> der zugegeben recht lange 'sed'-Befehl setzt auch die Firewall-Regeln für Telnet und die Erreichbarkeit des LTE-Moduls -- kein Entschlüsselns/Anpassen/Verschlüsselns der Config etc. notwendig!
-- Version 2 - Bootstrap --
Die Befehle für den Bootstrap sind übersichtlicher...
Die folgenden Befehle kopieren erstmal die bootstrap vom USB-Stick nach /tmp (Sony_Storage_Media-054C8388_usb1 ist dabei die Kennung meines Sticks)
--> Am einfachsten ist, nach 'cp /mnt' ein paar mal die TAB-Taste drücken --> der Pfad sollte dann ergänzt werden
Dann passen wir das Startscript an, schreiben es zurück in's RootFS, erstellen /opt/bin und kopieren das bootstrap-Script hinein - und passen die Rechte an.
Jetzt warten wir ein paar Sekunden zur Sicherheit - dann Reboot...
--> ab jetzt wird der SPH beim Start schauen, ob ein USB-Stick verbunden, darauf ein Ordner '_bootstrap_' vorhanden ist -- wenn ja, wird dieser als '/opt' in das Dateisystem des SPHs eingebunden.
Dann wird geprüft, ob in '/opt' (USB-Stick/_bootstrap_) ein Script mit dem Namen 'bootstrap_init.sh' zu finden ist -- wenn ja, wird es gestartet.
Dafür muß der USB-Stick allerdings ext2 oder ext3 formatiert sein, sonst klappt das mit den Dateirechten nicht.
Details gibt's nochmal hier --> Bootstrap - Erweiterungen / Änderungen auf USB auslagern
-- Abschluß --
Abschließed möchte ich sagen, daß man mit einem USB-TTL-Adapter im Grunde fast jedes 'moderne' Gerät anpassen kann.
Ärgerlich ist es allerdings trotzdem, daß soviel 'Notwehr' notwendig ist, nur um die Obrigkeit über das eigene LAN zu behalten.
--> richtig wäre ein 'sauberer' Telnet oder SSH-Zugriff direkt in der Firmware -- oder eine ordentliche Firmware...
Naja - ich wünsche Euch zumindest viel Spaß
mfg, emkay
Ab den 3er-Versionen der SPH Firmware gibt es keine reine Software-Lösung mehr, um das System des SPHs anzupassen...
Der SPH hat allerdings (schon länger bekannt) gleich mehrere serielle COM-Schnittstellen auf der Platine - eine davon gehört zum Linux-System des Routers. Bis jetzt war das Problem allerdings, daß diese Schnittstelle nicht sinnvoll auf Eingaben reagierte - sie ist wohl eigentlich nur als Debug-Schnittstelle (Ausgabe) gedacht.
Bis kürzlich fehlten mir die Ressourcen / Werkzeuge / Zeit, um mich mit der COM zu befassen...
Der Hardware-Zugriff (und zwischenzeitliche 'Erfahrung') haben aber auch Vorteile - diese Anleitung benötigt kein FTP oder Manipulationen an der Config des SPHs
(Die Firewall-Regeln für Telnet und LTE-Modul setzen wir direkt -- Anpassungen am Startscript machen wir per 'sed' in der Konsole)
>>>>> bitte bedenkt, daß ihr alles auf eigene Gefahr macht - wenn Ihr Euch traut <<<<<
----> das Ganze ist zwar schon mehrfach getestet, aber es gibt keine Garantie (und die 'echte' Garantie geht auch flöten )
Credits:
@danXde --> für das Foto der Platine (hatte vergessen ein 'Vorher-Bild' von meinem SPH zu machen)
@Stricted --> weil er mich nochmal auf die 'richtige' COM gestuppst hat (deren Kontakte waren bei meinem SPH stark oxidiert und haben erst keinen Kontakt gegeben - Reinigung half...)
-- Was man braucht --
- Auf jeden Fall schonmal einen USB-Seriell-Adapter mit 3,3V-TTL-Pegel...
Ich persönlich empfehle da die mit FTDI-Chipsatz - Andere können aber auch funktionieren. Es gibt zB. welche für Arduino mit 3,3V...
(notfalls überprüft die Spannung der Datenleitungen - es gibt Adapter, welche trotz 3,3V Versorgung die Datenleitungen mit 5V treiben - auch wenn das nicht sein sollte)
--> die gibt's ab €4.- aber auch über €20.-
- Dupont-Kabel (männlich/weiblich) sind auch immer hilfreich - eine Seite passt meist an den Adapter, die Andere kann man notfalls entfernen.
- Lötwerkzeug, Nadeln - je nachdem, wie man die Verbindung herstellen möchte.
- Fluxx / Reinigungsmittel oder wenigstens die blaue / rauhe Seite eines Radiergummies, um die Kontakte zu reinigen.
- USB-Stick mit busybox-mips und/oder bootstrap-script (im Anhang - entpacken und auf den USB-Stick - busybox-mips ist neueste Version!)
- Ein passendes Terminal-Programm: unter Linux zB. 'Screen' oder 'GtkTerm' (das nutze ich) - unter Windows ist glaub' ich 'putty' ok.
- Eine ruhige Hand und/oder Mut
-- Öffnen des SPHs --
Unter dem Fuß des SPHs sind zwei Gummistreifen - unter jedem Streifen ist eine Schraube.
Der Rest des Gehäuses ist geklippt - dafür gibt's spezielles Werkzeug...
...ich nehm' da einfach eine alte Plastikkarte
Wir müssen an die Rückseite der Platine - also abschrauben...
-- Verbindung des USB-Serial-Adapters -- da hab' ich ein Bild für euch...
Verbindungen:
Adapter-GND an SPH-GND
Adapter-RX an SPH-TX
Adapter-TX an SPH-RX (ja - das ist links von dem kleinen SMD-Widerstand)
Löten dürfte am sichersten sein - eventuell könnte man auch feine Nadeln in die Kontakt-Stellen 'bohren'...
Verbindungsparameter der COM:
- 115200 Baud
- 8 Datenbits
- keine Parität
- 1 Stoppbit
---> also 115200-8-N-1
So verbunden, sollte beim Boot einiges an Meldungen durchlaufen...
-- Anpassen des Bootscripts --
Jetzt kommt der 'fiese' Part...
Wie oben erwähnt reagiert die Konsole über die COM nicht wirklich sinnvoll - was daran liegt, das der letzte Befehl im Startscript des Routers nicht zurückkehrt. Zusätzlich ist die 'erweiterte Jobkontrolle' deaktiviert, weshalb es auch keine Reaktion auf typische Tastenkombinationen gibt, um einen Abbruch anzustreben.
Deshalb ging es hier auch nicht weiter - bis ich selbst testen konnte...
Der Trick ist, im richtigen Moment einen Lesefehler am Flash-Chip zu erzwingen
Dafür muß man eigentlich nur mindestens zwei der Datenleitungen des Chips miteinander kurzschließen...
--> CRC-Prüfsummenfehler --> Abbruch des Startscripts --> Drop auf die Root-Shell
Im Bild oben habe ich am Flash-Chip (unten - fast mittig) einen Bereich markiert (Pin 5,6,7,8 von unten - rechts) - das sind 'sichere' Daten-Pins zum Kurzschließen.
--> in beiden Ausführungen des Flash-Chips sind das Datenleitungen und die direkten Nachbarn darüber und darunter sind ungefährlich, selbst wenn man etwas verrutschen sollte.
Man schaut also dem Boot zu - und sobald man die Meldungen bzgl. der 'mounts' sieht, alsoschließt man dort kurz -- mindestens zwei der vier Pins, zB. mit einem Schraubenzieher, Büroklammer, Prüfspitze...
--> man landet in der Root-Shell...
Jetzt passen wir das Startscript (/etc/profile) an, damit es beim nächsten Mal auch ohne Kurzschluß geht.
(wir machen dafür einen Zwischenschritt, weil man für den Rest den USB-Stick benötigt - der nur nach einem 'sauberen' Boot richtig funktioniert)
Folgende Befehle kopieren das Startscript, passen es an und schreiben es in das RootFS zurück:
-- normalerweise kann man die Befehle zeilenweise kopieren --
Jetzt warten wir ein paar Sekunden zur Sicherheit - dann Reboot...
--> wenn der SPH komplett 'oben' ist - funktioniert nun auch die COM.
-----> sie ist allerdings auch weiterhin für Debug-Meldungen zuständig, die manchmal einfach so 'dazwischen' kommen - davon nicht irritieren lassen
...und man sieht nicht unbedingt sofort einen Prompt - wenn der Boot durch ist, nichts mehr an Meldungen durchläuft, einfach mal 'Strg-C' hilft da.
-- Das eigentliche Ziel --
Je nachdem, was man erreichen will, gibt's jetzt zwei Möglichkeiten - Telnet oder Bootstrap...
Die schließen sich zwar nicht aus, aber wenn man den Bootstrap machen will, kann man Telnet auch dort einbinden - und braucht das nicht direkt im Startscript des SPHs zu erledigen.
--> Deshalb zwei Versionen - einmal Telnet (inkl. Firewall-Regeln für Telnet und LTE-Modul) und einmal für Bootstrap.
--> alle Anpassungen am Startscript machen wir per 'sed' - dadurch brauchen wir die Datei nicht erst auf den PC zu ziehen und alles geht direkt in der Konsole.
-- Version 1 - Telnet --
Die folgenden Befehle kopieren erstmal die busybox-mips vom USB-Stick nach /tmp (Sony_Storage_Media-054C8388_usb1 ist dabei die Kennung meines Sticks)
--> Am einfachsten ist, nach 'cp /mnt' ein paar mal die TAB-Taste drücken --> der Pfad sollte dann ergänzt werden
Danach wird das Startscript nach /tmp kopiert, per 'sed' angepasst und in das RootFS zurückgeschrieben... (zeilenweise kopieren - 'sed'-Befehl ist laaang)
Quellcode
- cd /tmp
- cp /mnt/Sony_Storage_Media-054C8388_usb1/busybox-mips .
- cp /etc/profile .
- sed -i -e '/Done/imkdir -p /dev/pts' -e '/Done/imount -t devpts devpts /dev/pts' -e '/Done/i/bin/busybox-mips telnetd -l /bin/sh' -e '/Done/iiptables -I INPUT_FIREWALL -s 192.168.2.0/24 -j ACCEPT' -e '/Done/isleep 60' -e '/Done/iiptables -t nat -I POSTROUTING -s 192.168.2.0/24 -j MASQUERADE --mode fullcone' -e '/Done/iiptables -I FORWARD -s 192.168.2.0/24 -d 172.10.10.1 -j ACCEPT' -e '/Done/i' profile
- mkdir rmnt
- mount -t jffs2 /dev/mtdblock0 /tmp/rmnt
- mount -o remount,rw /dev/mtdblock0 /tmp/rmnt
- cp busybox-mips rmnt/bin
- chmod 777 rmnt/bin/busybox-mips
- rm rmnt/etc/profile && cp profile rmnt/etc/
- chmod 770 rmnt/etc/profile
- umount /tmp/rmnt
Jetzt warten wir ein paar Sekunden zur Sicherheit - dann Reboot...
--> sobald der SPH komplett 'oben' ist, sollte er per Telnet erreichbar sein
--> der zugegeben recht lange 'sed'-Befehl setzt auch die Firewall-Regeln für Telnet und die Erreichbarkeit des LTE-Moduls -- kein Entschlüsselns/Anpassen/Verschlüsselns der Config etc. notwendig!
-- Version 2 - Bootstrap --
Die Befehle für den Bootstrap sind übersichtlicher...
Die folgenden Befehle kopieren erstmal die bootstrap vom USB-Stick nach /tmp (Sony_Storage_Media-054C8388_usb1 ist dabei die Kennung meines Sticks)
--> Am einfachsten ist, nach 'cp /mnt' ein paar mal die TAB-Taste drücken --> der Pfad sollte dann ergänzt werden
Dann passen wir das Startscript an, schreiben es zurück in's RootFS, erstellen /opt/bin und kopieren das bootstrap-Script hinein - und passen die Rechte an.
Quellcode
- cd /tmp
- cp /mnt/Sony_Storage_Media-054C8388_usb1/bootstrap .
- cp /etc/profile .
- sed -ir -e 's/PATH=(\/.*)$/PATH=\1:\/opt\/bin/' -e '/mic/ish /opt/bin/bootstrap &' -e '/mic/i' profile
- mkdir rmnt
- mount -t jffs2 /dev/mtdblock0 /tmp/rmnt
- mount -o remount,rw /dev/mtdblock0 /tmp/rmnt
- rm rmnt/etc/profile && cp profile rmnt/etc/
- chmod 770 rmnt/etc/profile
- mkdir -p rmnt/opt/bin
- cp bootstrap rmnt/opt/bin
- chmod 777 -R rmnt/opt
- umount /tmp/rmnt
Jetzt warten wir ein paar Sekunden zur Sicherheit - dann Reboot...
--> ab jetzt wird der SPH beim Start schauen, ob ein USB-Stick verbunden, darauf ein Ordner '_bootstrap_' vorhanden ist -- wenn ja, wird dieser als '/opt' in das Dateisystem des SPHs eingebunden.
Dann wird geprüft, ob in '/opt' (USB-Stick/_bootstrap_) ein Script mit dem Namen 'bootstrap_init.sh' zu finden ist -- wenn ja, wird es gestartet.
Dafür muß der USB-Stick allerdings ext2 oder ext3 formatiert sein, sonst klappt das mit den Dateirechten nicht.
Details gibt's nochmal hier --> Bootstrap - Erweiterungen / Änderungen auf USB auslagern
-- Abschluß --
Abschließed möchte ich sagen, daß man mit einem USB-TTL-Adapter im Grunde fast jedes 'moderne' Gerät anpassen kann.
Ärgerlich ist es allerdings trotzdem, daß soviel 'Notwehr' notwendig ist, nur um die Obrigkeit über das eigene LAN zu behalten.
--> richtig wäre ein 'sauberer' Telnet oder SSH-Zugriff direkt in der Firmware -- oder eine ordentliche Firmware...
Naja - ich wünsche Euch zumindest viel Spaß
mfg, emkay