用于恢复由 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 或选择 恢复。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,否则不会覆盖现有文件,并且输出以原子方式写入,因此失败或取消的恢复不会留下不完整的恢复文件。
命令行退出码为:
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 容器 ────────────────────┐
│ 缩略图前缀 │ 加密负载 │
├────────────────────────────────────────────────────────────────────┤
│ 内部标记 >>tyfs>> │
│ 可选的交换负载块 │
├─────────────────────────── 尾部元数据 ──────────────────────────┤
│ 缩略图长度 8 字节 │
│ 负载/标记边界 8 字节 │
│ 布局选择器 1 字节 │
│ DES 加密的 XOR 密钥 可变,块对齐 │
│ 加密密钥长度 8 字节 │
│ 元数据 可变 │
│ 元数据长度 8 字节 │
│ 版本字段 2 字节 (01 01) │
├────────────────────────────────────────────────────────────────────┤
│ 结束标记 <<tyfs<< │
└────────────────────────────────────────────────────────────────────┘
│
▼
验证偏移量 → 恢复 XOR 密钥 → 组装负载
│
▼
流式输出恢复的资产
解密器在处理负载之前会验证这些偏移量和标记。然后解密每文件密钥,组装由布局字节选择的负载范围,并应用:
plain[i] = encrypted[i] XOR (i & 0xff) XOR key[i mod key_length]
文件以块为单位进行变换,这使大视频的内存使用量保持有界。智能发现和全文件扫描在命令行和 TUI 中使用相同的实现。
UNSUPPORTED_VERSION 表示文件具有 Gallery Vault 标记,但不包含受支持的 V2 版本字段。CORRUPT_STRUCTURE 表示标记、长度或负载边界无效。NOT_GV 表示在文件尾部附近未找到 Gallery Vault 结束标记。EXISTS 表示目标文件被保留;仅在有意替换时才使用 --overwrite。--verbose 以查看详细状态。Gallery Vault 有多个版本和存储布局。兼容性仅限于匹配上述 V2 结构的文件;在恢复的文件经过验证之前,请保留原始加密数据。
本工具仅供教育和取证目的使用。作者对滥用不承担任何责任。在解密不属于您的数据之前,请始终确保您拥有适当的授权。