
Descriptografar e extrair instruções de voz MP3 dos pacotes de voz criptografados do Sony WH-1000XM4. Chave AES extraída via dump de firmware Bluetooth do SoC Airoha MT2811.
Descriptografe e extraia os prompts MP3 de orientação por voz dos arquivos de firmware criptografados do Sony WH-1000XM4.
A chave AES-128-CBC foi extraída despejando o firmware do chip Airoha MT2811 dos fones de ouvido via Bluetooth Low Energy usando o protocolo RACE, e então desmontando a rotina de descriptografia FOTA do ARM Cortex-M4. Artigo técnico completo: docs/WRITEUP.md
# Instale o Bun (se ainda não estiver instalado)
curl -fsSL https://bun.sh/install | bash
git clone https://github.com/HelgeSverre/sony-vp-extract.git
cd sony-vp-extract
bun install
# Baixa automaticamente da CDN da Sony e extrai
bun run cli/extract.ts --all
# Extrair tudo — baixa automaticamente da CDN da Sony se voice-packs/ estiver vazio
bun run cli/extract.ts --all [diretório-entrada] [diretório-saída]
# Extrair um único pacote de voz
bun run cli/extract.ts voice-packs/VP_english_UPG_03.bin extracted/
# Exibir informações do pacote de voz
bun run cli/extract.ts --info voice-packs/VP_english_UPG_03.bin
# Baixar apenas (sem extração)
bun run cli/extract.ts --download [diretório-saída]
uv run extract_all.py
Baixa da CDN da Sony + descriptografa + extrai — tudo em um comando. As dependências são declaradas inline (PEP 723) — o uv run cuida de tudo automaticamente.
┌───────────────────────────────────────┐
│ Cabeçalho (4096 bytes) │
│ ├── 0x000 Nonce aleatório (32 bytes)│
│ └── 0x100 Metadados TLV │
│ ├── tipo_compressão = 2 │
│ ├── tamanho_corpo │
│ ├── tamanho_descomprimido (1 MB)│
│ └── SHA-256 do descomprimido │
├───────────────────────────────────────┤
│ Corpo (offset 0x1000+) │
│ Criptografado com AES-128-CBC │
│ └── Comprimido com LZMA1 │
│ └── Imagem de orientação (1MB) │
│ ├── Cabeçalho (versão+cont)│
│ ├── Tabela de entradas (54×8B)│
│ │ (tamanho, off_absoluto) │
│ └── Arquivos MP3 (mono 48kHz)│
└───────────────────────────────────────┘
Chave AES-128-CBC: eibohjeCh6uegahf
IV AES-128-CBC: miefeinuShu9eilo
Encontrada como strings ASCII hardcoded na seção .rodata do firmware MT2811 CM4 no offset flash 0xD53A (chave) e 0xD529 (IV). A mesma chave é usada em todas as unidades WH-1000XM4 e em todos os pacotes de idioma.
RACE_STORAGE_PAGE_READ (comando 0x0403)0x81F40x04200000 a partir do pool literal da tabela de vetores ARMDetalhes técnicos completos: docs/WRITEUP.md
Se quiser verificar a chave de forma independente, pode despejar o firmware dos seus próprios fones WH-1000XM4 emparelhados e extrair a chave dele:
# Despejar firmware via BLE e extrair chave
uv run cli/extract_key.py
# Ou se você já tiver um dump do firmware:
uv run cli/extract_key.py --firmware seu_dump.bin
# Alternativa com Bun (requer dump do firmware):
bun run cli/extract.ts --extract-key seu_dump.bin
A ferramenta procura a S-box do AES no binário do firmware, encontra strings ASCII de 16 bytes terminadas em nulo adjacentes e valida cada par candidato tentando descriptografar um pacote de voz e verificando cabeçalhos LZMA válidos.
├── cli/
│ ├── extract.ts # Ferramenta CLI em Bun (extração + localizador de chave)
│ └── extract_key.py # Despejador de firmware BLE + localizador de chave em Python
├── docs/
│ └── WRITEUP.md # Artigo técnico completo
├── voice-packs/ # Arquivos .bin baixados (gitignored)
├── extracted/ # Prompts MP3 extraídos (gitignored)
├── extract_all.py # Extrator alternativo em Python
├── package.json
└── README.md
Este projeto documenta pesquisa de segurança conduzida para fins educacionais em hardware de propriedade pessoal. Os fones analisados estavam emparelhados e conectados normalmente — nenhum acesso não autorizado foi envolvido.
Os arquivos .bin do pacote de voz e os prompts MP3 extraídos são protegidos por direitos autorais da Sony Corporation e não estão incluídos neste repositório. A ferramenta CLI os baixa diretamente da CDN pública da Sony no momento da execução. Não redistribua pacotes de voz descriptografados ou arquivos MP3 extraídos. Esta ferramenta é fornecida apenas para fins de pesquisa e interoperabilidade.
MIT
| Idioma | Arquivo | Comandos de Voz | CDN |
|---|
| 🇬🇧 Inglês | VP_english_UPG_03.bin | 54 | Download |
| 🇫🇷 Francês | VP_french_UPG_03.bin | 54 | Download |
| 🇩🇪 Alemão | VP_german_UPG_03.bin | 54 | Download |
| 🇪🇸 Espanhol | VP_spanish_UPG_03.bin | 54 | Download |
| 🇮🇹 Italiano | VP_italian_UPG_03.bin | 54 | Download |
| 🇵🇹 Português | VP_portuguese_UPG_03.bin | 54 | Download |
| 🇳🇱 Holandês | VP_dutch_UPG_03.bin | 54 | Download |
| 🇸🇪 Sueco | VP_swedish_UPG_03.bin | 54 | Download |
| 🇫🇮 Finlandês | VP_finnish_UPG_03.bin | 54 | Download |
| 🇹🇷 Turco | VP_turkish_UPG_03.bin | 54 | Download |