
Инструмент восстановления дампа Gallery Vault с автоматическим обнаружением, выводом ключей и автоматическим восстановлением медиафайлов.
Инструмент восстановления для ресурсов, зашифрованных приложением Gallery Vault (ThinkYeah) для Android. Он поддерживает структуру контейнера V2, описанную ниже, и не требует PIN-кода Gallery Vault.
Восстанавливайте только те данные, которыми вы владеете или которые уполномочены проверять.
Установите зависимости времени выполнения:
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: не восстановлено ни одного ресурса или хотя бы один кандидат завершился с ошибкой2: недопустимая конфигурация ввода или выводаРасширение восстановленного файла выбирается по сигнатуре файла. Встроенный детектор распознаёт PNG, JPEG, GIF, WebP, MP4, MOV, 3GP, HEIC/HEIF, AVIF, MP3, WAV, Ogg, AVI, Matroska, PDF и ZIP. Неизвестное содержимое записывается как .bin.
В поддерживаемом формате Gallery Vault V2 PIN-код защищает пользовательский интерфейс приложения; полезная нагрузка файла использует позиционно-зависимое 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 выше; сохраняйте исходные зашифрованные данные, пока восстановленные файлы не будут проверены.
Этот инструмент предоставляется только в образовательных и криминалистических целях. Автор не несёт ответственности за неправомерное использование. Всегда убедитесь, что у вас есть надлежащее разрешение перед расшифровкой данных, которые вам не принадлежат.