Firmware Mod Kit

Extrait et reconstruit des images de firmware pour appareils embarqués et IoT, en décompactant des systèmes de fichiers comme SquashFS/JFFS2 pour analyse et en repackageant après modification. Extracts and rebuilds firmware images for embedded and IoT devices, unpacking filesystems like SquashFS/JFFS2 for analysis and repackaging after modification.

↗ https://github.com/rampageX/firmware-mod-kit

Overview

Firmware Mod Kit (FMK) is a toolset for extracting, modifying, and rebuilding firmware images pulled from routers, IoT devices, and other embedded systems. It identifies the firmware’s bootloader/header, unpacks the embedded filesystem (SquashFS, JFFS2, CramFS, etc.), lets you edit files (binaries, configs, init scripts), and repacks everything back into a flashable image — commonly used alongside binwalk for firmware security research.

Common Usage

Extract a firmware image (auto-detects header/filesystem type)

./extract-firmware.sh firmware.bin

Result lands in _extracted/ with rootfs/ and other partitions

ls firmware_extracted/rootfs

Modify files inside the extracted rootfs

nano firmware_extracted/rootfs/etc/passwd

Rebuild the firmware image after modification

./build-firmware.sh firmware_extracted

Use binwalk first to identify offsets/filesystem types before extraction

binwalk -e firmware.bin

Notes

  • Often used in tandem with binwalk for initial identification and carving, and with unsquashfs/mksquashfs directly when FMK’s automation doesn’t fit an unusual image
  • Rebuild step must reproduce the original filesystem type, header, and checksums exactly, or the target device will refuse to flash the modified image
  • Common security research use cases: backdooring a firmware image for a physical-access engagement, extracting hardcoded credentials/keys, or auditing init scripts and binaries for vulnerabilities
Help / Man page
extract-firmware.sh <firmware_image> [output_dir]

  Identifies firmware header/bootloader, extracts embedded filesystem
  (SquashFS, JFFS2, CramFS, etc.) into <output_dir>/rootfs and any
  additional partitions found.

build-firmware.sh <extracted_dir> [output_image]

  Repacks a previously extracted (and optionally modified) firmware
  directory back into a flashable image, reconstructing the original
  header/filesystem format.

Bundled utilities:
  unsquashfs / mksquashfs   extract/build SquashFS filesystems
  jffs2extract / mkfs.jffs2 extract/build JFFS2 filesystems

Vue d’ensemble

Firmware Mod Kit (FMK) est un ensemble d’outils pour extraire, modifier et reconstruire des images de firmware issues de routeurs, d’appareils IoT et d’autres systèmes embarqués. Il identifie le bootloader/header du firmware, décompacte le système de fichiers embarqué (SquashFS, JFFS2, CramFS, etc.), permet d’éditer les fichiers (binaires, configs, scripts d’init), et repackage le tout en une image flashable : couramment utilisé aux côtés de binwalk pour la recherche en sécurité firmware.

Utilisation courante

# Extraire une image de firmware (détecte automatiquement le header/type de système de fichiers)
./extract-firmware.sh firmware.bin

# Le résultat atterrit dans <firmware>_extracted/ avec rootfs/ et d'autres partitions
ls firmware_extracted/rootfs

# Modifier des fichiers dans le rootfs extrait
nano firmware_extracted/rootfs/etc/passwd

# Reconstruire l'image de firmware après modification
./build-firmware.sh firmware_extracted

# Utiliser binwalk d'abord pour identifier les offsets/types de systèmes de fichiers avant extraction
binwalk -e firmware.bin

Notes

  • Souvent utilisé en tandem avec binwalk pour l’identification et l’extraction initiales, et avec unsquashfs/mksquashfs directement quand l’automatisation de FMK ne convient pas à une image inhabituelle
  • L’étape de reconstruction doit reproduire exactement le type de système de fichiers, le header et les checksums d’origine, sinon l’appareil cible refusera de flasher l’image modifiée
  • Cas d’usage courants en recherche de sécurité : implanter une backdoor dans une image de firmware pour un engagement avec accès physique, extraire des identifiants/clés codés en dur, ou auditer les scripts d’init et binaires à la recherche de vulnérabilités
Aide / Page de manuel
extract-firmware.sh <firmware_image> [output_dir]

  Identifies firmware header/bootloader, extracts embedded filesystem
  (SquashFS, JFFS2, CramFS, etc.) into <output_dir>/rootfs and any
  additional partitions found.

build-firmware.sh <extracted_dir> [output_image]

  Repacks a previously extracted (and optionally modified) firmware
  directory back into a flashable image, reconstructing the original
  header/filesystem format.

Bundled utilities:
  unsquashfs / mksquashfs   extract/build SquashFS filesystems
  jffs2extract / mkfs.jffs2 extract/build JFFS2 filesystems