
macOS के लिए UNISOC BootROM/FDL फ्लैशर: CVE-2022-38694 exec_addr2 के साथ पैच किया गया spd_dump, प्रोटोकॉल संदर्भ, पार्टीशन नियम, बैकअप सत्यापन (UMS9621)
English | सरलीकृत चीनी
UNISOC (स्प्रेडट्रम) BootROM/FDL फ्लैशिंग टूल का macOS पोर्ट।
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 परिवार पता-संगत है; अन्य SoC के लिए अनुकूलन देखें।
निर्भरताएँ: Xcode CLT, brew install libusb।
./scripts/build-macos.sh # 产出 ./spd_dump
बंद/पावर-ऑफ अवस्था में Reset (या डिवाइस मॉडल के अनुरूप की-संयोजन) दबाए रखते हुए USB जोड़ें; डिवाइस 1782:4d00 के रूप में enumerate होता है। BootROM केवल enumerate होने के लगभग 20 सेकंड के भीतर प्रतिक्रिया देता है, उसके बाद मौन रहता है (USB अभी भी सक्रिय है); स्वचालन के लिए डिवाइस के "अनुपस्थित → उपस्थित" edge trigger का उपयोग करें (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 स्वतः लोड करता है; कार्यान्वयन |
fdl <file> <addr> | FDL इमेज और SoC-संबंधित SRAM लोड पता |
disable_transcode | हर नई प्रक्रिया की शुरुआत में एक बार भेजा जाना चाहिए (स्थिति प्रक्रियाओं के बीच बनी रहती है) |
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 GPT के अनुसार read_part अनुक्रम उत्पन्न करता है (ब्रेकपॉइंट से जारी रखना; GPT size की इकाई MB है), और vbmeta* के लिए AVB flags=3 ऑफ़लाइन सेट करता है (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 को erase में बदलना, fixnv/calinv को छोड़ना, स्लॉट एलियस न होने पर mtime द्वारा डीडुप्लिकेशन), और अंत में erase_part userdata + reset जोड़ता है।
विस्तृत जानकारी docs/protocol-notes.md में:
verbose 1 उस लूप को समय से पहले समाप्त कर देता है0x8A (DOWN_SIZE_ERROR) एक साथ इनके लिए उपयोग होता है: संरक्षित पते पर स्वतंत्र डाउनलोड, runtimenv लेखन, अत्यधिक बड़े रीड ब्लॉकnr_fixnv1) को नाम-आधारित एड्रेसिंग द्वारा पढ़ने से सत्र हैंग हो जाता है; नियम देखें
docs/partition-rules.md| सत्यापन आइटम | मान |
|---|---|
| आकार | 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 |
स्टैटिक पार्टीशन (dtb आदि) की ज्ञात समान-मॉडल इमेज के साथ md5 क्रॉस-तुलना करके रीड श्रृंखला की शुद्धता सत्यापित की जा सकती है।
| आइटम | स्रोत |
|---|---|
| fdl1/fdl2 लोड पता | डिवाइस मॉडल का pac फर्मवेयर XML (SPD Research Tool से अनपैक किया गया) |
| CVE blob और स्टैक पता | TomKing062/CVE-2022-38694 soc/<chip>/ |
| fdl इमेज | डिवाइस मॉडल के आधिकारिक फर्मवेयर से निकाली गई (DHTB सिग्नेचर हेडर) |
src/ में पैच स्रोत कोड हैबिना स्क्रीन वाले डिवाइस के लिए Magisk su पूर्व-प्राधिकरण: docs/headless-magisk-su.md।
BootROM-स्तरीय ऑपरेशन में ब्रिक होने का जोखिम है; पहले बैकअप लें, जोखिम स्वयं वहन करें (AS IS)।