从索尼 WH-1000XM4 加密固件文件中解密并提取语音指导 MP3 提示。
AES-128-CBC 密钥是通过使用 RACE 协议 通过蓝牙低能耗 (BLE) 转储耳机 Airoha MT2811 固件,然后反汇编 ARM Cortex-M4 FOTA 解密例程而提取的。完整技术文章:docs/WRITEUP.md
# 安装 Bun(如果尚未安装)
curl -fsSL https://bun.sh/install | bash
git clone https://github.com/HelgeSverre/sony-vp-extract.git
cd sony-vp-extract
bun install
# 自动从索尼CDN下载,然后提取
bun run cli/extract.ts --all
# 全部提取 — 如果 voice-packs/ 为空则自动从索尼CDN下载
bun run cli/extract.ts --all [输入目录] [输出目录]
# 提取单个语音包
bun run cli/extract.ts voice-packs/VP_english_UPG_03.bin extracted/
# 显示语音包信息
bun run cli/extract.ts --info voice-packs/VP_english_UPG_03.bin
# 仅下载(不提取)
bun run cli/extract.ts --download [输出目录]
uv run extract_all.py
从索尼CDN下载 + 解密 + 提取 — 一键完成。依赖项以内联方式声明(PEP 723)— uv run 自动处理所有内容。
┌───────────────────────────────────────┐
│ 头部(4096 字节) │
│ ├── 0x000 随机 nonce(32 字节) │
│ └── 0x100 TLV 元数据 │
│ ├── compression_type = 2 │
│ ├── body_size │
│ ├── decompressed_size(1 MB) │
│ └── 解压后的 SHA-256 │
├───────────────────────────────────────┤
│ 主体(偏移 0x1000+) │
│ AES-128-CBC 加密 │
│ └── LZMA1 压缩 │
│ └── 语音指导映像(1MB) │
│ ├── 头部(版本+数量) │
│ ├── 条目表(54 × 8B) │
│ │ (大小, 绝对偏移) │
│ └── MP3 文件(48kHz 单声道) │
└───────────────────────────────────────┘
AES-128-CBC 密钥: eibohjeCh6uegahf
AES-128-CBC IV: miefeinuShu9eilo
在 MT2811 CM4 固件 .rodata 段的闪存偏移量 0xD53A(密钥)和 0xD529(IV)处以 ASCII 字符串硬编码形式发现。所有 WH-1000XM4 设备和所有语言包使用相同的密钥。
RACE_STORAGE_PAGE_READ(命令 0x0403)从闪存中读取0x81F4 处的 AES S-box0x04200000完整技术细节:docs/WRITEUP.md
您如果想独立验证密钥,可以从已配对的 WH-1000XM4 耳机中转储固件并从中提取密钥:
# 通过 BLE 转储固件并提取密钥
uv run cli/extract_key.py
# 如果已有固件转储文件:
uv run cli/extract_key.py --firmware your_dump.bin
# Bun 替代方案(需要固件转储文件):
bun run cli/extract.ts --extract-key your_dump.bin
该工具在固件二进制文件中搜索 AES S-box,找到相邻的以 null 结尾的 16 字节 ASCII 字符串,然后通过尝试解密语音包并检查有效的 LZMA 头部来验证每个候选对。
├── cli/
│ ├── extract.ts # Bun CLI 工具(提取 + 密钥查找)
│ └── extract_key.py # Python BLE 固件转储器 + 密钥查找器
├── docs/
│ └── WRITEUP.md # 完整技术文章
├── voice-packs/ # 下载的 .bin 文件(已 gitignore)
├── extracted/ # 提取的 MP3 提示(已 gitignore)
├── extract_all.py # Python 替代提取器
├── package.json
└── README.md
该项目记录了在个人拥有的硬件上为教育目的进行的安全研究。分析的耳机是正常配对和连接的——未涉及未经授权的访问。
语音包 .bin 文件和提取的 MP3 提示版权归索尼公司所有,未包含在本仓库中。CLI 工具在运行时直接从索尼的公共 CDN 下载它们。请勿重新分发解密的语音包或提取的 MP3 文件。本工具仅用于研究和互操作性目的。
MIT
| 语言 | 文件 | 提示数 | CDN |
|---|
| 🇬🇧 英语 | VP_english_UPG_03.bin | 54 | 下载 |
| 🇫🇷 法语 | VP_french_UPG_03.bin | 54 | 下载 |
| 🇩🇪 德语 | VP_german_UPG_03.bin | 54 | 下载 |
| 🇪🇸 西班牙语 | VP_spanish_UPG_03.bin | 54 | 下载 |
| 🇮🇹 意大利语 | VP_italian_UPG_03.bin | 54 | 下载 |
| 🇵🇹 葡萄牙语 | VP_portuguese_UPG_03.bin | 54 | 下载 |
| 🇳🇱 荷兰语 | VP_dutch_UPG_03.bin | 54 | 下载 |
| 🇸🇪 瑞典语 | VP_swedish_UPG_03.bin | 54 | 下载 |
| 🇫🇮 芬兰语 | VP_finnish_UPG_03.bin | 54 | 下载 |
| 🇹🇷 土耳其语 | VP_turkish_UPG_03.bin | 54 | 下载 |