Binwalk
Outil d'analyse et d'extraction de firmware. Parcourt les fichiers binaires à la recherche de systèmes de fichiers embarqués, de données compressées, de code exécutable et de signatures de fichiers connues. Firmware analysis and extraction tool. Scans binary files for embedded filesystems, compressed data, executable code, and known file signatures.
↗ https://github.com/ReFirmLabs/binwalkOverview
Binwalk analyzes binary files — primarily firmware images — to identify and extract embedded files, filesystems, and data. It uses a signature database to recognize compressed archives, filesystems (SquashFS, JFFS2, ext), certificates, kernel images, and more. Essential for IoT/embedded device analysis.
Basic Analysis
Scan and identify signatures
binwalk firmware.bin
Verbose scan
binwalk -v firmware.bin
Show magic signatures matched
binwalk -B firmware.bin
Entropy analysis (high entropy = compressed/encrypted)
binwalk -E firmware.bin
Plot entropy graph
binwalk -E -J firmware.bin # JSON output for plotting
Extraction
Auto-extract all identified components
binwalk -e firmware.bin
Extract to specific directory
binwalk -e -C /output/dir firmware.bin
Recursive extraction (extract embedded archives too)
binwalk -eM firmware.bin
Extract specific signature matches
binwalk --extract="zip:unzip %e" firmware.bin
Carve files at specific offset
dd if=firmware.bin bs=1 skip=OFFSET count=SIZE of=extracted.bin
Filesystem Analysis (after extraction)
After extraction, examine the _firmware.bin.extracted/ directory
ls _firmware.bin.extracted/
# Common findings:
# squashfs-root/ → root filesystem
# etc/passwd → user accounts
# etc/shadow → hashed passwords
# www/ → web interface files
# usr/sbin/ → binaries to reverse
# Find interesting files
find _firmware.bin.extracted/ -name "*.conf" -o -name "*.xml" -o -name "*.key"
find _firmware.bin.extracted/ -name "passwd" -o -name "shadow"
grep -r "password" _firmware.bin.extracted/ 2>/dev/null
Specific Filesystem Tools
# Mount SquashFS
sudo mount -o loop squashfs-root.squashfs /mnt/squash
# or
unsquashfs squashfs-root.squashfs
# JFFS2
modprobe jffs2; modprobe mtdram; modprobe mtdblock; modprobe mtdchar
dd if=jffs2.img of=/dev/mtd0
mount -t jffs2 /dev/mtdblock0 /mnt/jffs2
cramfs
sudo mount -o loop cramfs.img /mnt/cramfs
String Analysis
# Find strings in firmware (cleartext creds, keys, URLs)
strings firmware.bin | grep -i "passw\|secret\|key\|admin"
strings firmware.bin | grep -E "https?://"
strings firmware.bin | grep -E "[A-Za-z0-9+/]{40,}={0,2}" # base64
Tips
binwalk -eM(recursive) is the most thorough; it can take a while on complex firmware- High entropy regions (>0.9 on entropy plot) indicate encryption — these can’t be extracted
- After extraction, treat the
squashfs-root/like a real Linux filesystem - Look for hardcoded credentials, private keys, and API tokens in config files
Help / Man page
binwalk [options] file1 [file2 ...]
Signature Scan:
-B, --signature Scan for common signatures (default)
-R, --raw=str Scan for raw string sequence
-A, --opcodes Scan for CPU instructions
-m, --magic=file Custom magic file
Extraction:
-e, --extract Auto-extract known file types
-M, --matryoshka Recursive extraction
-C, --directory=dir Output directory
-j, --size=int Limit extracted file sizes
-n, --count=int Limit number of extracted files
-0, --run-as=str Run as specified user
Entropy:
-E, --entropy Calculate entropy
-F, --fast Use faster entropy calculation
-J, --save Save entropy graph as image
Formatting:
-v, --verbose Verbose output
-t, --term Fit output to terminal width
-q, --quiet Suppress output
-l, --length=int Bytes to scan
-o, --offset=int Starting offset
Vue d’ensemble
Binwalk analyse les fichiers binaires, principalement les images de firmware, pour identifier et extraire les fichiers, systèmes de fichiers et données embarqués. Il s’appuie sur une base de signatures pour reconnaître les archives compressées, les systèmes de fichiers (SquashFS, JFFS2, ext), les certificats, les images de kernel, et plus. Indispensable pour l’analyse d’appareils IoT/embarqués.
Analyse de base
# Parcourir et identifier les signatures
binwalk firmware.bin
# Scan verbeux
binwalk -v firmware.bin
# Afficher les signatures magic correspondantes
binwalk -B firmware.bin
# Analyse d'entropie (entropie élevée = compressé/chiffré)
binwalk -E firmware.bin
# Tracer le graphe d'entropie
binwalk -E -J firmware.bin # Sortie JSON pour le tracé
Extraction
# Extraire automatiquement tous les composants identifiés
binwalk -e firmware.bin
# Extraire vers un répertoire spécifique
binwalk -e -C /output/dir firmware.bin
# Extraction récursive (extrait aussi les archives embarquées)
binwalk -eM firmware.bin
# Extraire des correspondances de signature spécifiques
binwalk --extract="zip:unzip %e" firmware.bin
# Découper un fichier à un offset précis
dd if=firmware.bin bs=1 skip=OFFSET count=SIZE of=extracted.bin
Analyse du système de fichiers (après extraction)
# Après extraction, examiner le répertoire _firmware.bin.extracted/
ls _firmware.bin.extracted/
# Découvertes courantes :
# squashfs-root/ → système de fichiers racine
# etc/passwd → comptes utilisateurs
# etc/shadow → mots de passe hachés
# www/ → fichiers de l'interface web
# usr/sbin/ → binaires à reverser
# Trouver les fichiers intéressants
find _firmware.bin.extracted/ -name "*.conf" -o -name "*.xml" -o -name "*.key"
find _firmware.bin.extracted/ -name "passwd" -o -name "shadow"
grep -r "password" _firmware.bin.extracted/ 2>/dev/null
Outils spécifiques par système de fichiers
# Monter du SquashFS
sudo mount -o loop squashfs-root.squashfs /mnt/squash
# ou
unsquashfs squashfs-root.squashfs
# JFFS2
modprobe jffs2; modprobe mtdram; modprobe mtdblock; modprobe mtdchar
dd if=jffs2.img of=/dev/mtd0
mount -t jffs2 /dev/mtdblock0 /mnt/jffs2
# cramfs
sudo mount -o loop cramfs.img /mnt/cramfs
Analyse des chaînes
# Trouver des chaînes dans le firmware (identifiants en clair, clés, URLs)
strings firmware.bin | grep -i "passw\|secret\|key\|admin"
strings firmware.bin | grep -E "https?://"
strings firmware.bin | grep -E "[A-Za-z0-9+/]{40,}={0,2}" # base64
Conseils
binwalk -eM(récursif) est le plus exhaustif ; cela peut prendre un moment sur un firmware complexe- Les régions à haute entropie (>0,9 sur le graphe d’entropie) indiquent du chiffrement : elles ne peuvent pas être extraites
- Après extraction, traitez le
squashfs-root/comme un vrai système de fichiers Linux - Cherchez des identifiants en dur, des clés privées et des tokens d’API dans les fichiers de configuration
Aide / Page de manuel
binwalk [options] file1 [file2 ...]
Signature Scan:
-B, --signature Scan for common signatures (default)
-R, --raw=str Scan for raw string sequence
-A, --opcodes Scan for CPU instructions
-m, --magic=file Custom magic file
Extraction:
-e, --extract Auto-extract known file types
-M, --matryoshka Recursive extraction
-C, --directory=dir Output directory
-j, --size=int Limit extracted file sizes
-n, --count=int Limit number of extracted files
-0, --run-as=str Run as specified user
Entropy:
-E, --entropy Calculate entropy
-F, --fast Use faster entropy calculation
-J, --save Save entropy graph as image
Formatting:
-v, --verbose Verbose output
-t, --term Fit output to terminal width
-q, --quiet Suppress output
-l, --length=int Bytes to scan
-o, --offset=int Starting offset