Extract files from any kind of container formats
Accurate, fast, and easy-to-use extraction suite for binary blobs.
0xFF padding.--plugins-path.pip install unblobThen 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 lz4For 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.debVerify that all extractors are available:
unblob --show-external-dependenciesThe 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.binNote: Mount directories must be owned by the same
uid:gid. On multi-user systems, add-u $UID:$GIDto the command.
sudo apt install unblobnix profile install nixpkgs#unblobOr add it to your NixOS/home-manager configuration — see the installation docs for flake and overlay examples.
git clone https://github.com/onekey-sec/unblob.git
cd unblob
uv sync --no-dev
uv run unblob --show-external-dependenciesRequires Python ≥ 3.10, uv, and a Rust toolchain (for the compiled extensions).
Extract a file (output goes to <filename>_extract/ by default):
unblob firmware.binSpecify a custom output directory:
unblob -e /tmp/output firmware.binGenerate a JSON metadata report:
unblob --report report.json firmware.binLimit recursion depth and enable entropy analysis:
unblob -d 5 -n 2 firmware.binSkip files matching a magic string prefix:
unblob --skip-magic "POSIX tar archive" firmware.binLoad a custom handler plugin:
unblob -P ./myplugins/ firmware.bin…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.
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/ -vFull documentation is available at https://unblob.org:
Contributions are welcome! If you would like to add support for a new format or improve an existing one:
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.
unblob is licensed under the MIT License.
No open issues yet, or sync has not completed.