
Décrypter et extraire les invites vocales MP3 des packs vocaux cryptés Sony WH-1000XM4. Clé AES extraite via un dump du firmware Bluetooth du SoC Airoha MT2811.
Déchiffrer et extraire les invites vocales MP3 des firmwares chiffrés des Sony WH-1000XM4.
La clé AES-128-CBC a été extraite en vidant le firmware Airoha MT2811 des écouteurs via Bluetooth Low Energy en utilisant le protocole RACE, puis en désassemblant la routine de déchiffrement FOTA du ARM Cortex-M4. Article technique complet : docs/WRITEUP.md
# Installer Bun (si pas déjà fait)
curl -fsSL https://bun.sh/install | bash
git clone https://github.com/HelgeSverre/sony-vp-extract.git
cd sony-vp-extract
bun install
# Télécharge automatiquement depuis le CDN Sony, puis extrait
bun run cli/extract.ts --all
# Tout extraire — téléchargement automatique depuis le CDN Sony si voice-packs/ est vide
bun run cli/extract.ts --all [dossier-entrée] [dossier-sortie]
# Extraire un seul pack vocal
bun run cli/extract.ts voice-packs/VP_english_UPG_03.bin extracted/
# Afficher les infos du pack vocal
bun run cli/extract.ts --info voice-packs/VP_english_UPG_03.bin
# Téléchargement uniquement (pas d'extraction)
bun run cli/extract.ts --download [dossier-sortie]
uv run extract_all.py
Télécharge depuis le CDN Sony + déchiffre + extrait — tout en une commande. Les dépendances sont déclarées en ligne (PEP 723) — uv run gère tout automatiquement.
┌───────────────────────────────────────┐
│ En-tête (4096 octets) │
│ ├── 0x000 nonce aléatoire (32 octets)│
│ └── 0x100 Métadonnées TLV │
│ ├── compression_type = 2 │
│ ├── body_size │
│ ├── decompressed_size (1 Mo) │
│ └── SHA-256 du décompressé │
├───────────────────────────────────────┤
│ Corps (offset 0x1000+) │
│ Chiffré AES-128-CBC │
│ └── Compressé LZMA1 │
│ └── Image des guides vocaux (1Mo)│
│ ├── En-tête (version+nombre)│
│ ├── Table des entrées (54 × 8o)│
│ │ (taille, abs_offset) │
│ └── Fichiers MP3 (48kHz mono)│
└───────────────────────────────────────┘
AES-128-CBC Key: eibohjeCh6uegahf
AES-128-CBC IV: miefeinuShu9eilo
Trouvée codée en dur sous forme de chaînes ASCII dans la section .rodata du firmware MT2811 CM4 à l'offset flash 0xD53A (clé) et 0xD529 (IV). La même clé est utilisée sur toutes les unités WH-1000XM4 et tous les packs de langues.
RACE_STORAGE_PAGE_READ (cmd 0x0403)0x81F40x04200000 à partir du pool littéral du tableau de vecteurs ARMDétails techniques complets : docs/WRITEUP.md
Si vous souhaitez vérifier la clé de manière indépendante, vous pouvez vider le firmware de vos propres écouteurs WH-1000XM4 appairés et en extraire la clé :
# Vider le firmware via BLE et extraire la clé
uv run cli/extract_key.py
# Ou si vous avez déjà un dump firmware :
uv run cli/extract_key.py --firmware your_dump.bin
# Alternative Bun (fichier firmware requis) :
bun run cli/extract.ts --extract-key your_dump.bin
L'outil recherche dans le binaire du firmware la S-box AES, trouve les chaînes ASCII adjacentes de 16 octets terminées par un null, puis valide chaque paire candidate en essayant de déchiffrer un pack vocal et en vérifiant la présence d'en-têtes LZMA valides.
├── cli/
│ ├── extract.ts # Outil CLI Bun (extraction + recherche de clé)
│ └── extract_key.py # Script Python de dump BLE et recherche de clé
├── docs/
│ └── WRITEUP.md # Article technique complet
├── voice-packs/ # Fichiers .bin téléchargés (gitignored)
├── extracted/ # Invites MP3 extraites (gitignored)
├── extract_all.py # Alternative Python d'extraction
├── package.json
└── README.md
Ce projet documente une recherche en sécurité menée à des fins éducatives sur du matériel personnellement possédé. Les écouteurs analysés ont été appairés et connectés normalement — aucun accès non autorisé n'a été impliqué.
Les fichiers .bin des packs vocaux et les invites MP3 extraites sont protégés par le droit d'auteur de Sony Corporation et ne sont pas inclus dans ce dépôt. L'outil en ligne de commande les télécharge directement depuis le CDN public de Sony lors de l'exécution. Ne redistribuez pas les packs vocaux déchiffrés ni les fichiers MP3 extraits. Cet outil est fourni à des fins de recherche et d'interopérabilité uniquement.
MIT
| Langue | Fichier | Invites | CDN |
|---|
| 🇬🇧 Anglais | VP_english_UPG_03.bin | 54 | Télécharger |
| 🇫🇷 Français | VP_french_UPG_03.bin | 54 | Télécharger |
| 🇩🇪 Allemand | VP_german_UPG_03.bin | 54 | Télécharger |
| 🇪🇸 Espagnol | VP_spanish_UPG_03.bin | 54 | Télécharger |
| 🇮🇹 Italien | VP_italian_UPG_03.bin | 54 | Télécharger |
| 🇵🇹 Portugais | VP_portuguese_UPG_03.bin | 54 | Télécharger |
| 🇳🇱 Néerlandais | VP_dutch_UPG_03.bin | 54 | Télécharger |
| 🇸🇪 Suédois | VP_swedish_UPG_03.bin | 54 | Télécharger |
| 🇫🇮 Finnois | VP_finnish_UPG_03.bin | 54 | Télécharger |
| 🇹🇷 Turc | VP_turkish_UPG_03.bin | 54 | Télécharger |