安全软件
点击放大

IoT firmware identification and extraction
moria identifies files and the structures embedded inside firmware and IoT images (filesystems, kernels, bootloaders, archives, keys) and unpacks most of what it finds, without root. It reports each finding with a byte offset, a type, and a confidence score, and it speaks clean JSON so scripts and LLM agents can drive it as easily as people can.
upx -d.openat + O_NOFOLLOW (no path-tra or symlink escape), and decompression is bounded against bombs.-j) for tools, with offsets and confidence on every finding.Build needs cmake, a C++20 compiler, and the zlib, liblzma, lz4, and zstd de libraries (the decompressors used by --extract). On Debian/Ubuntu: sudo apt install cmake g++ zlib1g-de liblz4-de. To build without one (a minimal or identify-only build), configure with -DMORIA_OPTIONAL_CODECS=ON and the missing codec is simply disabled.
The moria binary is self-contained: all signature sets are embedded at build time, so the binary works anywhere with nothing installed alongside it (cp build/moria ~/.local/bin is enough, and a downloaded release binary just runs). To use external signatures instead of the embedded ones (to test a new .toml without rebuilding, say), pass --sigs DIR or set $MORIA_SIGDIR.
Output is human-readable by default. Pass -j for JSON.
-e unpacks recognized formats under <file>.extracted/, one directory per region (0x<offset>-<type>/), plus a manifest.json mapping offsets to paths. It recurses into nested containers automatically and rebuilds UBI images by . Guards (--depth, --max-files, --max-bytes, and a decompression-ratio cap) bound hostile input; a tripped guard stops that branch and still returns e recovered.
Unpacked in-process, no external tools and no sudo:
.msi, ISO 9660, Android sparse, Android boot.hv)signatures/ is the hand-written core: firmware filesystems, containers, kernels, and common formats, each with structural .signatures-firmware/ holds firmware-container magics and loads by default.signatures-generated/ holds ~2.5k general file-type magics derived from file(1)'s magic database and loads only with --broad.To add a format, drop a .toml in signatures/. A small C++ is only needed for checks the declarati can't express, such as CRCs or cross-block pointers.
moria does structural identification, extraction, and carving. Secret/credential scanning, SBOM, CVE, and license analysis are a separate tool (mithril).
MIT, see LICENSE.
Some on-disk format handling is a clean reimplementation of the algorithms in
other open-source projects, written independently against moria's own I/O layer
(no source copied): the UCL/NRV2B decompressor and CTO unfilters from UPX/UCL
(GPL-2.0, algorithms only), and the metadata-commit and CTZ skip-list layout of
littlefs (BSD-3-Clause), and the
page/object layout of SPIFFS (MIT).
开发语言:C++
Star 数:388
该项目属于安全软件方向的开源资源,代码结构清晰,适合安全研究人员学习参考。项目围绕IoT firmware identification and extraction展开,提供了可运行的实现,对理解相关安全机制、工具原理与攻防技术具有较高的研究价值。
从技术实现角度看,此类项目的核心在于对底层原理的深入理解与工程化落地。开发者在研究过程中可以结合官方文档与社区讨论,梳理项目的初始化流程、核心模块职责与数据流转,逐步掌握其中的技术细节与设计思路。
1. 下载源码压缩包,解压到本地环境。
2. 根据项目类型准备对应的运行环境与依赖。
3. 按照 README 中的步骤完成配置与部署。
4. 在隔离的测试环境中运行验证,避免影响生产系统。
本资源来源于开源社区,仅供安全研究、技术学习与合法授权范围内的攻防演练使用,请勿用于任何非法或侵害他人权益的用途。使用本项目产生的一切后果由使用者自行承担。
| 资源标题 | moria - IoT firmware identification and extraction |
| 所属分类 | 安全软件 |
| 发布作者 | admin |
| 发布时间 | 2026-10-05 22:37:10 |
| 下载权限 | 免费下载 |
| 附件数量 | 2 个下载链接 |
| 浏览次数 | 265 |
| 讨论数量 | 0 |
| 主题状态 | 正常讨论中 |