- Mitglied seit
- 7 Nov 2006
- Beiträge
- 2,927
- Punkte für Reaktionen
- 3
- Punkte
- 36
Ich habe lange nichts mehr geschrieben, aber am Wochenende hatte ich bei einer Freundin das Problem, daß zwar einerseits ein Firmware-Mod nicht infrage kam, aber andererseits gewisse Programme (z.B. Dropbear) auf der W701V laufen sollten. Also, faul wie ich bin, habe ich mir auf The-Construct schnell was zusammengeklickt.
Dabei fiel mir auf, daß außer dem Dropbear extra noch eine Busybox heruntergeladen wurde, und das nur, um uudecode nutzen und damit die privaten RSA/DSS-Schlüssel von Dropbear dekodieren zu können, welche in die debug.cfg UU-kodiert eingebettet waren. Das hat mich geärgert, und ich habe mir überlegt, wie man Binärdaten einbetten könnte, die mit den Bordmitteln der Busybox-Versionen von Standard-Firmwares entpackt werden könnten.
Mir ist eine Lösung eingefallen, welche letzten Endes darauf beruht, Zeilen wie
einzubetten, denn echo kann über oktal kodierte Escape-Sequenzen einzelne Zeichen bzw. Binärcodes darstellen.
Also schrieb ich mir ein Skript bin2oct, welches beliebige über Standardeingabe übergebene Daten in eben diese Form überführt und sie auf der Standardausgabe ausgibt. Hier ist der Einzeiler:
Man speichert ihn, macht ihn mit chmod +x bin2oct ausführbar und ruft ihn dann so auf:
Das Skript kann mit jedem Linux, einer Busybox (sogar auf der Fritz!Box selbst), einem Cygwin usw. aufgerufen werden, solange nur hexdump und sed vorhanden sind. Es wäre also ein Leichtes, für The-Construct-Pseudo-Images in solchen Fällen auf den Download einer großen Busybox ins RAM einer sowieso schon mit nachgeladenen Binaries belasteten Box zu verzichten. Man bezahlt lediglich mit einem deutlich höheren Platzverbrauch für auf diese Weise kodierte Binärdaten. Im Beispiel oben ist die UU-kodierte Version des DSS-Schlüssels ca. 45% größer als das Original, die "echo-kodierte" Version hingegen 476% größer oder fast 6x so groß wie das Original bzw. 4x so groß die die UU-Version. Für kleine Dateien geht das aber, solange in der debug.cfg noch genügend Platz ist.
Etwas kleiner geht es übrigens auch noch, wenn man das Skript so modifiziert, daß es nur ein einziges, langes echo-Statement erzeugt:
Die damit erzeugte Ausgabe des DSS-Schlüssels wäre "nur" 2296 Bytes groß anstatt 2634, also 5x Original- und 3,5x UU-Größe - immerhin. Man könnte das selbstverständlih so optimieren, daß man eine Art Quoted-Printable-Version erzeugen lassen könnte, also eine Version, in der normal druckbare Zeichen nicht durch Oktal-Codes ersetzt werden, nur Sonderzeichen. Dazu habe ich aber gerade keine Lust.
Dem Betreiber von The-Construct werde ich mal per E-Mail Bescheid geben, vielleicht verwendet er das ja wahlweise. Es könnte Besitzern von RAM-mäßig begrenzten Boxen oder solchen, die viele Binaries herunterladen, helfen, solange sie keine Busybox für andere Zwecke als UU-Dekodierung brauchen.
Dabei fiel mir auf, daß außer dem Dropbear extra noch eine Busybox heruntergeladen wurde, und das nur, um uudecode nutzen und damit die privaten RSA/DSS-Schlüssel von Dropbear dekodieren zu können, welche in die debug.cfg UU-kodiert eingebettet waren. Das hat mich geärgert, und ich habe mir überlegt, wie man Binärdaten einbetten könnte, die mit den Bordmitteln der Busybox-Versionen von Standard-Firmwares entpackt werden könnten.
Mir ist eine Lösung eingefallen, welche letzten Endes darauf beruht, Zeilen wie
Code:
echo -en "\0101\0154\0145\0170\0141\0156\0144\0145\0162\0040\0113\0162\0151\0145\0147\0151"
echo -en "\0163\0143\0150\0012"
[COLOR="DimGray"]Alexander Kriegisch[/COLOR]
Also schrieb ich mir ein Skript bin2oct, welches beliebige über Standardeingabe übergebene Daten in eben diese Form überführt und sie auf der Standardausgabe ausgibt. Hier ist der Einzeiler:
Code:
[COLOR="SeaGreen"]#! /bin/sh
# Convert input stream into octal hexdump with 'echo' statements
# which re-convert it back to binary form when executed[/COLOR]
cat | hexdump -bv | sed -r 's/ +$//;s/ /\\0/g;s/^......./echo -en "/;s/$/"/;s/.*""$//;'
Man speichert ihn, macht ihn mit chmod +x bin2oct ausführbar und ruft ihn dann so auf:
Code:
[COLOR="SeaGreen"]# Ausgabe eines kodierten Textes auf der Konsole[/COLOR]
echo "Mein Text" | bin2oct
[COLOR="SeaGreen"]# Umwandeln einer Binärdatei in echo-Kommandos[/COLOR]
cat dss_host_key | bin2oct > dss_host_key.sh
[COLOR="SeaGreen"]
# So würde das Ganze mit uuencode gehen[/COLOR]
uuencode dss_host_key dss_host_key > dss_host_key.uue
[COLOR="SeaGreen"]# Zurückumwandeln in Binärdatei durch Ausführen der Datei[/COLOR]
. ./dss_host_key.sh > dss_host_key_new
[COLOR="SeaGreen"]# Sind die Dateien gleich groß?[/COLOR]
ls -l dss*
[COLOR="DimGray"]-rw-r--r-- 1 root root [COLOR="Blue"]457[/COLOR] Jun 22 10:37 dss_host_key
-rw-r--r-- 1 root root 2634 Jun 22 19:55 dss_host_key.sh
-rw-r--r-- 1 root root 663 Jun 22 19:58 dss_host_key.uue
-rw-r--r-- 1 root root [COLOR="Blue"]457[/COLOR] Jun 22 19:56 dss_host_key_new
[/COLOR]
Das Skript kann mit jedem Linux, einer Busybox (sogar auf der Fritz!Box selbst), einem Cygwin usw. aufgerufen werden, solange nur hexdump und sed vorhanden sind. Es wäre also ein Leichtes, für The-Construct-Pseudo-Images in solchen Fällen auf den Download einer großen Busybox ins RAM einer sowieso schon mit nachgeladenen Binaries belasteten Box zu verzichten. Man bezahlt lediglich mit einem deutlich höheren Platzverbrauch für auf diese Weise kodierte Binärdaten. Im Beispiel oben ist die UU-kodierte Version des DSS-Schlüssels ca. 45% größer als das Original, die "echo-kodierte" Version hingegen 476% größer oder fast 6x so groß wie das Original bzw. 4x so groß die die UU-Version. Für kleine Dateien geht das aber, solange in der debug.cfg noch genügend Platz ist.
Etwas kleiner geht es übrigens auch noch, wenn man das Skript so modifiziert, daß es nur ein einziges, langes echo-Statement erzeugt:
Code:
cat |
hexdump -bv |
sed -r 's/ +$//;s/ /\\0/g;s/^......./echo -en "/;s/$/"/;s/.*""$//;' |
tr "\n" "#" |
sed -r 's/"#echo -en "//g;s/#//g'
Die damit erzeugte Ausgabe des DSS-Schlüssels wäre "nur" 2296 Bytes groß anstatt 2634, also 5x Original- und 3,5x UU-Größe - immerhin. Man könnte das selbstverständlih so optimieren, daß man eine Art Quoted-Printable-Version erzeugen lassen könnte, also eine Version, in der normal druckbare Zeichen nicht durch Oktal-Codes ersetzt werden, nur Sonderzeichen. Dazu habe ich aber gerade keine Lust.
Dem Betreiber von The-Construct werde ich mal per E-Mail Bescheid geben, vielleicht verwendet er das ja wahlweise. Es könnte Besitzern von RAM-mäßig begrenzten Boxen oder solchen, die viele Binaries herunterladen, helfen, solange sie keine Busybox für andere Zwecke als UU-Dekodierung brauchen.