
Entschlüsseln und extrahieren Sie Sprachführungs-MP3-Prompts aus verschlüsselten Sprachpaketen des Sony WH-1000XM4. Der AES-Schlüssel wurde durch einen Bluetooth-Firmware-Dump des Airoha MT2811-SoCs extrahiert.
Entschlüsseln und extrahieren Sie die MP3-Sprachansagen aus verschlüsselten Firmware-Dateien des Sony WH-1000XM4.
Der AES-128-CBC-Schlüssel wurde extrahiert, indem die Firmware des Airoha MT2811 der Kopfhörer über Bluetooth Low Energy mit dem RACE-Protokoll ausgelesen und dann die FOTA-Entschlüsselungsroutine des ARM Cortex-M4 disassembliert wurde. Vollständiger technischer Bericht: 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
Lädt von Sonys CDN herunter + entschlüsselt + extrahiert – alles in einem Befehl. Abhängigkeiten werden inline deklariert (PEP 723) – uv run erledigt alles automatisch.
┌───────────────────────────────────────┐
│ Header (4096 Bytes) │
│ ├── 0x000 Zufalls-Nonce (32 Bytes) │
│ └── 0x100 TLV-Metadaten │
│ ├── compression_type = 2 │
│ ├── body_size │
│ ├── decompressed_size (1 MB) │
│ └── SHA-256 des Dekomprimierten │
├───────────────────────────────────────┤
│ Body (Offset 0x1000+) │
│ AES-128-CBC verschlüsselt │
│ └── LZMA1 komprimiert │
│ └── Sprachführungsbild (1 MB) │
│ ├── Header (Version+Anzahl)│
│ ├── Eintragstabelle (54 × 8B) │
│ │ (Größe, abs_offset) │
│ └── MP3-Dateien (48kHz Mono)│
└───────────────────────────────────────┘
AES-128-CBC-Key: eibohjeCh6uegahf
AES-128-CBC-IV: miefeinuShu9eilo
Als ASCII-Strings hartcodiert im .rodata-Bereich der MT2811 CM4-Firmware bei Flash-Offset 0xD53A (Schlüssel) und 0xD529 (IV) gefunden. Derselbe Schlüssel wird für alle WH-1000XM4-Geräte und alle Sprachpakete verwendet.
RACE_STORAGE_PAGE_READ (Befehl 0x0403)0x81F40x04200000 aus dem literal pool der ARM-VektortabelleVollständige technische Details: docs/WRITEUP.md
Wenn Sie den Schlüssel unabhängig verifizieren möchten, können Sie die Firmware von Ihren eigenen gekoppelten WH-1000XM4-Kopfhörern auslesen und den Schlüssel daraus extrahieren:
# 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
Das Tool durchsucht das Firmware-Binär nach der AES-S-Box, findet angrenzende null-terminierte 16-Byte-ASCII-Zeichenfolgen und validiert dann jedes Kandidatenpaar, indem es versucht, ein Sprachpaket zu entschlüsseln und auf gültige LZMA-Header zu prüfen.
├── cli/
│ ├── extract.ts # Bun-CLI-Tool (Extrahieren + Schlüsselfinder)
│ └── extract_key.py # Python-BLE-Firmware-Dumper + Schlüsselfinder
├── docs/
│ └── WRITEUP.md # Vollständiger technischer Bericht
├── voice-packs/ # Heruntergeladene .bin-Dateien (gitignoriert)
├── extracted/ # Extrahierte MP3-Ansagen (gitignoriert)
├── extract_all.py # Python-Alternativ-Extraktor
├── package.json
└── README.md
Dieses Projekt dokumentiert Sicherheitsforschung, die zu Bildungszwecken an persönlich besitzter Hardware durchgeführt wurde. Die analysierten Kopfhörer wurden normal gekoppelt und verbunden – es war kein unbefugter Zugriff beteiligt.
Die Sprachpaket-.bin-Dateien und extrahierten MP3-Ansagen sind urheberrechtlich geschützt durch die Sony Corporation und sind nicht in diesem Repository enthalten. Das CLI-Tool lädt sie zur Laufzeit direkt von Sonys öffentlichem CDN herunter. Verteilen Sie keine entschlüsselten Sprachpakete oder extrahierten MP3-Dateien weiter. Dieses Tool wird nur zu Forschungs- und Interoperabilitätszwecken bereitgestellt.
MIT
| Sprache | Datei | Ansagen | CDN |
|---|
| 🇬🇧 Englisch | VP_english_UPG_03.bin | 54 | Download |
| 🇫🇷 Französisch | VP_french_UPG_03.bin | 54 | Download |
| 🇩🇪 Deutsch | VP_german_UPG_03.bin | 54 | Download |
| 🇪🇸 Spanisch | VP_spanish_UPG_03.bin | 54 | Download |
| 🇮🇹 Italienisch | VP_italian_UPG_03.bin | 54 | Download |
| 🇵🇹 Portugiesisch | VP_portuguese_UPG_03.bin | 54 | Download |
| 🇳🇱 Niederländisch | VP_dutch_UPG_03.bin | 54 | Download |
| 🇸🇪 Schwedisch | VP_swedish_UPG_03.bin | 54 | Download |
| 🇫🇮 Finnisch | VP_finnish_UPG_03.bin | 54 | Download |
| 🇹🇷 Türkisch | VP_turkish_UPG_03.bin | 54 | Download |