
فك تشفير واستخراج ملفات الصوت التوجيهي بصيغة MP3 من حزم الصوت المشفرة لسماعات Sony WH-1000XM4. تم استخراج مفتاح AES عبر تفريغ البرامج الثابتة للبلوتوث لشريحة Airoha MT2811.
قم بفك التشفير واستخراج ملفات MP3 الخاصة بالتوجيه الصوتي من ملفات البرامج الثابتة المشفرة لسماعة Sony WH-1000XM4.
تم استخراج مفتاح AES-128-CBC عن طريق تفريغ البرامج الثابتة لشريحة Airoha MT2811 عبر تقنية Bluetooth Low Energy باستخدام بروتوكول RACE، ثم تفكيك روتين فك تشفير FOTA الخاص بمعالج ARM Cortex-M4. الشرح الفني الكامل: docs/WRITEUP.md
# تثبيت Bun (إذا لم يكن مثبتاً بالفعل)
curl -fsSL https://bun.sh/install | bash
git clone https://github.com/HelgeSverre/sony-vp-extract.git
cd sony-vp-extract
bun install
# التحميل من CDN الخاص بسوني تلقائياً، ثم الاستخراج
bun run cli/extract.ts --all
# استخراج كل شيء — تحميل تلقائي من CDN الخاص بسوني إذا كان مجلد voice-packs/ فارغاً
bun run cli/extract.ts --all [input-dir] [output-dir]
# استخراج حزمة صوت واحدة
bun run cli/extract.ts voice-packs/VP_english_UPG_03.bin extracted/
# عرض معلومات حزمة الصوت
bun run cli/extract.ts --info voice-packs/VP_english_UPG_03.bin
# تنزيل فقط (بدون استخراج)
bun run cli/extract.ts --download [output-dir]
uv run extract_all.py
يقوم بالتنزيل من CDN الخاص بسوني + فك التشفير + الاستخراج — كل ذلك في أمر واحد. يتم تعريف التبعيات في النص نفسه (PEP 723) — uv run يتولى كل شيء تلقائياً.
| اللغة | الملف | المطالبات | CDN |
|---|---|---|---|
| 🇬🇧 إنجليزية | 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 | تنزيل |
┌───────────────────────────────────────┐
│ الرأس (4096 بايت) │
│ ├── 0x000 قيمة عشوائية (32 بايت) │
│ └── 0x100 بيانات وصفية TLV │
│ ├── compression_type = 2 │
│ ├── body_size │
│ ├── decompressed_size (1 MB) │
│ └── SHA-256 للمفكوكة │
├───────────────────────────────────────┤
│ الجسم (الإزاحة 0x1000+) │
│ مشفر بـ AES-128-CBC │
│ └── مضغوط بـ LZMA1 │
│ └── صورة التوجيه الصوتي (1MB) │
│ ├── الرأس (الإصدار+العدد) │
│ ├── جدول الإدخالات (54 × 8B) │
│ │ (الحجم, الإزاحة المطلقة) │
│ └── ملفات MP3 (48kHz أحادية) │
└───────────────────────────────────────┘
AES-128-CBC Key: eibohjeCh6uegahf
AES-128-CBC IV: miefeinuShu9eilo
موجود بشكل صريح كنصوص ASCII في قسم .rodata الخاص بالبرامج الثابتة لـ MT2811 CM4 عند إزاحة الفلاش 0xD53A (المفتاح) و 0xD529 (IV). نفس المفتاح يُستخدم عبر جميع وحدات WH-1000XM4 وجميع حزم اللغات.
RACE_STORAGE_PAGE_READ (الأمر 0x0403)0x81F40x04200000 من مجموعة النصوص الحرفية لجدول ناقلات ARMالتفاصيل الفنية الكاملة: docs/WRITEUP.md
إذا كنت ترغب في التحقق من المفتاح بشكل مستقل، يمكنك تفريغ البرامج الثابتة من سماعة WH-1000XM4 الخاصة بك واستخراج المفتاح منها:
# تفريغ البرامج الثابتة عبر BLE واستخراج المفتاح
uv run cli/extract_key.py
# أو إذا كان لديك تفريغ للبرامج الثابتة مسبقاً:
uv run cli/extract_key.py --firmware your_dump.bin
# بديل Bun (يتطلب تفريغ البرامج الثابتة):
bun run cli/extract.ts --extract-key your_dump.bin
يبحث الأداة في ملف البرامج الثابتة الثنائي عن صندوق AES S-box، ثم يجد السلاسل ASCII المجاورة المحددة بـ 16 بايت والمنتهية بصفر، ثم يتحقق من كل زوج محتمل عن طريق محاولة فك تشفير حزمة صوت والتحقق من وجود رؤوس LZMA صالحة.
├── cli/
│ ├── extract.ts # أداة Bun CLI (استخراج + إيجاد المفتاح)
│ └── extract_key.py # مبرمج Python لتفريغ BLE + إيجاد المفتاح
├── docs/
│ └── WRITEUP.md # شرح فني كامل
├── voice-packs/ # ملفات .bin التي تم تنزيلها (تم تجاهلها بواسطة git)
├── extracted/ # مطالبات MP3 المستخرجة (تم تجاهلها بواسطة git)
├── extract_all.py # بديل Python للاستخراج
├── package.json
└── README.md
يُوثق هذا المشروع بحثًا أمنيًا تم إجراؤه لأغراض تعليمية على أجهزة مملوكة شخصيًا. السماعات التي تم تحليلها كانت مقترنة ومتصلة بشكل عادي — لم يكن هناك أي وصول غير مصرح به.