
あらゆる種類のコンテナ形式からファイルを抽出する
バイナリブロブのための正確で高速かつ使いやすい抽出スイート。
unblob は未知のバイナリブロブを解析し、78以上のアーカイブ、圧縮、ファイルシステムフォーマットを認識して再帰的に抽出し、未知のチャンクをカービングします。ファームウェアイメージの抽出、解析、リバースエンジニアリングに最適なツールです。

0xFF パディングを特定します。--plugins-path で実行時に読み込めます。pip install unblob
次に、必要な外部抽出ツールをインストールします。Ubuntu/Debian の場合:
sudo apt install android-sdk-libsparse-utils e2fsprogs p7zip-full unar zlib1g-dev liblzo2-dev lzop lziprecover libhyperscan-dev zstd lz4
SquashFS サポートのために、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
すべての抽出ツールが利用可能かを確認します:
unblob --show-external-dependencies
Docker イメージにはすべての抽出ツールがバンドルされており、追加のセットアップは不要です:
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
注: マウントするディレクトリは同じ
uid:gidで所有されている必要があります。マルチユーザーシステムでは、コマンドに-u $UID:$GIDを追加してください。
sudo apt install unblob
nix profile install nixpkgs#unblob
または、NixOS/home-manager の設定に追加します。flake や overlay の例についてはインストールドキュメントを参照してください。
git clone https://github.com/onekey-sec/unblob.git
cd unblob
uv sync --no-dev
uv run unblob --show-external-dependencies
Python ≥ 3.10、uv、Rust ツールチェーン(コンパイル済み拡張機能用)が必要です。
ファイルを抽出(出力はデフォルトで <filename>_extract/ に保存):
unblob firmware.bin
カスタム出力ディレクトリを指定:
unblob -e /tmp/output firmware.bin
JSON メタデータレポートを生成:
unblob --report report.json firmware.bin
再帰の深さを制限し、エントロピー解析を有効にする:
unblob -d 5 -n 2 firmware.bin
マジック文字列のプレフィックスに一致するファイルをスキップ:
unblob --skip-magic "POSIX tar archive" firmware.bin
カスタムハンドラプラグインを読み込む:
unblob -P ./myplugins/ firmware.bin
Usage: unblob [OPTIONS] FILE
Options:
-e, --extract-dir DIRECTORY ファイルをこのディレクトリに抽出します。
-f, --force 出力が既に存在する場合でも強制的に抽出します。
-d, --depth INTEGER 再帰の深さ(デフォルト:10)。
-n, --entropy-depth INTEGER エントロピー計算の深さ(デフォルト:1、0 = 無効)。
-P, --plugins-path PATH 指定されたパスからプラグインを読み込みます。
-S, --skip-magic TEXT 特定のマジックプレフィックスを持つファイルをスキップします。
-p, --process-num INTEGER 並列ワーカープロセス数(デフォルト:CPU 数)。
--report PATH JSON メタデータレポートをこのファイルに書き込みます。
-k, --keep-extracted-chunks 抽出されたチャンクをディスクに保持します。
--delete-extracted-files TEXT 抽出後の中間ファイルを削除します。
-v, --verbose 冗長性を増やします(-v、-vv、-vvv)。
--show-external-dependencies 必要な外部ツールとそのステータスを表示します。
-h, --help このメッセージと終了オプションを表示します。
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"))
JSON レポートも書き出す場合:
process_file(config, Path("firmware.bin"), report_file=Path("report.json"))
ExtractionConfig は CLI と同じオプションを受け付けます:max_depth、process_num、skip_magic、force_extract、keep_extracted_chunks など。完全なリストはAPI リファレンスを参照してください。
unblob は pytest を使用しています。統合テストのフィクスチャは Git LFS に保存されています。
# Git LFS をインストール(初回のみ)
git lfs install
# すべての開発依存関係をインストール
uv sync --all-extras --dev
# テストスイート全体を実行
uv run pytest tests/ -v
完全なドキュメントは https://unblob.org でご覧いただけます:
貢献を歓迎します!新しいフォーマットのサポートを追加したい場合や既存のフォーマットを改善したい場合は、以下の手順に従ってください:
フォーマットのサポートが必要だが自分で実装したくない場合は、イシューを開いてください。追加を検討します。
詳細は CONTRIBUTING を参照してください。
unblob は MIT ライセンスの下で提供されています。