
Decripta ed estrai i messaggi vocali MP3 di guida dai pacchetti vocali crittografati di Sony WH-1000XM4. Chiave AES estratta tramite dump del firmware Bluetooth del SoC Airoha MT2811.
Decriptare ed estrarre i promemoria MP3 della guida vocale dai file firmware crittografati delle Sony WH-1000XM4.
La chiave AES-128-CBC è stata estratta scaricando il firmware Airoha MT2811 delle cuffie tramite Bluetooth Low Energy usando il protocollo RACE, poi disassemblando la routine di decriptazione FOTA del ARM Cortex-M4. Documentazione tecnica completa: docs/WRITEUP.md
# Installare Bun (se non già installato)
curl -fsSL https://bun.sh/install | bash
git clone https://github.com/HelgeSverre/sony-vp-extract.git
cd sony-vp-extract
bun install
# Scarica automaticamente dal CDN Sony, poi estrae
bun run cli/extract.ts --all
# Estrai tutto — scarica automaticamente dal CDN Sony se voice-packs/ è vuoto
bun run cli/extract.ts --all [input-dir] [output-dir]
# Estrai un singolo pacchetto vocale
bun run cli/extract.ts voice-packs/VP_english_UPG_03.bin extracted/
# Mostra informazioni sul pacchetto vocale
bun run cli/extract.ts --info voice-packs/VP_english_UPG_03.bin
# Solo download (nessuna estrazione)
bun run cli/extract.ts --download [output-dir]
uv run extract_all.py
Scarica dal CDN Sony + decripta + estrae — tutto in un unico comando. Le dipendenze sono dichiarate inline (PEP 723) — uv run gestisce tutto automaticamente.
┌───────────────────────────────────────┐
│ 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
Trovata codificata come stringhe ASCII nella sezione .rodata del firmware MT2811 CM4 all'offset flash 0xD53A (key) e 0xD529 (IV). La stessa chiave è utilizzata su tutte le unità WH-1000XM4 e in tutti i pacchetti linguistici.
RACE_STORAGE_PAGE_READ (comando 0x0403)0x81F40x04200000 dal pool letterale del vettore ARMDettagli tecnici completi: docs/WRITEUP.md
Se desideri verificare la chiave in modo indipendente, puoi scaricare il firmware dalle tue cuffie WH-1000XM4 abbinate ed estrarre la chiave:
# Scarica il firmware tramite BLE ed estrai la chiave
uv run cli/extract_key.py
# Oppure se hai già un dump del firmware:
uv run cli/extract_key.py --firmware your_dump.bin
# Alternativa Bun (richiede dump del firmware):
bun run cli/extract.ts --extract-key your_dump.bin
Lo strumento cerca nel binario del firmware l'AES S-box, trova le stringhe ASCII di 16 byte null-terminate adiacenti, poi valida ogni coppia candidata tentando di decriptare un pacchetto vocale e verificando la presenza di intestazioni LZMA valide.
├── cli/
│ ├── extract.ts # Strumento CLI Bun (estrazione + ricerca chiave)
│ └── extract_key.py # Dumper firmware BLE Python + ricerca chiave
├── docs/
│ └── WRITEUP.md # Documentazione tecnica completa
├── voice-packs/ # File .bin scaricati (gitignored)
├── extracted/ # Promemoria MP3 estratti (gitignored)
├── extract_all.py # Estrattore alternativo Python
├── package.json
└── README.md
Questo progetto documenta una ricerca sulla sicurezza condotta per scopi educativi su hardware di proprietà personale. Le cuffie analizzate sono state accoppiate e collegate normalmente – non è stato effettuato alcun accesso non autorizzato.
I file .bin dei pacchetti vocali e i promemoria MP3 estratti sono protetti da copyright di Sony Corporation e non sono inclusi in questo repository. Lo strumento CLI li scarica direttamente dal CDN pubblico di Sony a runtime. Non ridistribuire pacchetti vocali decriptati o file MP3 estratti. Questo strumento è fornito solo per scopi di ricerca e interoperabilità.
MIT
| Lingua | File | Promemoria | CDN |
|---|
| 🇬🇧 Inglese | VP_english_UPG_03.bin | 54 | Scarica |
| 🇫🇷 Francese | VP_french_UPG_03.bin | 54 | Scarica |
| 🇩🇪 Tedesco | VP_german_UPG_03.bin | 54 | Scarica |
| 🇪🇸 Spagnolo | VP_spanish_UPG_03.bin | 54 | Scarica |
| 🇮🇹 Italiano | VP_italian_UPG_03.bin | 54 | Scarica |
| 🇵🇹 Portoghese | VP_portuguese_UPG_03.bin | 54 | Scarica |
| 🇳🇱 Olandese | VP_dutch_UPG_03.bin | 54 | Scarica |
| 🇸🇪 Svedese | VP_swedish_UPG_03.bin | 54 | Scarica |
| 🇫🇮 Finlandese | VP_finnish_UPG_03.bin | 54 | Scarica |
| 🇹🇷 Turco | VP_turkish_UPG_03.bin | 54 | Scarica |