
أداة وميض UNISOC BootROM/FDL لنظام macOS: spd_dump مُرقّع مع CVE-2022-38694 exec_addr2، مرجع البروتوكول، قواعد الأقسام، التحقق من النسخ الاحتياطي (UMS9621)
الإنجليزية | الصينية المبسطة
منفذ macOS لأداة الوميض UNISOC (Spreadtrum) BootROM/FDL. مبني على
ilyakurdyukov/spreadtrum_flash (MIT)،
ويُكمل ما ينقص spd_dump المغلق عبر exec_addr2 (تجاوز التحقق من التوقيع CVE-2022-38694)،
وينفّذ السلسلة الكاملة على macOS (arm64 + libusb):
BootROM → CVE 越界写 → FDL1 → FDL2 → GPT 解析 → 分区读写 → reset
منصة التحقق: UMS9621 (T158)، Android 13، kernel 5.15، بنية GKI (init_boot). عناوين عائلة UMS9620 متوافقة؛ بالنسبة لـ SoCs الأخرى انظر التكيف.
التبعيات: Xcode CLT، brew install libusb.
./scripts/build-macos.sh # 产出 ./spd_dump
في حالة إيقاف التشغيل وفصل الطاقة، اضغط باستمرار على Reset (أو مجموعة المفاتيح المطابقة للطراز) وأدخل USB، فيظهر الجهاز بالمعرّف
1782:4d00. يستجيب BootROM فقط خلال حوالي 20 ثانية بعد التعداد، ثم يصبح صامتًا (USB ما زال متصلًا)؛
يجب أن تعتمد الأتمتة على الحافة الانتقالية للجهاز "من لا يوجد إلى يوجد" (انظر scripts/runner.sh).
./spd_dump --wait 3 exec_addr2 0x65017f08 verbose 1 \
fdl fdl1-dl.bin 0x65000800 \
fdl fdl2-dl.bin 0xbefffe00 \
disable_transcode partition_list gpt.xml
| المعلمة | الوصف |
|---|---|
exec_addr2 <addr> | تجاوز CVE، يقوم بتحميل custom_exec_no_verify_<addr>.bin تلقائيًا؛ |
python3 scripts/backup_gen.py gpt.xml backup/ --img-dir data/
./spd_dump --wait 3 verbose 0 disable_transcode $(cat backup_args.txt)
يولّد backup_gen.py تسلسل read_part وفقًا لـ GPT (استئناف بعد انقطاع؛ وحدة size في GPT هي MB)،
ويضبط دون اتصال AVB flags=3 لـ vbmeta* (أي ما يعادل verity 0).
python3 scripts/flash_gen.py gpt.xml data/ flash_ops.txt
N=$(grep -c 'write_part\|erase_part' flash_ops.txt)
{ yes yes | head -n $N; sleep 3600; } | ./spd_dump --wait 3 verbose 0 \
disable_transcode $(cat flash_ops.txt | tr '\n' ' ')
يحتوي flash_gen.py على قواعد أقسام مدمجة (runtimenv يتحول إلى مسح، fixnv/calinv يتم تخطيه،
الأسماء المستعارة بدون فتحة تتم إزالة التكرار فيها عبر mtime)، ويضيف في النهاية erase_part userdata + reset.
انظر docs/protocol-notes.md:
verbose 1 ينهي تلك الحلقة مبكرًا0x8A (DOWN_SIZE_ERROR) يُستخدم أيضًا من أجل: التنزيل المستقل للعناوين المحمية، كتابة runtimenv، وكتل القراءة الكبيرة جدًاnr_fixnv1) عبر العنونة بالاسم تُعلّق الجلسة؛ القواعد في
docs/partition-rules.mdيتم التحقق من الأقسام الثابتة (dtb وغيرها) بمقارنة md5 مع صور معروفة من نفس الطراز، للتحقق من صحة مسار القراءة.
| العنصر | المصدر |
|---|---|
| عناوين تحميل fdl1/fdl2 | XML الخاص بملفات pac الثابتة للجهاز (فك الحزم عبر SPD Research Tool) |
| CVE blob وعنوان المكدس | TomKing062/CVE-2022-38694 soc/<chip>/ |
| صور fdl | مستخرجة من البرنامج الثابت الرسمي للجهاز (ترويسة توقيع DHTB) |
src/ يحتوي الكود المصدري للتصحيحاتالترخيص المسبق لـ Magisk su على الأجهزة بدون شاشة: docs/headless-magisk-su.md.
عمليات مستوى BootROM تحمل خطر تعطيل الجهاز (brick)؛ قم بالنسخ الاحتياطي أولاً، وتحمّل المخاطر بنفسك (AS IS).
fdl <file> <addr> | صورة FDL وعنوان تحميل SRAM الخاص بـ SoC |
disable_transcode | يجب إرساله مرة واحدة في بداية كل عملية جديدة (الحالة تبقى عبر العمليات) |
| عنصر التحقق | القيمة |
|---|
| الحجم | مقارنة واحدًا تلو الآخر مع GPT (دقة بالبايت) |
| boot / init_boot | ANDROID! @0 |
| vendor_boot | VNDRBOOT @0 |
| عائلة vbmeta | AVB0 @0، flags @0x78 |
| splloader/trustos/uboot/fdl | DHTB @0 |
| super | gDla @4096 و @8192 (نسختان هندسيتان)، أول 4K يبقى صفرًا |
| NV | NV (0x4E56) @0 أو @0x200 |