
Strumento di recupero dump di Gallery Vault con scoperta automatica, derivazione delle chiavi e ripristino automatico dei media.
Strumento di recupero per asset crittografati dall'applicazione Android Gallery Vault (ThinkYeah). Supporta il layout del contenitore V2 descritto di seguito e non richiede il PIN di Gallery Vault.
Recupera solo dati di tua proprietà o che sei autorizzato a esaminare.
Installa le dipendenze runtime:
python3 -m pip install -r requirements.txt
Per sviluppo e test:
python3 -m pip install -r requirements-dev.txt
ruff format --check .
ruff check .
python3 -m pytest
python3 gv_tui.py
Seleziona una directory di dump o un singolo file crittografato, verifica la directory di output e premi F5 o scegli Recover. F10 richiede un arresto sicuro mentre un recupero è attivo ed esce quando è inattivo.
La scoperta intelligente cerca directory denominate come .galleryvault_DoNotDelete_123 ed elabora la loro directory files. Disattivala per ispezionare ogni file sotto il percorso selezionato.
python3 gv_decryptor.py /path/to/dump --out /path/to/output
Opzioni utili:
--manual, --scan-all Scansiona tutti i file invece di scoprire i repository
--no-recursive Scansiona o scopri solo al livello superiore
--overwrite Sostituisci i file recuperati esistenti
--verbose Mostra i file saltati e conteggi di stato dettagliati
È accettato anche un singolo file crittografato:
python3 gv_decryptor.py encrypted_asset --manual
Se --out viene omesso, i file recuperati vengono salvati in INPUT_recovered. L'albero di input viene preservato sotto quella directory. I file esistenti non vengono sovrascritti a meno che non venga fornito --overwrite, e l'output viene scritto atomicamente, quindi un recupero fallito o annullato non lascia un file recuperato parziale.
I codici di uscita della CLI sono:
0: almeno un asset è stato recuperato e nessun candidato è fallito1: nessun asset è stato recuperato, o almeno un candidato è fallito2: configurazione di input o output non validaL'estensione recuperata viene selezionata dalla firma del file. Il rilevatore integrato riconosce PNG, JPEG, GIF, WebP, MP4, MOV, 3GP, HEIC/HEIF, AVIF, MP3, WAV, Ogg, AVI, Matroska, PDF e ZIP. Il contenuto sconosciuto viene scritto come .bin.
Nel formato supportato Gallery Vault V2, il PIN protegge l'interfaccia dell'applicazione; il payload del file utilizza una trasformazione XOR dipendente dalla posizione. La sua chiave per-file è memorizzata nel contenitore dopo essere stata crittografata con una chiave DES derivata da costanti utilizzate dall'applicazione.
Un layout semplificato del contenitore è:
┌──────────────────── 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
Il decrittatore valida questi offset e marcatori prima di elaborare un payload. Quindi decritta la chiave per-file, assembla gli intervalli di payload selezionati dal byte di layout e applica:
plain[i] = encrypted[i] XOR (i & 0xff) XOR key[i mod key_length]
I file vengono trasformati in blocchi, il che mantiene limitato l'utilizzo della memoria per video di grandi dimensioni. La scoperta intelligente e la scansione di tutti i file utilizzano la stessa implementazione nella CLI e nella TUI.
UNSUPPORTED_VERSION significa che il file ha marcatori Gallery Vault ma non contiene il campo versione V2 supportato.CORRUPT_STRUCTURE significa che un marcatore, una lunghezza o un confine del payload non è valido.NOT_GV significa che il marcatore di fine Gallery Vault non è stato trovato vicino alla coda del file.EXISTS significa che la destinazione è stata preservata; usa --overwrite solo quando la sostituzione è intenzionale.--verbose quando scansiona una directory mista per vedere stati dettagliati.Gallery Vault ha avuto più release e layout di archiviazione. La compatibilità è limitata ai file che corrispondono alla struttura V2 sopra; conserva i dati crittografati originali finché i file recuperati non sono stati verificati.
Questo strumento è fornito solo a scopo educativo e forense. L'autore non si assume alcuna responsabilità per un uso improprio. Assicurati sempre di avere la dovuta autorizzazione prima di decrittare dati che non ti appartengono.