Firmware uitpakken (bestanden)

data analyse

Firmware

Firmware is de software dat geïnstalleerd is op een embedded device (bijvoorbeeld router/switch), meestal is dit een “mini” Linux omgeving met beperkte functies, een firmware “image” is een IMG/BIN bestand met dus de software in één bestand geperst, dit samen met de Linux bootloader (en eventuele andere fratsen) en een SquashFS bestandssysteem

Ik pak hier als voorbeeld de firmware van de Plugwise Stretch 2.0, we willen bijvoorbeeld weten hoe de ZigBee stick aangestuurd word (gaan we hier niet behandelen, het is maar om een idee te geven)

Wat heb je nodig?

1) Binwalk
2) DD (voor windows)
3) SquashFS Tools

Aan de slag

1) We plaatsen het bestand “image-1.0.41.bin” op het Linux systeem.

2) We gebruiken Binwalk om te onderzoeken hoe de “firmware image” eruitziet, Binwalk doorzoekt het bestand naar headers en geeft weer welke type data zich waar in het bestand vind.

Het Linux commando is dan als volgt:  binwalk image-1.0.41.bin

wat zien we hier?
a) We zien dat in het “image” bestand de SquashFS partitie zich bevind vanaf 1048576 bytes (1e kolom)
b) We zien hoe groot de SquashFS partitie is, namelijk 5315382 bytes

3), DD, gebruik het DD commando om bepaalde gegevens uit een bestand te kopiëren.

Het commando om de SquashFS partitie uit het “image” bestand te halen is dan:

dd if=image-1.0.41.bin bs=1 skip=1048576 count=5315382 of=stretch_1_0_41.squashfs

Wat betekend dit? (je kan alle functies hier zien)
if= IN file (het input bestand)
skip= n bytes (sla deze hoeveelheid bytes over, hiermee zet je het startpunt voor het kopieren)
count= n bytes (kopieer deze hoeveelheid bytes vanaf het startpunt dat we hebben opgegeven)
of= OUT file (de gekopieerde data wordt opgeslagen in dit bestand)

We hebben nu dus een stretch_1_0_41.squashfs bestand, dat het bestandssysteem is.

4) Gebruik UnsquashFS om het bestand uit te pakken, het commando is vrij eenvoudig:  unsquashfs stretch_1_0_41.squashfs

Er is nu een folder aangemaakt, genaamd “squashfs-root” met daarin alle bestanden:

squashfs decomprimeren