Lemmi
29.12.2004, 11:07:25
Aktuelle Infos befinden sich im M740.de Wiki (m740.de/wiki/) unter »cramfs (http://www.m740.de/wiki/index.php/cramfs)«
-----------------------------------------------
Vorwort: Die Geheimnisse von cramfs/M740AV sind gelüftet :)
------------------------------------
In der Software der Box (M740AV) spielt das cramsfs (Compressed ROMFS) eine Rolle. Ein solches Dateisystem wird als '/' von '/dev/mtdblock1' gemounted und enthält daher das Linux-Basis-System. Es ist außerdem Bestandteil der bisherigen beiden Updates der Firmware 1.12.1 und 1.18.
Zum Freischalten von telnet in FW 1.18 muß genau dieses Dateisystem modifiziert werden.
cramfs ist Open-Source und steht unter der GPL-Lizenz. Die Quellen sind gibt's bei SourceForge (http://sourceforge.net/project/showfiles.php?group_id=18351). Nach dem compilieren erhält man zwei Programme: cramfsck und mkcramfs. Ersteres ist zum Überprüfen und zum Entpacken eines Archives, letzteres zum Erstellen eines cramfs-Archives. Die Version kann allerdings nur Dateisysteme mit dem Endian des Hostes arbeiten. Damit kann man unter Linux/PC (little endian) nicht die cramfs-Archive der M740AV (mips basiert, big endian) bearbeiten.
Ein kleine Lösung hierfür bietet Siemens, die die GPL Sourcen als Quelle (http://now-portal.c-lab.de/project/showfiles.php?group_id=13&release_id=32) zur Verfügung stellen. In dem 130 MB Paket befindet sich auch ein modifiziertes mkcramfs. mkcramfs kann nun über die Option '-b' gesteuert cramfs-Archive in big oder little Endian erzeugen.
------------------------------------
Damit haben wir nun die folgenden Möglichkeiten:
Ein existierendes cramfs-Archiv kann auf der Box mittels
mount -t cramfs -o loop file.cramfs /mnt2 gemountet werden. Anschließend erhält man unter /mnt2 Einsicht in die Dateien und kann sie zur Weiterverarbeitung kopieren, z.B. mit
( cd mnt2; tar -cf /var/media/PC1/cramfs.tar . )
Ein modifiziertes Dateisystem kann mit dem Kommando
./mkcramfs -bb quell_verzeichnis ausgabedatei.cramfs (mkcramfs aus den Siemens-Quellen) wieder zu einem cramfs-Archiv zusammengesetzt werden.
------------------------------------
Die Firmware (zumindest gilt folgendes für 1.12.1 und 1.18, weitere FW sind mit bisher unbekannt) wird in einem WSW-Archiv ausgeliefert. gambler hat schon eine erste Analyse der Updates (http://www.m740.de/forum/showthread.php?t=10) durchgeführt. In einem Update beginnt ab Position 1416 (==0x588) das cramfs. Ein cramfs beginnt immer mit der Magic-Sequenz 0x28cd3d45 gefolgt von einer 4-Byte Folge, die die Gesamtlänge beschreibt. Beide Angaben (Magic und Länge) erfolgen schon im passenden Endian. Es folgt ein Auszug aus cramfs_fs.h:
/*
* Superblock information at the beginning of the FS.
*/
struct cramfs_super {
u32 magic; /* 0x28cd3d45 - random number */
u32 size; /* length in bytes */
u32 flags; /* feature flags */
u32 future; /* reserved for future use */
u8 signature[16]; /* "Compressed ROMFS" */
struct cramfs_info fsid; /* unique filesystem info */
u8 name[16]; /* user-defined name */
struct cramfs_inode root; /* root inode data */
};
Es ist also ohne weitere Probleme möglich, das cramfs aus den Update herauszuziehen, es zu modifizieren und anschließend wieder einzubauen.
Leider akzeptiert die Box ein so modifiziertes Update nicht, da es anscheinend RSA signiert ist. (http://www.m740.de/forum/showthread.php?p=1184#post1184) Diese Signatur steht im Moment zwischen mir und meinem persöhnlichen Patch von FW 1.18 :(
Das modifizierte cramfs-Archiv direkt nach /dev/mtdblock1 zu kopieren funktioniert leider nicht und bringt die Box zum Totalabsturz: Die Box muss dann durch mehrmaliges Strom-ein-aus zurückgesetzt werden. Vieleicht muß man auch Füllbytes mit reinschreiben. Wahrscheinlicher ist aber, dass man den Flash-Ram vor dem Beschreiben löschen muß. Den beim Auslesen aus /dev/mtdblock1 befinden sich am Ende noch 548.865 Bytes mit Wert 0xff. Damit ist der Block dann insgesamt 0x600000 Bytes lang.
P.S.: Trotz all diese Wiedrigkeiten haben wir es geschafft telnet freizugeben. Siehe hier. (http://www.m740.de/forum/showthread.php?p=1571#post1571)
------------------------------------
Viel Spaß beim weiterforschen, Lemmi
-----------------------------------------------
Vorwort: Die Geheimnisse von cramfs/M740AV sind gelüftet :)
------------------------------------
In der Software der Box (M740AV) spielt das cramsfs (Compressed ROMFS) eine Rolle. Ein solches Dateisystem wird als '/' von '/dev/mtdblock1' gemounted und enthält daher das Linux-Basis-System. Es ist außerdem Bestandteil der bisherigen beiden Updates der Firmware 1.12.1 und 1.18.
Zum Freischalten von telnet in FW 1.18 muß genau dieses Dateisystem modifiziert werden.
cramfs ist Open-Source und steht unter der GPL-Lizenz. Die Quellen sind gibt's bei SourceForge (http://sourceforge.net/project/showfiles.php?group_id=18351). Nach dem compilieren erhält man zwei Programme: cramfsck und mkcramfs. Ersteres ist zum Überprüfen und zum Entpacken eines Archives, letzteres zum Erstellen eines cramfs-Archives. Die Version kann allerdings nur Dateisysteme mit dem Endian des Hostes arbeiten. Damit kann man unter Linux/PC (little endian) nicht die cramfs-Archive der M740AV (mips basiert, big endian) bearbeiten.
Ein kleine Lösung hierfür bietet Siemens, die die GPL Sourcen als Quelle (http://now-portal.c-lab.de/project/showfiles.php?group_id=13&release_id=32) zur Verfügung stellen. In dem 130 MB Paket befindet sich auch ein modifiziertes mkcramfs. mkcramfs kann nun über die Option '-b' gesteuert cramfs-Archive in big oder little Endian erzeugen.
------------------------------------
Damit haben wir nun die folgenden Möglichkeiten:
Ein existierendes cramfs-Archiv kann auf der Box mittels
mount -t cramfs -o loop file.cramfs /mnt2 gemountet werden. Anschließend erhält man unter /mnt2 Einsicht in die Dateien und kann sie zur Weiterverarbeitung kopieren, z.B. mit
( cd mnt2; tar -cf /var/media/PC1/cramfs.tar . )
Ein modifiziertes Dateisystem kann mit dem Kommando
./mkcramfs -bb quell_verzeichnis ausgabedatei.cramfs (mkcramfs aus den Siemens-Quellen) wieder zu einem cramfs-Archiv zusammengesetzt werden.
------------------------------------
Die Firmware (zumindest gilt folgendes für 1.12.1 und 1.18, weitere FW sind mit bisher unbekannt) wird in einem WSW-Archiv ausgeliefert. gambler hat schon eine erste Analyse der Updates (http://www.m740.de/forum/showthread.php?t=10) durchgeführt. In einem Update beginnt ab Position 1416 (==0x588) das cramfs. Ein cramfs beginnt immer mit der Magic-Sequenz 0x28cd3d45 gefolgt von einer 4-Byte Folge, die die Gesamtlänge beschreibt. Beide Angaben (Magic und Länge) erfolgen schon im passenden Endian. Es folgt ein Auszug aus cramfs_fs.h:
/*
* Superblock information at the beginning of the FS.
*/
struct cramfs_super {
u32 magic; /* 0x28cd3d45 - random number */
u32 size; /* length in bytes */
u32 flags; /* feature flags */
u32 future; /* reserved for future use */
u8 signature[16]; /* "Compressed ROMFS" */
struct cramfs_info fsid; /* unique filesystem info */
u8 name[16]; /* user-defined name */
struct cramfs_inode root; /* root inode data */
};
Es ist also ohne weitere Probleme möglich, das cramfs aus den Update herauszuziehen, es zu modifizieren und anschließend wieder einzubauen.
Leider akzeptiert die Box ein so modifiziertes Update nicht, da es anscheinend RSA signiert ist. (http://www.m740.de/forum/showthread.php?p=1184#post1184) Diese Signatur steht im Moment zwischen mir und meinem persöhnlichen Patch von FW 1.18 :(
Das modifizierte cramfs-Archiv direkt nach /dev/mtdblock1 zu kopieren funktioniert leider nicht und bringt die Box zum Totalabsturz: Die Box muss dann durch mehrmaliges Strom-ein-aus zurückgesetzt werden. Vieleicht muß man auch Füllbytes mit reinschreiben. Wahrscheinlicher ist aber, dass man den Flash-Ram vor dem Beschreiben löschen muß. Den beim Auslesen aus /dev/mtdblock1 befinden sich am Ende noch 548.865 Bytes mit Wert 0xff. Damit ist der Block dann insgesamt 0x600000 Bytes lang.
P.S.: Trotz all diese Wiedrigkeiten haben wir es geschafft telnet freizugeben. Siehe hier. (http://www.m740.de/forum/showthread.php?p=1571#post1571)
------------------------------------
Viel Spaß beim weiterforschen, Lemmi