
Расшифруйте и извлеките голосовые MP3-подсказки из зашифрованных голосовых пакетов Sony WH-1000XM4. Ключ AES извлечён через дамп прошивки Bluetooth SoC Airoha MT2811.
Расшифруйте и извлеките голосовые подсказки (MP3) из зашифрованных файлов прошивки Sony WH-1000XM4.
Ключ AES-128-CBC был извлечён путём дампа прошивки Airoha MT2811 наушников через Bluetooth Low Energy с использованием протокола RACE, после чего декомпиляции процедуры расшифровки FOTA на ARM Cortex-M4. Полное техническое описание: docs/WRITEUP.md
# Install Bun (if not already installed)
curl -fsSL https://bun.sh/install | bash
git clone https://github.com/HelgeSverre/sony-vp-extract.git
cd sony-vp-extract
bun install
# Downloads from Sony CDN automatically, then extracts
bun run cli/extract.ts --all
# Extract all — auto-downloads from Sony CDN if voice-packs/ is empty
bun run cli/extract.ts --all [input-dir] [output-dir]
# Extract a single voice pack
bun run cli/extract.ts voice-packs/VP_english_UPG_03.bin extracted/
# Show voice pack info
bun run cli/extract.ts --info voice-packs/VP_english_UPG_03.bin
# Download only (no extraction)
bun run cli/extract.ts --download [output-dir]
uv run extract_all.py
Загружает с CDN Sony + расшифровывает + извлекает — всё одной командой. Зависимости объявлены встроенно (PEP 723) — uv run обрабатывает всё автоматически.
┌───────────────────────────────────────┐
│ Header (4096 bytes) │
│ ├── 0x000 Random nonce (32 bytes) │
│ └── 0x100 TLV metadata │
│ ├── compression_type = 2 │
│ ├── body_size │
│ ├── decompressed_size (1 MB) │
│ └── SHA-256 of decompressed │
├───────────────────────────────────────┤
│ Body (offset 0x1000+) │
│ AES-128-CBC encrypted │
│ └── LZMA1 compressed │
│ └── Voice guidance image (1MB) │
│ ├── Header (version+count) │
│ ├── Entry table (54 × 8B) │
│ │ (size, abs_offset) │
│ └── MP3 files (48kHz mono) │
└───────────────────────────────────────┘
AES-128-CBC Key: eibohjeCh6uegahf
AES-128-CBC IV: miefeinuShu9eilo
Найден жёстко прописанным в виде ASCII-строк в секции .rodata прошивки MT2811 CM4 по смещению флеш-памяти 0xD53A (ключ) и 0xD529 (IV). Один и тот же ключ используется во всех устройствах WH-1000XM4 и во всех языковых пакетах.
RACE_STORAGE_PAGE_READ (команда 0x0403)0x81F4 в прошивке0x04200000 из пула литералов вектора прерываний ARMПолное техническое описание: docs/WRITEUP.md
Если вы хотите самостоятельно проверить ключ, вы можете выгрузить прошивку из своих собственных сопряжённых наушников WH-1000XM4 и извлечь из неё ключ:
# Dump firmware over BLE and extract key
uv run cli/extract_key.py
# Or if you already have a firmware dump:
uv run cli/extract_key.py --firmware your_dump.bin
# Bun alternative (firmware dump required):
bun run cli/extract.ts --extract-key your_dump.bin
Инструмент ищет в бинарном файле прошивки S-блок AES, находит смежные ASCII-строки длиной 16 байт, оканчивающиеся нулём, а затем проверяет каждую потенциальную пару, пытаясь расшифровать голосовой пакет и проверяя наличие корректных заголовков LZMA.
├── cli/
│ ├── extract.ts # Bun CLI tool (extract + key finder)
│ └── extract_key.py # Python BLE firmware dumper + key finder
├── docs/
│ └── WRITEUP.md # Full technical writeup
├── voice-packs/ # Downloaded .bin files (gitignored)
├── extracted/ # Extracted MP3 prompts (gitignored)
├── extract_all.py # Python alternative extractor
├── package.json
└── README.md
Данный проект документирует исследование безопасности, проведённое в образовательных целях на личном оборудовании. Анализируемые наушники были сопряжены и подключены обычным образом — несанкционированного доступа не было.
Голосовые пакеты .bin и извлечённые MP3-подсказки защищены авторским правом Sony Corporation и не включены в данный репозиторий. CLI-инструмент загружает их напрямую с публичного CDN Sony во время выполнения. Не распространяйте расшифрованные голосовые пакеты или извлечённые 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 | Скачать |