>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
C

Bypassare i controlli del bootloader su Snapdragon 8 Elite tramite patching dell'ABL

Chiunque abbia effettuato il root di smartphone Android recenti negli ultimi anni conosce bene questo problema. Nel momento in cui sblocchi il bootloader, le app bancarie vanno in sciopero e i controlli Play Integrity segnalano felicemente un sistema compromesso. Di solito le persone ricorrono a moduli come TrickyStore o patch per keystore, ma i produttori di chipset e Google continuano a stringere le viti.

Recentemente mi sono imbattuto in un progetto interessante chiamato gbl_root_canoe dello sviluppatore superturtlee. Il repository è stato archiviato da quando l'autore ha portato la logica di patching a uno stato stabile e ha bloccato il rilascio finale. Il progetto offre un approccio non convenzionale a basso livello per risolvere il problema per i chip Snapdragon 8 Gen 5 e 8 Elite.

Cosa fa questo strumento

Essenzialmente, gbl_root_canoe è un workspace basato su EDK2 per modificare applicazioni EFI all'interno delle immagini Qualcomm ABL (Android Bootloader).

L'idea fondamentale dell'autore è sfruttare una vulnerabilità in GBL (Generic Bootloader Loader). L'ABL stock carica un BDS superfastboot personalizzato direttamente dalla partizione raw efisp. Questo BDS esegue poi la scansione di una partizione compatibile con filesystem ext4 o fat32, trova una lista di voci di boot preparata e trasferisce il controllo all'ABL modificato.

Di conseguenza, il dispositivo si avvia con uno stato bootloader fittizio bloccato (Fake Locked Bootloader). Per il sistema operativo e i controlli hardware, il dispositivo appare come se il suo bootloader fosse completamente sigillato, mentre in realtà mantieni l'accesso completo alle modifiche.

Da cosa è composta la soluzione

L'intero meccanismo si basa su una combinazione di diversi componenti:

  • BDS.efi — un bootloader personalizzato (superfastboot BDS) che viene flashato direttamente nella partizione efisp.
  • boot.efi (chiamato ABL.efi nella versione PC) — un binario ABL patchato con stato lock fittizio. Risiede nella directory efisp/ sulla partizione persist.
  • BOOTENTRIES — un file di configurazione testuale con un elenco di percorsi per il passaggio della catena di boot.
  • LinuxLoader.efi (ABL_original.efi) — l'ABL originale non modificato, conservato per l'analisi e il rollback.

Questa separazione permette di evitare modifiche dirette alle partizioni di sistema ad ogni modifica, isolando la logica del bypass nelle partizioni di servizio efisp e persist.

Come funziona dal punto di vista tecnico

L'architettura del progetto è legata alla cross-compilazione di codice C per UEFI e alla creazione di utility a basso livello extractfv e patch_abl.

Se costruisci il toolkit da sorgente da solo, avrai bisogno di un host Linux con il set standard di utility: Clang o GCC, LLD, Python 3, MinGW-w64 e Android NDK. Lo script di build supporta più target:

# Сборка тулкита для Linux
make target_toolkit_linux

# Сборка тулкита под Windows (через MinGW-w64)
make target_toolkit_windows

# Сборка модуля для KernelSU / Magisk / APatch через Android NDK
make target_magisk_module

# Сборка автономного набора утилит для запуска прямо на Android (arm64)
make target_toolkit_android

Per costruire i moduli del root manager, non hai nemmeno bisogno del dump dell'immagine boot originale abl.img del tuo smartphone. Il patcher cross-compila per l'architettura Android e assembla in un archivio zip pronto per l'installazione tramite KernelSU, Magisk o APatch.

Peculiarità dell'installazione e insidie

Lavorare con partizioni bootloader a basso livello è rischioso, quindi l'autore ha incorporato uno scenario di installazione interattivo direttamente nello script del modulo.

Quando si flasha l'archivio per la prima volta tramite Magisk o KernelSU, il controllo viene gestito attraverso i pulsanti fisici del volume:

  1. Volume Su (installazione primaria): Lo script estrae .abl dallo slot corrente, lo patcha in boot.efi, posiziona i file boot.efi, LinuxLoader.efi e BOOTENTRIES nel percorso /mnt/vendor/persist/efisp/, poi flasha BDS.efi nella partizione efisp.
  2. Dopo di ciò, devi riavviare in Recovery ed eseguire un Format Data completo.
  3. Dopo l'avvio del sistema, il modulo viene installato di nuovo, ma questa volta selezioni Volume Giù per applicare le patch per mantenere la funzionalità attraverso i futuri aggiornamenti OTA.

Se preferisci fare tutto manualmente da un computer, il toolkit permette di estrarre l'ABL stock abl.img, eseguirlo attraverso gli script build.sh o build.bat e ottenere un ABL patchato ABL.efi.

A proposito, se il log patch_log.txt mostra un avviso che la patch GBL non poteva essere applicata, il vendor ha già chiuso questa vulnerabilità nella tua versione firmware attuale. In quel caso, dovrai eseguire il rollback della partizione abl a una build precedente dove il bug esiste ancora.

Il flashing manuale di BDS.efi viene eseguito tramite una classica scrittura a blocchi:

dd if=BDS.efi of=/dev/block/by-name/efisp bs=4M

Lavorare con Superfastboot

Quando OEM Unlocking è attivato, durante l'accensione del dispositivo quando appare la schermata di avviso, puoi tenere premuto il pulsante volume giù. Il dispositivo entrerà in modalità Superfastboot (quel BDS).

Da lì, sono disponibili i comandi fastboot familiari, ma con capacità estese:

# Временный запуск любого EFI-файла без прошивки
fastboot boot custom.efi

# Блокировка загрузчика со сбросом данных
fastboot flashing lock

# Разблокировка загрузчика без вайпа данных
fastboot flashing unlock

Qui devi fare attenzione con le chiavi di crittografia. Se lo stato TEE diventa desincronizzato, il chip sicuro rifiuterà di rilasciare la chiave di decrittazione per i dati utente e la partizione Data rimarrà inaccessibile.

A chi sarà utile questo progetto

Il progetto gbl_root_canoe è improbabile che si addica ai principianti che vogliono solo installare un paio di tweak sul telefono. Questo è uno strumento per appassionati avanzati, manutentori di ROM personalizzate e coloro che conoscono profondamente l'architettura di boot Snapdragon e la struttura delle partizioni Android.

Se hai un dispositivo Snapdragon 8 Gen 5 o 8 Elite e sei stanco di combattere il rilevamento del bootloader sbloccato a livello di SO, questo repository fornisce un modo pronto all'uso e tecnicamente elegante per bypassare il problema nella fase di inizializzazione EFI precoce. Il codice sorgente è aperto sotto licenza GPL v3, quindi puoi liberamente fare fork e adattare il codice per i tuoi scenari personalizzati.

Progetti correlati