
自動検出、鍵導出および自動メディア復元機能を備えたGallery Vaultダンプリカバリツール。
Gallery Vault(ThinkYeah)Androidアプリケーションによって暗号化されたアセットのリカバリツールです。以下に記載されているV2コンテナレイアウトに対応しており、Gallery VaultのPINは不要です。
所有しているデータ、または調査を許可されたデータのみをリカバリしてください。
ランタイム依存関係をインストールします:
python3 -m pip install -r requirements.txt
開発およびテスト用:
python3 -m pip install -r requirements-dev.txt
ruff format --check .
ruff check .
python3 -m pytest
python3 gv_tui.py
ダンプディレクトリまたは個別の暗号化ファイルを選択し、出力ディレクトリを確認して、F5を押すかRecoverを選択します。F10はリカバリ実行中に安全な停止を要求し、アイドル状態になると終了します。
スマート検出は.galleryvault_DoNotDelete_123のような名前のディレクトリを探し、そのfilesディレクトリを処理します。無効にすると、選択したパス配下のすべてのファイルを検査します。
python3 gv_decryptor.py /path/to/dump --out /path/to/output
便利なオプション:
--manual, --scan-all リポジトリを検出せずにすべてのファイルをスキャン
--no-recursive トップレベルのみスキャンまたは検出
--overwrite 既存のリカバリ済みファイルを置き換え
--verbose スキップされたファイルと詳細なステータス件数を表示
個別の暗号化ファイルも受け付けます:
python3 gv_decryptor.py encrypted_asset --manual
--outを省略した場合、リカバリされたファイルはINPUT_recoveredに出力されます。入力ツリーはそのディレクトリ配下に保持されます。--overwriteが指定されない限り既存ファイルは上書きされず、出力はアトミックに書き込まれるため、失敗またはキャンセルされたリカバリでも部分的なリカバリ済みファイルが残ることはありません。
CLIの終了コード:
0: 少なくとも1つのアセットがリカバリされ、失敗した候補がない1: アセットがリカバリされなかった、または少なくとも1つの候補が失敗した2: 入力または出力設定が無効リカバリされた拡張子はファイルシグネチャから選択されます。組み込みの検出器はPNG、JPEG、GIF、WebP、MP4、MOV、3GP、HEIC/HEIF、AVIF、MP3、WAV、Ogg、AVI、Matroska、PDF、ZIPを認識します。不明なコンテンツは.binとして書き込まれます。
対応しているGallery Vault V2フォーマットでは、PINはアプリケーションのUIを保護します。ファイルのペイロードは位置依存のXOR変換を使用します。ファイルごとのキーは、アプリケーションで使用される定数から導出されたDESキーで暗号化された後、コンテナに格納されます。
簡略化したコンテナレイアウト:
┌──────────────────── Gallery Vault V2 container ────────────────────┐
│ Thumbnail prefix │ Encrypted payload │
├────────────────────────────────────────────────────────────────────┤
│ Inner marker >>tyfs>> │
│ Optional swapped payload block │
├─────────────────────────── Tail metadata ──────────────────────────┤
│ Thumbnail length 8 bytes │
│ Payload/marker boundary 8 bytes │
│ Layout selector 1 byte │
│ DES-encrypted XOR key variable, block aligned │
│ Encrypted-key length 8 bytes │
│ Metadata variable │
│ Metadata length 8 bytes │
│ Version field 2 bytes (01 01) │
├────────────────────────────────────────────────────────────────────┤
│ End marker <<tyfs<< │
└────────────────────────────────────────────────────────────────────┘
│
▼
validate offsets → recover XOR key → assemble payload
│
▼
stream recovered asset
復号化ツールはペイロードを処理する前に、これらのオフセットとマーカーを検証します。次にファイルごとのキーを復号化し、レイアウトバイトによって選択されたペイロード範囲を組み立て、以下を適用します:
plain[i] = encrypted[i] XOR (i & 0xff) XOR key[i mod key_length]
ファイルはチャンク単位で変換されるため、大きな動画でもメモリ使用量が抑えられます。スマート検出と全ファイルスキャンは、CLIとTUIで同じ実装を使用します。
UNSUPPORTED_VERSIONは、ファイルにGallery Vaultのマーカーがあるが、対応しているV2バージョンフィールドが含まれていないことを意味します。CORRUPT_STRUCTUREは、マーカー、長さ、またはペイロード境界が無効であることを意味します。NOT_GVは、Gallery Vaultの終了マーカーがファイル末尾付近で見つからなかったことを意味します。EXISTSは宛先が保持されたことを意味します。置き換えが意図的な場合にのみ--overwriteを使用してください。--verboseを使用して、詳細なステータスを確認してください。Gallery Vaultには複数のリリースとストレージレイアウトがあります。互換性は上記のV2構造に一致するファイルに限定されます。リカバリされたファイルが検証されるまで、元の暗号化データを保持してください。
このツールは教育およびフォレンジック目的のみで提供されています。作者は誤用について一切の責任を負いません。自分に属さないデータを復号化する前に、必ず適切な許可を得ていることを確認してください。