pip 安装后还需单独安装大量外部解包工具,否则对应格式无法提取;SquashFS 需额外安装 sasquatch;从源码构建需 Python ≥ 3.10、uv 和 Rust 工具链;Docker 挂载目录须与容器 uid:gid 一致,多用户系统需加 -u $UID:$GID。
unblob
onekey-secMIT活跃维护自动识别并解包各种容器和压缩格式,无需手动判断格式,适合固件分析、取证和批量解压场景。
Extract files from any kind of container formats
pip install unblob
sudo apt install android-sdk-libsparse-utils e2fsprogs p7zip-full unar zlib1g-dev liblzo2-dev lzop lziprecover libhyperscan-dev zstd lz4
unblob --show-external-dependenciesREADME 未说明显存或 GPU 要求;默认使用全部 CPU 核心并行处理,无需提权即可运行。
递归解包固件等未知二进制 blob 的提取套件,支持 78+ 格式并切出未知数据块
自动识别并解包各种容器和压缩格式,无需手动判断格式,适合固件分析、取证和批量解压场景。
核心能力
- 支持 78+ 归档、压缩与文件系统格式
- 按格式标准精确识别每个 chunk 的起止偏移
- 递归提取容器内嵌容器,默认深度 10 层
- 切出未知格式数据块并识别空/0xFF 填充
- 计算未知块香农熵与卡方概率辅助判断加密数据
容易踩的坑
- 26.6.4最新正式版2026-06-04 · 2026-06-04 08:52 UTC
What's Changed
- fix(Handler) : Zero division error and false positive UFS handler by @Corv0O in https://github.com/onekey-sec/unblob/pull/1464
- fix(handlers): make UnblobTarInfo work with python 3.13.13+ by @qkaiser in https://github.com/onekey-sec/unblob/pull/1479
- feat(handler): add support for minix filesystems by @jstucke in https://github.com/onekey-sec/unblob/pull/1359
- feat(handler) : add format handler for BTRFS stream by @Corv0O in https://github.com/onekey-sec/unblob/pull/1451
- feat(handler): add extraction for UFS1, UFS2 & Solaris UFS1 by @Corv0O in https://github.com/onekey-sec/unblob/pull/1480
- feat(handler): add support for Moxa FRM archives by @jstucke in https://github.com/onekey-sec/unblob/pull/1495
- fix(erofs): allow build_time_nsec to be zero + end_offset calculation fix by @elektrischermoench in https://github.com/onekey-sec/unblob/pull/1504
- feat(handler): add Tesla Wall Connector SBFH handler by @Corv0O in https://github.com/onekey-sec/unblob/pull/1503
- feat(handler) add Airoha firmware handler by @Corv0O in https://github.com/onekey-sec/unblob/pull/1507
- (handlers): handle output paths containing quotes in extfs by @Gares95 in https://github.com/onekey-sec/unblob/pull/1519
- fix(handlers): reject qnx_deflate block offsets smaller than the header by @metsw24-max in https://github.com/onekey-sec/unblob/pull/1522
- (handlers): reject btrfs encoded_write data length underflow by @metsw24-max in https://github.com/onekey-sec/unblob/pull/1523
- (handlers): reject sparse chunk sizes smaller than the chunk header by @metsw24-max in https://github.com/onekey-sec/unblob/pull/1525
- (handlers): reject negative cpio entry name size by @metsw24-max in https://github.com/onekey-sec/unblob/pull/1524
New Contributors
- @Gares95 made their first contribution in https://github.com/onekey-sec/unblob/pull/1519
- @metsw24-max made their first contribution in https://github.com/onekey-sec/unblob/pull/1522
Full Changelog: https://github.com/onekey-sec/unblob/compare/26.3.30...26.6.4
- 26.3.302026-03-30 · 2026-03-30 10:39 UTC
查看更新说明
What's Changed
- fix(pool): eliminate race-condition possibly causing a deadlock by @vlaci in https://github.com/onekey-sec/unblob/pull/1453
Full Changelog: https://github.com/onekey-sec/unblob/compare/26.3.24...26.3.30
- 26.3.242026-03-25 · 2026-03-25 09:18 UTC
查看更新说明
What's Changed
- fix(docs): fix typo in installation.md by @LucasVanHaaren in https://github.com/onekey-sec/unblob/pull/1319
- add usedforsecurity=False to md5/sha1 for FIPS compliance by @zetier-md in https://github.com/onekey-sec/unblob/pull/1320
- fix: ensure extracted directories stay writable by @qkaiser in https://github.com/onekey-sec/unblob/pull/1321
- add support for MSI by @jcrussell in https://github.com/onekey-sec/unblob/pull/1244
- ci: test with Python 3.14 by @vlaci in https://github.com/onekey-sec/unblob/pull/1282
- feat: add no-sandbox opt-out option by @qkaiser in https://github.com/onekey-sec/unblob/pull/1345
- feat(handler): add support for DEAFBEAD files by @jstucke in https://github.com/onekey-sec/unblob/pull/1348
- fix(logging): preserve dumpstruct ansi output by @qkaiser in https://github.com/onekey-sec/unblob/pull/1353
- feat(models): allow multi-pattern globbing by @qkaiser in https://github.com/onekey-sec/unblob/pull/1360
- feat: add temporary file cleanup options by @qkaiser in https://github.com/onekey-sec/unblob/pull/1323
- fix(extractor): fix report typing issue with ExtractCommandFailedReport by @qkaiser in https://github.com/onekey-sec/unblob/pull/1374
- feat(handler): add support for squashfs v4 broadcom variants by @jstucke in https://github.com/onekey-sec/unblob/pull/1352
- feat(handler): add support for non-standard squashfs v2 signature. by @qkaiser in https://github.com/onekey-sec/unblob/pull/639
- fix(doc): collapse repeated separators in fragment identifiers by @qkaiser in https://github.com/onekey-sec/unblob/pull/1393
- feat(handler): add support for D-Link pkg archives by @jstucke in https://github.com/onekey-sec/unblob/pull/1394
- feat: add format handler for Xamarin compressed DLLs by @Corv0O in https://github.com/onekey-sec/unblob/pull/1406
- feat: added d-link alpha encimg archive handler by @jstucke in https://github.com/onekey-sec/unblob/pull/1395
- supply chain security improvements by @qkaiser in https://github.com/onekey-sec/unblob/pull/1412
- Documentation improvements by @qkaiser in https://github.com/onekey-sec/unblob/pull/1413
- feat(handler): Add support for QNAP networking device firmware by @gardar in https://github.com/onekey-sec/unblob/pull/1396
- fix(gzip): merge concatenated members into one chunk by @qkaiser in https://github.com/onekey-sec/unblob/pull/1421
- Resolve "python tarfile handling of gnu tar is broken" by @qkaiser in https://github.com/onekey-sec/unblob/pull/1423
- test(docs): enforce unique handler doc names by @qkaiser in https://github.com/onekey-sec/unblob/pull/1429
- fix(analysis): bail out for unsupported QNX IFS ELF format by @elektrischermoench in https://github.com/onekey-sec/unblob/pull/1436
- feat: add format handler for QNX deflate by @Corv0O in https://github.com/onekey-sec/unblob/pull/1438
- feat(docs): allow handlers to opt out of generated docs by @qkaiser in https://github.com/onekey-sec/unblob/pull/1428
- feat: add format handler for Unix File System (UFS & UFS2) by @Corv0O in https://github.com/onekey-sec/unblob/pull/1424
- feat(handlers): add support for UCL compression by @qkaiser in https://github.com/onekey-sec/unblob/pull/1440
- fix(handlers): do not instantiate struct parsers on every call by @qkaiser in https://github.com/onekey-sec/unblob/pull/1441
- feat: add UCL compression support for QNX deflate Handler by @Corv0O in https://github.com/onekey-sec/unblob/pull/1444
- fix(handlers): fix extfs oom on malformed superblocks by @qkaiser in https://github.com/onekey-sec/unblob/pull/1443
- tests: add end-to-end tests checking process termination behavior by @vlaci in https://github.com/onekey-sec/unblob/pull/1445
- Memory usage improvements by @qkaiser in https://github.com/onekey-sec/unblob/pull/1439
- fix: detect and exit processing when a MultiPool worker terminates/crashes by @vlaci in https://github.com/onekey-sec/unblob/pull/1426
New Contributors
- @LucasVanHaaren made their first
- 25.11.252025-11-25 · 2025-11-25 12:29 UTC
查看更新说明
What's Changed
- Improve doc generator by @qkaiser in https://github.com/onekey-sec/unblob/pull/1204
- fix: correct broken references by @emmanuel-ferdman in https://github.com/onekey-sec/unblob/pull/1207
- fix(sandbox): add remove_dir permissions to sandbox by @qkaiser in https://github.com/onekey-sec/unblob/pull/1085
- docs: Updated the uv command for installing Python dependencies. by @n-ll1 in https://github.com/onekey-sec/unblob/pull/1237
- fix(doc): only generate documentation for handler with a valid DOC attribute by @qkaiser in https://github.com/onekey-sec/unblob/pull/1240
- fix: ensure output directories are created before extraction by @dennisliuu in https://github.com/onekey-sec/unblob/pull/1248
- Refactored report format to use Pydantic by @garrett-zetier in https://github.com/onekey-sec/unblob/pull/1258
- Add upx to dependencies list by @ivanovanton in https://github.com/onekey-sec/unblob/pull/1305
- fix(docs): add missing erofs and partclone to extractors list by @qkaiser in https://github.com/onekey-sec/unblob/pull/1309
- feat(handler): add par2 directory handler by @rxpha3l in https://github.com/onekey-sec/unblob/pull/1166
New Contributors
- @emmanuel-ferdman made their first contribution in https://github.com/onekey-sec/unblob/pull/1207
- @n-ll1 made their first contribution in https://github.com/onekey-sec/unblob/pull/1237
- @dennisliuu made their first contribution in https://github.com/onekey-sec/unblob/pull/1248
- @garrett-zetier made their first contribution in https://github.com/onekey-sec/unblob/pull/1258
Full Changelog: https://github.com/onekey-sec/unblob/compare/25.5.26...25.11.25
- 25.5.262025-05-28 · 2025-05-28 11:34 UTC
查看更新说明
What's Changed
New Format Handlers
- feat(handler): add partclone handler by @rxpha3l in https://github.com/onekey-sec/unblob/pull/1155
- feat(handler): add upx decompression to elf executable by @rxpha3l in https://github.com/onekey-sec/unblob/pull/1189
Handlers Documentation
- Added supported handlers to the documentation by @rasakozi in https://github.com/onekey-sec/unblob/pull/1193
- Automated generation of handlers documentation by @qkaiser in https://github.com/onekey-sec/unblob/pull/1173
- Improve handlers documentation by @qkaiser in https://github.com/onekey-sec/unblob/pull/1192
New Contributors
- @rasakozi made their first contribution in https://github.com/onekey-sec/unblob/pull/1193
Full Changelog: https://github.com/onekey-sec/unblob/compare/25.4.14...25.5.26
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
unblob
Accurate, fast, and easy-to-use extraction suite for binary blobs.
unblob parses unknown binary blobs for 78+ archive, compression, and file-system formats, extracts their content recursively, and carves out unknown chunks. It is the perfect companion for extracting, analyzing, and reverse engineering firmware images.
Demo

Features
- 78+ supported formats — archives, compression streams, and file systems including SquashFS, JFFS2, UBI/UBIFS, ext, CPIO, ZIP, 7-Zip, gzip, XZ, LZMA, LZ4, and many more. See the full list.
- Recursive extraction — extracts containers within containers up to a configurable depth (default: 10 levels).
- Precise chunk detection — identifies both start and end offsets of each chunk according to the format standard, minimizing false positives.
- Unknown chunk carving — carves out and reports data that does not match any known format, automatically identifying null/
0xFFpadding. - Entropy analysis — calculates Shannon entropy and chi-square probability for unknown chunks, useful for spotting encrypted or compressed data.
- JSON metadata reports — generates structured reports with chunk offsets, sizes, entropy, file ownership, permissions, timestamps, and more.
- Multi-processing — uses all available CPU cores by default for fast extraction.
- Extensible plugin system — write custom format handlers and extractors and load them at runtime with
--plugins-path. - No elevated privileges required — runs safely as a regular user.
- Battle-tested — fuzz tested against a large corpus of firmware images; relies on audited, pinned dependencies.
Installation
pip (recommended for most users)
pip install unblob
Then install the required external extractor tools. On Ubuntu/Debian:
sudo apt install android-sdk-libsparse-utils e2fsprogs p7zip-full unar zlib1g-dev liblzo2-dev lzop lziprecover libhyperscan-dev zstd lz4
For SquashFS support, also install sasquatch:
curl -L -o sasquatch_1.0.deb "https://github.com/onekey-sec/sasquatch/releases/download/sasquatch-v4.5.1-6/sasquatch_1.0_$(dpkg --print-architecture).deb"
sudo dpkg -i sasquatch_1.0.deb && rm sasquatch_1.0.deb
Verify that all extractors are available:
unblob --show-external-dependencies
Docker (batteries included)
The Docker image bundles all extractors — no extra setup needed:
docker run \
--rm \
--pull always \
-v /path/to/extract-dir:/data/output \
-v /path/to/files:/data/input \
ghcr.io/onekey-sec/unblob:latest /data/input/firmware.bin
Note: Mount directories must be owned by the same
uid:gid. On multi-user systems, add-u $UID:$GIDto the command.
Kali Linux
sudo apt install unblob
Nix
nix profile install nixpkgs#unblob
Or add it to your NixOS/home-manager configuration — see the installation docs for flake and overlay examples.
From source
git clone https://github.com/onekey-sec/unblob.git
cd unblob
uv sync --no-dev
uv run unblob --show-external-dependencies
Requires Python ≥ 3.10, uv, and a Rust toolchain (for the compiled extensions).
Usage
Command line
Extract a file (output goes to <filename>_extract/ by default):
unblob firmware.bin
Specify a custom output directory:
unblob -e /tmp/output firmware.bin
Generate a JSON metadata report:
unblob --report report.json firmware.bin
Limit recursion depth and enable entropy analysis:
unblob -d 5 -n 2 firmware.bin
Skip files matching a magic string prefix:
unblob --skip-magic "POSIX tar archive" firmware.bin
Load a custom handler plugin:
unblob -P ./myplugins/ firmware.bin
Full CLI reference
Usage: unblob [OPTIONS] FILE
Options:
-e, --extract-dir DIRECTORY Extract the files to this directory.
-f, --force Force extraction even if outputs already exist.
-d, --depth INTEGER Recursion depth (default: 10).
-n, --entropy-depth INTEGER Entropy calculation depth (default: 1; 0 = off).
-P, --plugins-path PATH Load plugins from the provided path.
-S, --skip-magic TEXT Skip files with a given magic prefix.
-p, --process-num INTEGER Number of parallel worker processes (default: CPU count).
--report PATH Write a JSON metadata report to this file.
-k, --keep-extracted-chunks Keep extracted chunks on disk.
--delete-extracted-files TEXT Delete intermediate files after extraction.
-v, --verbose Increase verbosity (-v, -vv, -vvv).
--show-external-dependencies List required external tools and their status.
-h, --help Show this message and exit.
Python API
from pathlib import Path
from unblob.processing import ExtractionConfig, process_file
config = ExtractionConfig(
extract_root=Path("/tmp/output"),
randomness_depth=1,
)
result = process_file(config, Path("firmware.bin"))
To also write a JSON report:
process_file(config, Path("firmware.bin"), report_file=Path("report.json"))
ExtractionConfig accepts the same options as the CLI: max_depth, process_num, skip_magic, force_extract, keep_extracted_chunks, and more. See the API reference for the full list.
Testing
unblob uses pytest. Integration test fixtures are stored in Git LFS.
# Install Git LFS (one-time setup)
git lfs install
# Install all development dependencies
uv sync --all-extras --dev
# Run the full test suite
uv run pytest tests/ -v
Documentation
Full documentation is available at https://unblob.org:
- Installation
- User guide
- Supported formats
- API reference
- Development guide — writing custom handlers, extractors, and plugins
- Contribution guide
Contributing
Contributions are welcome! If you would like to add support for a new format or improve an existing one:
- Open an issue to describe the format (hex dumps, spec links, and sample files help a lot).
- Read the development guide to learn how to write handlers and extractors.
- Fork the repository, implement your changes, and open a pull request.
If you just need a format supported and don't want to implement it yourself, open an issue — we'll consider adding it.
See CONTRIBUTING for more details.
License
unblob is licensed under the MIT License.