
Sony WH-1000XM4 के एन्क्रिप्टेड वॉयस पैक से आवाज मार्गदर्शन MP3 संकेतों को डिक्रिप्ट और निकालें। AES कुंजी Airoha MT2811 SoC के ब्लूटूथ फर्मवेयर डंप के माध्यम से निकाली गई।
Sony WH-1000XM4 के एन्क्रिप्टेड फर्मवेयर फाइलों से वॉइस गाइडेंस MP3 प्रॉम्प्ट को डिक्रिप्ट और निकालें।
AES-128-CBC कुंजी को हेडफोन के Airoha MT2811 फर्मवेयर को RACE प्रोटोकॉल के माध्यम से ब्लूटूथ लो एनर्जी पर डंप करके, फिर ARM Cortex-M4 FOTA डिक्रिप्शन रूटीन को डिसअसेंबल करके निकाला गया। पूर्ण तकनीकी लेख: 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
Sony CDN से डाउनलोड + डिक्रिप्ट + निकालें — सब एक कमांड में। निर्भरताएँ इनलाइन घोषित की गई हैं (PEP 723) — uv run सब कुछ स्वचालित रूप से संभालता है।
| भाषा | फ़ाइल | प्रॉम्प्ट | सीडीएन |
|---|---|---|---|
| 🇬🇧 अंग्रेज़ी | 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 | डाउनलोड करें |
┌───────────────────────────────────────┐
│ 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
ये MT2811 CM4 फर्मवेयर के .rodata सेक्शन में फ्लैश ऑफसेट 0xD53A (कुंजी) और 0xD529 (IV) पर ASCII स्ट्रिंग के रूप में हार्डकोडेड पाए गए। यही कुंजी सभी WH-1000XM4 यूनिट्स और सभी भाषा पैक्स में उपयोग होती है।
RACE_STORAGE_PAGE_READ (cmd 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
टूल फर्मवेयर बाइनरी में AES S-box खोजता है, आसन्न null-terminated 16-बाइट ASCII स्ट्रिंग ढूंढता है, फिर प्रत्येक उम्मीदवार जोड़ी को वॉइस पैक को डिक्रिप्ट करने और मान्य 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