
Ferramenta de recuperação de dump do Gallery Vault com descoberta automatizada, derivação de chave e restauração automática de mídia.
Ferramenta de recuperação para ativos criptografados pelo aplicativo Android Gallery Vault (ThinkYeah). Ela suporta o layout de contêiner V2 documentado abaixo e não requer o PIN do Gallery Vault.
Recupere apenas dados que você possui ou está autorizado a examinar.
Instale as dependências de execução:
python3 -m pip install -r requirements.txt
Para desenvolvimento e testes:
python3 -m pip install -r requirements-dev.txt
ruff format --check .
ruff check .
python3 -m pytest
python3 gv_tui.py
Selecione um diretório de dump ou um arquivo criptografado individual, revise o diretório de saída e pressione F5 ou escolha Recover. F10 solicita uma parada segura enquanto uma recuperação está ativa e sai quando ocioso.
A descoberta inteligente procura por diretórios nomeados como
.galleryvault_DoNotDelete_123 e processa seu diretório files. Desative-a para inspecionar todos os arquivos abaixo do caminho selecionado.
python3 gv_decryptor.py /path/to/dump --out /path/to/output
Opções úteis:
--manual, --scan-all Examina todos os arquivos em vez de descobrir repositórios
--no-recursive Apenas examina ou descobre no nível superior
--overwrite Substitui arquivos recuperados existentes
--verbose Mostra arquivos ignorados e contagens detalhadas de status
Um arquivo criptografado individual também é aceito:
python3 gv_decryptor.py encrypted_asset --manual
Se --out for omitido, os arquivos recuperados vão para INPUT_recovered. A árvore de entrada é preservada abaixo desse diretório. Arquivos existentes não são sobrescritos a menos que --overwrite seja fornecido, e a saída é gravada atomicamente para que uma recuperação falha ou cancelada não deixe um arquivo recuperado parcial.
Os códigos de saída da CLI são:
0: pelo menos um ativo foi recuperado e nenhum candidato falhou1: nenhum ativo foi recuperado, ou pelo menos um candidato falhou2: configuração de entrada ou saída inválidaA extensão recuperada é selecionada a partir da assinatura do arquivo. O detector integrado reconhece PNG, JPEG, GIF, WebP, MP4, MOV, 3GP, HEIC/HEIF, AVIF, MP3, WAV, Ogg, AVI, Matroska, PDF e ZIP. Conteúdo desconhecido é gravado como .bin.
No formato Gallery Vault V2 suportado, o PIN protege a interface do aplicativo; o payload do arquivo usa uma transformação XOR dependente da posição. Sua chave por arquivo é armazenada no contêiner após ser criptografada com uma chave DES derivada de constantes usadas pelo aplicativo.
Um layout de contêiner simplificado é:
┌──────────────────── 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
O descriptografador valida esses offsets e marcadores antes de processar um payload. Em seguida, ele descriptografa a chave por arquivo, monta os intervalos de payload selecionados pelo byte de layout e aplica:
plain[i] = encrypted[i] XOR (i & 0xff) XOR key[i mod key_length]
Os arquivos são transformados em blocos, o que mantém o uso de memória limitado para vídeos grandes. A descoberta inteligente e a varredura de todos os arquivos usam a mesma implementação na CLI e na TUI.
UNSUPPORTED_VERSION significa que o arquivo possui marcadores do Gallery Vault, mas não contém o campo de versão V2 suportado.CORRUPT_STRUCTURE significa que um marcador, comprimento ou limite de payload é inválido.NOT_GV significa que o marcador final do Gallery Vault não foi encontrado próximo ao final do arquivo.EXISTS significa que o destino foi preservado; use --overwrite apenas quando a substituição for intencional.--verbose ao examinar um diretório misto para ver status detalhados.O Gallery Vault teve múltiplas versões e layouts de armazenamento. A compatibilidade é limitada a arquivos que correspondem à estrutura V2 acima; mantenha os dados criptografados originais até que os arquivos recuperados tenham sido verificados.
Esta ferramenta é fornecida apenas para fins educacionais e forenses. O autor não se responsabiliza por uso indevido. Sempre garanta que você tenha autorização adequada antes de descriptografar dados que não pertencem a você.