
Herramienta de recuperación de volcados de Gallery Vault con descubrimiento automatizado, derivación de claves y restauración automática de medios.
Herramienta de recuperación para archivos cifrados por la aplicación Gallery Vault (ThinkYeah) de Android. Es compatible con el diseño de contenedor V2 documentado a continuación y no requiere el PIN de Gallery Vault.
Recupere únicamente datos que le pertenezcan o que esté autorizado a examinar.
Instale las dependencias de ejecución:
python3 -m pip install -r requirements.txt
Para desarrollo y pruebas:
python3 -m pip install -r requirements-dev.txt
ruff format --check .
ruff check .
python3 -m pytest
python3 gv_tui.py
Seleccione un directorio de volcado o un archivo cifrado individual, revise el directorio de salida y pulse F5 o elija Recover. F10 solicita una detención segura mientras una recuperación está activa y sale cuando está inactivo.
La detección inteligente busca directorios con nombres como .galleryvault_DoNotDelete_123 y procesa su directorio files. Desactívela para inspeccionar todos los archivos bajo la ruta seleccionada.
python3 gv_decryptor.py /path/to/dump --out /path/to/output
Opciones útiles:
--manual, --scan-all Escanear todos los archivos en lugar de descubrir repositorios
--no-recursive Escanear o descubrir solo en el nivel superior
--overwrite Reemplazar archivos recuperados existentes
--verbose Mostrar archivos omitidos y recuentos de estado detallados
También se acepta un archivo cifrado individual:
python3 gv_decryptor.py encrypted_asset --manual
Si se omite --out, los archivos recuperados se guardan en INPUT_recovered. El árbol de entrada se conserva bajo ese directorio. Los archivos existentes no se sobrescriben a menos que se proporcione --overwrite, y la salida se escribe de forma atómica para que una recuperación fallida o cancelada no deje un archivo recuperado parcial.
Los códigos de salida de la CLI son:
0: se recuperó al menos un archivo y ningún candidato falló1: no se recuperaron archivos, o al menos un candidato falló2: configuración de entrada o salida no válidaLa extensión recuperada se selecciona a partir de la firma del archivo. El detector integrado reconoce PNG, JPEG, GIF, WebP, MP4, MOV, 3GP, HEIC/HEIF, AVIF, MP3, WAV, Ogg, AVI, Matroska, PDF y ZIP. El contenido desconocido se escribe como .bin.
En el formato V2 compatible de Gallery Vault, el PIN protege la interfaz de la aplicación; la carga útil del archivo utiliza una transformación XOR dependiente de la posición. Su clave por archivo se almacena en el contenedor después de cifrarse con una clave DES derivada de constantes utilizadas por la aplicación.
Un diseño simplificado del contenedor es:
┌──────────────────── 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
El descifrador valida estos desplazamientos y marcadores antes de procesar una carga útil. Luego descifra la clave por archivo, ensambla los rangos de carga útil seleccionados por el byte de diseño y aplica:
plain[i] = encrypted[i] XOR (i & 0xff) XOR key[i mod key_length]
Los archivos se transforman en fragmentos, lo que mantiene acotado el uso de memoria para vídeos grandes. La detección inteligente y el escaneo de todos los archivos utilizan la misma implementación en la CLI y la TUI.
UNSUPPORTED_VERSION significa que el archivo tiene marcadores de Gallery Vault pero no contiene el campo de versión V2 compatible.CORRUPT_STRUCTURE significa que un marcador, una longitud o un límite de carga útil no es válido.NOT_GV significa que el marcador final de Gallery Vault no se encontró cerca del final del archivo.EXISTS significa que el destino se conservó; use --overwrite solo cuando el reemplazo sea intencional.--verbose al escanear un directorio mixto para ver estados detallados.Gallery Vault ha tenido múltiples versiones y diseños de almacenamiento. La compatibilidad se limita a archivos que coinciden con la estructura V2 anterior; conserve los datos cifrados originales hasta que los archivos recuperados hayan sido verificados.
Esta herramienta se proporciona únicamente con fines educativos y forenses. El autor no asume ninguna responsabilidad por su uso indebido. Asegúrese siempre de tener la autorización adecuada antes de descifrar datos que no le pertenecen.