Vor kurzem musste ich ein altes LEDE bin Image entpacken. Da es sich zum Großteil um ein Squashfs komprimiertes Dateisystem handelt kann es einfach gemountet werden, jedoch enthalten die Bin Dateien noch weitere Datenfelder. Das ist zum Beispiel ein Bootloader oder ein proprietärer Datenblob. Diese Teile müssen vorher abgetrennt werden.

Als erstes kann mit binwalk der Inhalt eines Images aufgelistet werden.

$ binwalk lede-ar71xx-generic.bin

DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
512     0x200       LZMA compressed data, properties: 0x6D, dictionary size: 8388608 bytes, uncompressed size: 4284740 bytes
1321680 0x142AD0    Squashfs filesystem, little endian, version 4.0, compression:xz, size: 6400476 bytes, 2185 inodes, blocksize: 262144 bytes, created: 2017-04-11 14:36:24

Am Anfang sind komprimierte Daten enthalten und danach kommt das Squashfs Dateisystem. Um den Anfang abzutrennen kann dd verwendend werden.  Alle dazu benötigten Parameter zeigt binwalk gleich mit an.

$ dd if=lede-ar71xx-generic.bin bs=1 skip=1321680 count=6400476 of=lede-ar71xx-generic.squashfs

Das Offset von Squashfs wird bei skip eingetragen, wodurch alles davor übersprungen wird. Der count bei dd gibt die Länge bzw. Größe an und zwar in Bytes, dass binwalk auch in der Beschreibung vom Squashfs anzeigt.

Danach kann die erzeugte .squashfs Datei gemountet oder mit unsquashfs entpackt werden.

$ sudo mount -t squashfs -o loop lede-ar71xx-generic-tl-wr1043nd-v2.squashfs /mnt

$ unsquashfs lede-ar71xx-generic-tl-wr1043nd-v2.squashfs

 

Squashfs aus LEDE und OpenWRT Images extrahieren