← retour aux outils back to tools

# 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