---
title: binwalk
description: "Analyser un firmware, détecter les signatures et extraire les systèmes de fichiers embarqués."
category: reverse
kind: tool
tags: [firmware, extraction, embedded, signatures]
level: basic
updated: 2026-10-30
order: 4
aliases: ["firmware analysis", "binwalk -e"]
---

## Analyser

```bash
# Signatures et offsets
binwalk firmware.bin

# Entropie (zones compressées/chiffrées)
binwalk -E firmware.bin

# Signature + entropie + opcodes
binwalk -A firmware.bin

# Rechercher une signature précise
binwalk -R "\x50\x4b\x03\x04" firmware.bin
```

```bash
# Extraire automatiquement
binwalk -e firmware.bin

# Extraction récursive (attention à la taille)
binwalk -Me firmware.bin

# Extraire uniquement certains types
binwalk -e --include='squashfs' firmware.bin
```

| Option | Effet |
| --- | --- |
| `-e` | Extraction automatique |
| `-M` | Extraction récursive (matryoshka) |
| `-E` | Entropie |
| `-A` | Opcodes |
| `-R` | Recherche d'une signature |
| `-D` | Extraction avec type spécifié |

## Identifier et monter

```bash
file firmware.bin
strings -n 8 firmware.bin | head -50

# Systèmes de fichiers extraits
file _firmware.bin.extracted/*
unsquashfs _firmware.bin.extracted/squashfs-root.squashfs
jefferson _firmware.bin.extracted/jffs2-root.jffs2 -d out/
```

```bash
# Monter une image ext4
sudo mount -o loop,ro rootfs.ext4 /mnt/fw
sudo mount -t squashfs -o loop squashfs-root.squashfs /mnt/fw
```

## Workflow firmware

```bash
# 1. Hashes et type
sha256sum firmware.bin
file firmware.bin

# 2. Entropie et signatures
binwalk -E firmware.bin
binwalk firmware.bin

# 3. Extraction
binwalk -Me firmware.bin

# 4. Recherche de secrets et binaires intéressants
grep -rInE "password|secret|api[_-]?key|BEGIN (RSA|OPENSSH)" _firmware.bin.extracted/ 2>/dev/null
find _firmware.bin.extracted -type f -name "*.so" -o -name "*.cgi" | head

# 5. Analyse des services exposés
cat _firmware.bin.extracted/etc/init.d/*
```

> [!TIP]
> Si l'extraction automatique échoue, repère les offsets avec `binwalk`, puis découpe manuellement : `dd if=firmware.bin bs=1 skip=OFFSET count=SIZE of=part.bin`. Vérifie ensuite avec `file`.

> [!WARNING]
> Un firmware peut contenir des binaires malveillants ou des clés privées. Travaille dans une VM, ne monte pas les images en écriture et ne flashe jamais un firmware modifié sans validation.
