Bypass de verificaciones del bootloader en Snapdragon 8 Elite mediante parches en ABL
Cualquiera que haya rooteado smartphones Android recientes en los últimos años conoce este dolor. El momento en que desbloqueas el bootloader, las apps bancarias se van a huelga y las verificaciones de Play Integrity informan alegremente de un sistema comprometido. Por lo general, la gente recurre a módulos como TrickyStore o parches de keystore, pero los fabricantes de chipsets y Google siguen apretando las tuercas.
Hace poco me encontré con un proyecto interesante llamado gbl_root_canoe del desarrollador superturtlee. El repositorio ha sido archivado desde que el autor llevó la lógica de parches a un estado estable y bloqueó la versión final. El proyecto ofrece un enfoque poco convencional de bajo nivel para resolver el problema en chips Snapdragon 8 Gen 5 y 8 Elite.
Qué hace esta herramienta
Básicamente, gbl_root_canoe es un espacio de trabajo basado en EDK2 para modificar aplicaciones EFI dentro de las imágenes del ABL (Android Bootloader) de Qualcomm.
La idea central del autor es explotar una vulnerabilidad en GBL (Generic Bootloader Loader). El ABL de fábrica carga un BDS superfastboot personalizado directamente desde la partición raw efisp. Este BDS luego escanea una partición compatible con sistema de archivos ext4 o fat32, encuentra una lista de entradas de arranque preparada y transfiere el control al ABL modificado.
Como resultado, el dispositivo arranca con un estado falso de bootloader bloqueado (Fake Locked Bootloader). Para el sistema operativo y las verificaciones de hardware, el dispositivo parece estar como si su bootloader estuviera completamente sellado, mientras que en realidad conservas acceso completo a las modificaciones.
De qué consiste la solución
Todo el mecanismo se basa en una combinación de varios componentes:
BDS.efi— un bootloader personalizado (superfastboot BDS) que se flashea directamente en la particiónefisp.boot.efi(llamadoABL.efien la versión de PC) — un binario ABL parcheado con estado de bloqueo falso. Reside en el directorioefisp/en la particiónpersist.BOOTENTRIES— un archivo de configuración de texto con una lista de rutas para pasar la cadena de arranque.LinuxLoader.efi(ABL_original.efi) — el ABL original sin modificar, preservado para análisis y rollback.
Esta separación permite evitar modificaciones directas a las particiones del sistema con cada edición, aislando la lógica del bypass en las particiones de servicio efisp y persist.
Cómo funciona desde una perspectiva técnica
La arquitectura del proyecto está vinculada a la compilación cruzada de código C para UEFI y la construcción de utilidades de bajo nivel extractfv y patch_abl.
Si construyes el toolkit desde el código fuente tú mismo, necesitarás un host Linux con el conjunto estándar de utilidades: Clang o GCC, LLD, Python 3, MinGW-64 y Android NDK. El script de compilación soporta múltiples objetivos:
# Сборка тулкита для 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
Para construir módulos de root manager, ni siquiera necesitas el dump de la imagen de arranque original abl.img de tu smartphone. El parcheador compila de forma cruzada para la arquitectura Android y ensambla en un archivo zip listo para instalación mediante KernelSU, Magisk o APatch.
Peculiaridades de instalación y trampas
Trabajar con particiones de bootloader de bajo nivel es un negocio arriesgado, por lo que el autor incorporó un escenario de instalación interactiva directamente en el script del módulo.
Al flashear el archivo por primera vez a través de Magisk o KernelSU, el control se maneja a través de los botones físicos de volumen:
- Volumen arriba (instalación primaria): El script extrae
.abldel slot actual, lo parchea enboot.efi, coloca los archivosboot.efi,LinuxLoader.efiyBOOTENTRIESen la ruta/mnt/vendor/persist/efisp/, luego flasheaBDS.efia la particiónefisp. - Después de esto, debes reiniciar en Recovery y realizar un Formateo completo de Datos.
- Después de que el sistema arranca, el módulo se instala de nuevo, pero esta vez seleccionas Volumen abajo para aplicar los parches para mantener la funcionalidad a través de futuras actualizaciones OTA.
Si prefieres hacer todo manualmente desde una computadora, el toolkit permite desempaquetar el abl.img de fábrica, ejecutarlo a través de los scripts build.sh o build.bat, y obtener un ABL.efi parcheado.
Por cierto, si el log patch_log.txt muestra una advertencia de que el parche de GBL no pudo ser aplicado, el proveedor ya ha cerrado esta vulnerabilidad en tu versión de firmware actual. En ese caso, necesitarás hacer rollback de la partición abl a una compilación anterior donde el bug aún existe.
Flashear manualmente BDS.efi se hace mediante una escritura de bloque estándar:
dd if=BDS.efi of=/dev/block/by-name/efisp bs=4M
Trabajando con Superfastboot
Cuando OEM Unlocking está activado, durante el encendido del dispositivo cuando aparece la pantalla de advertencia, puedes mantener presionado el botón de volumen abajo. El dispositivo entrará en modo Superfastboot (ese BDS).
Desde allí, los comandos familiares de fastboot están disponibles, pero con capacidades extendidas:
# Временный запуск любого EFI-файла без прошивки
fastboot boot custom.efi
# Блокировка загрузчика со сбросом данных
fastboot flashing lock
# Разблокировка загрузчика без вайпа данных
fastboot flashing unlock
Aquí necesitas tener cuidado con las claves de encriptación. Si el estado de TEE se desincroniza, el chip seguro se negará a liberar la clave de descifrado para los datos del usuario, y la partición de Datos permanecerá inaccesible.
A quién le será útil este proyecto
El proyecto gbl_root_canoe probablemente no será adecuado para principiantes que solo quieren instalar un par de ajustes en su teléfono. Esta es una herramienta para entusiastas avanzados, mantenedores de ROMs personalizadas y aquellos muy familiarizados con la arquitectura de arranque de Snapdragon y la estructura de particiones de Android.
Si tienes un dispositivo Snapdragon 8 Gen 5 o 8 Elite y estás cansado de luchar contra la detección de bootloader desbloqueado a nivel del SO, este repositorio proporciona una solución lista y técnicamente elegante para evadir el problema en la etapa temprana de inicialización EFI. El código fuente es abierto bajo licencia GPL v3, por lo que puedes hacer fork y adaptar el código para tus propios escenarios personalizados.
Proyectos relacionados