Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
moria — Identification et extraction de firmware IoT | Kitploit
Outils/GitHubGitHub/nmatt0/moria
Sécurité des Systèmes EmbarquésSécurité IoTRétro-ingénierieCollecte d'InformationsAnalyse de MalwareCriminalistique NumériqueUtilitaires et FrameworksSécurité Matériel et IoTAnalyse de BinairesAnalyse de Micrologiciel
GitHub
42256142il y a 1 jourVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
nmatt0/moria

moria

Identification et extraction de firmware IoT

Voir le dépôt

moria

Identification et extraction de firmware IoT

moria identifie les fichiers et les structures intégrés dans les firmwares et les images IoT (systèmes de fichiers, noyaux, bootloaders, archives, clés) et décompresse la plupart de ce qu'il trouve, sans root. Il signale chaque découverte avec un décalage en octets, un type et un score de confiance, et il produit du JSON propre afin que les scripts et les agents LLM puissent le piloter aussi facilement que des humains.

Pourquoi moria

  • Extrait un large éventail de systèmes de fichiers en cours de processus, sans sudo : SquashFS, ext2/3/4, F2FS, XFS, btrfs, HFS+, NTFS, EROFS, JFFS2, UBIFS, et plus encore.
  • Récursif par défaut. Un SquashFS encapsulé dans gzip à l'intérieur d'un volume UBI est décompressé jusqu'au bout.
  • Signale les exécutables packés. Détecte les ELF/PE/Mach-O packés avec UPX sur toutes les architectures à partir du trailer PackHeader vérifié par somme de contrôle (format, méthode et tailles), et signale les stubs dont l'en-tête a été mis à zéro ou modifié pour contrer upx -d.
  • Déterministe. La même entrée produit toujours la même sortie ; la résolution des conflits n'a pas de départage aléatoire.
  • Sûr face à une entrée hostile. Chaque lecture est vérifiée en limites, chaque écriture passe par openat + O_NOFOLLOW (pas de traversée de chemin ni d'évasion par lien symbolique), et la décompression est bornée contre les bombes.
  • Identification d'abord. Une arborescence lisible par défaut, du JSON (-j) pour les outils, avec décalages et confiance sur chaque découverte.

Compilation et installation

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cmake --install build --prefix ~/.local     # or /usr/local (needs sudo)

La compilation nécessite cmake, un compilateur C++20, ainsi que les bibliothèques de développement zlib, liblzma, lz4 et zstd (les décompresseurs utilisés par --extract). Sous Debian/Ubuntu : sudo apt install cmake g++ zlib1g-dev liblzma-dev liblz4-dev libzstd-dev. Pour compiler sans l'une d'elles (une compilation minimale ou d'identification seule), configurez avec -DMORIA_OPTIONAL_CODECS=ON et le codec manquant est simplement désactivé.

Le binaire moria est autonome : tous les ensembles de signatures sont intégrés au moment de la compilation, de sorte que le binaire fonctionne partout sans rien d'installé à côté (cp build/moria ~/.local/bin suffit, et un binaire de release téléchargé s'exécute directement). Pour utiliser des signatures externes au lieu de celles intégrées (pour tester un nouveau .toml sans recompiler, par exemple), passez --sigs DIR ou définissez $MORIA_SIGDIR.

Utilisation

La sortie est lisible par un humain par défaut. Passez -j pour du JSON.

moria <file>               # identify: a findings tree with offsets, types, and confidence
moria <dir>                # scan a tree: a type summary plus the notable files
moria -j <file>            # JSON, for tools and agents
moria -e <file>            # extract to <file>.extracted/   (-C DIR to choose the output dir)
moria -c <file>            # carve raw byte ranges to <file>.carved/ (no parsing)
moria -E <file>            # entropy pass: flag unidentified / possibly-encrypted regions
moria --list <archive>     # list tar/cpio/zip/cab/CE-ROM members without extracting
moria --broad <path>       # also load the ~2.5k general file-type signatures
moria --unpack-executables # unpack executables inside other extracted output (cfbf/msi files)
moria --help

Extraction

-e décompresse les formats reconnus sous <file>.extracted/, un répertoire par région (0x<offset>-<type>/), plus un manifest.json associant les offsets aux chemins. Il descend récursivement dans les conteneurs imbriqués automatiquement et reconstruit les images UBI volume par volume. Des garde-fous (--depth, --max-files, --max-bytes, et un plafond de taux de décompression) encadrent les entrées hostiles ; un garde-fou déclenché arrête cette branche et renvoie tout de même tout ce qui a été récupéré.

Décompressé en cours de processus, sans outils externes ni sudo :

  • Systèmes de fichiers : SquashFS, ext2/3/4, F2FS, FAT12/16/32, exFAT, NTFS, HFS+/HFSX, XFS, btrfs, JFFS2, UBI/UBIFS, romfs, YAFFS2, cramfs, EROFS, ReiserFS
  • Archives et images : ZIP, tar, cpio, MS-CAB (stored/MSZIP/LZX), fichiers composés CFBF / Windows Installer .msi, ISO 9660, Android sparse, Android boot
  • Noyaux et wrappers : U-Boot uImage, U-Boot FIT, Windows CE XIP ROM (nk.bin / .cos), flux autonomes gzip / xz / zstd / lz4, Ingenic jzlzma (LZ77 matériel)
  • Paquets de firmware : RAE Systems / Honeywell RFP (table de sections ; décompresse chaque section en LZARI) ; Artosyn OTRA (AR8030 / VT4 / VR04 ; vérifié par SHA-256, décompresse chaque partition en LZO1X, ou expose le corps brut de la flash sur les images plates)
  • Stores de configuration : environnement U-Boot, ESP32 NVS, ruches de registre Windows CE (.hv)

Signatures

  • signatures/ est le cœur écrit à la main : systèmes de fichiers de firmware, conteneurs, noyaux et formats courants, chacun avec validation structurelle.
  • signatures-firmware/ contient les magics des conteneurs de firmware constructeurs et se charge par défaut.
  • signatures-generated/ contient ~2,5 k magics de types de fichiers généraux dérivés de la base de magics de file(1) et ne se charge qu'avec --broad.

Pour ajouter un format, déposez un .toml dans signatures/. Un petit validateur C++ n'est nécessaire que pour les vérifications que la couche déclarative ne peut pas exprimer, comme les CRC ou les pointeurs inter-blocs. La sémantique des champs (magic_offset, endianness du magic, signatures courtes, contraintes souples, le contrat du validateur) est documentée dans SIGAUTHORING.md.

Périmètre

moria effectue l'identification structurelle, l'extraction et le carving. L'analyse de secrets/identifiants, SBOM, CVE et licences relève d'un outil distinct (mithril).

Licence

MIT, voir LICENSE.

Une partie de la gestion des formats sur disque est une réimplémentation propre des algorithmes d'autres projets open source, écrite indépendamment contre la propre couche d'E/S de moria (aucun code source copié) : le décompresseur UCL/NRV2B et les unfilters CTO de UPX/UCL (GPL-2.0, algorithmes uniquement), et la disposition metadata-commit et CTZ skip-list de littlefs (BSD-3-Clause), et la disposition page/objet de SPIFFS (MIT).

Télécharger l’outil