Обход проверок загрузчика на Snapdragon 8 Elite через патчинг ABL
Каждый, кто рутовал свежие смартфоны на Android за последние пару лет, знает эту боль. Стоит только разблокировать загрузчик, как банковские приложения объявляют забастовку, а проверки Play Integrity радостно рапортуют о нарушенной целостности системы. Обычно люди спасаются модулями вроде TrickyStore или патчами ключевого хранилища, но производители чипсетов и Google закручивают гайки все сильнее.
Недавно наткнулся на любопытный проект gbl_root_canoe от разработчика superturtlee. Репозиторий сейчас переведен в архив, так как автор довел логику патчинга до стабильного состояния и зафиксировал финальный релиз. Проект предлагает нестандартный низкоуровневый подход к решению проблемы для чипов Snapdragon 8 Gen 5 и 8 Elite.
Что делает этот инструмент
По сути, gbl_root_canoe представляет собой рабочее пространство на базе EDK2 для модификации EFI-приложений внутри образов Qualcomm ABL (Android Bootloader).
Основная задумка автора заключается в том, чтобы использовать уязвимость в GBL (Generic Bootloader Loader). Настоящий стоковый ABL загружает кастомный superfastboot BDS прямо с сырого раздела efisp. Далее этот BDS сканирует совместимый раздел с файловой системой ext4 или fat32, находит подготовленный список записей загрузки и передает управление модифицированному ABL.
В результате устройство стартует с поддельным состоянием заблокированного загрузчика (Fake Locked Bootloader). Для операционной системы и аппаратных проверок аппарат выглядит так, будто его загрузчик закрыт наглухо, хотя на самом деле у вас остается полноценный доступ к модификациям.
Из чего состоит решение
Вся механика держится на связке из нескольких компонентов:
BDS.efi— кастомный загрузчик (superfastboot BDS), который прошивается напрямую в разделefisp.boot.efi(в ПК-версии называетсяABL.efi) — пропатченный бинарник ABL с поддельным статусом блокировки. Он лежит в директорииefisp/на разделеpersist.BOOTENTRIES— текстовый конфигурационный файл со списком путей для передачи цепочки загрузки.LinuxLoader.efi(ABL_original.efi) — оригинальный немодифицированный ABL, который сохраняется для анализа и отката.
Такое разделение позволяет не трогать системные разделы напрямую при каждой правке, а изолировать логику обхода в служебных разделах efisp и persist.
Как это устроено с технической точки зрения
Архитектура проекта завязана на кросс-компиляции C-кода под UEFI и сборке низкоуровневых утилит extractfv и patch_abl.
Если собирать инструментарий самостоятельно из исходников, понадобится хост на Linux со стандартным набором утилит: Clang или GCC, LLD, Python 3, MinGW-w64 и Android NDK. Сборочный скрипт поддерживает сразу несколько таргетов:
# Сборка тулкита для 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
Для сборки модулей рут-менеджеров вам даже не нужен исходный дамп abl.img вашего смартфона. Патчер кросс-компилируется под архитектуру Android и собирается в zip-архив, готовый к установке через KernelSU, Magisk или APatch.
Особенности установки и подводные камни
Работа с низкоуровневыми разделами загрузчика — штука рискованная, поэтому автор заложил интерактивный сценарий установки прямо в скрипт модуля.
При первой прошивке архива через Magisk или KernelSU управление происходит через физические кнопки громкости:
- Volume Up (первичная установка): Скрипт забирает
.ablиз текущего слота, патчит его вboot.efi, складывает файлыboot.efi,LinuxLoader.efiиBOOTENTRIESв путь/mnt/vendor/persist/efisp/, после чего заливаетBDS.efiна разделefisp. - После этого необходимо обязательно перезагрузиться в Recovery и сделать полный Format Data.
- После загрузки системы модуль ставят повторно, но в этот раз выбирают Volume Down, чтобы применить патчи для сохранения работоспособности при будущих OTA-обновлениях.
Если вы предпочитаете делать все руками с компьютера, тулкит позволяет распаковать стоковый abl.img, прогнать его через скрипты build.sh или build.bat и получить пропатченный ABL.efi.
Кстати, если в логе patch_log.txt появляется предупреждение о том, что применить патч GBL не удалось, значит, вендор уже закрыл эту уязвимость в вашей текущей версии прошивки. В таком случае придется сначала откатить раздел abl на более ранний билд, где баг еще присутствует.
Вручную прошивка BDS.efi выполняется обычной записью блока:
dd if=BDS.efi of=/dev/block/by-name/efisp bs=4M
Работа с Superfastboot
Когда OEM Unlocking активирован, на этапе включения устройства при появлении предупреждающего экрана можно зажать клавишу громкости вниз. Аппарат упадет в режим Superfastboot (тот самый BDS).
Оттуда доступны привычные команды fastboot, но с расширенными возможностями:
# Временный запуск любого EFI-файла без прошивки
fastboot boot custom.efi
# Блокировка загрузчика со сбросом данных
fastboot flashing lock
# Разблокировка загрузчика без вайпа данных
fastboot flashing unlock
Здесь нужно быть аккуратным с ключами шифрования. Если статус TEE окажется рассинхронизирован, чип безопасности откажется отдавать ключ расшифровки пользовательских данных, и раздел Data останется недоступным.
Кому проект будет полезен
Проект gbl_root_canoe вряд ли подойдет новичкам, которые просто хотят поставить пару твиков на телефон. Это инструмент для продвинутых энтузиастов, мейнтейнеров кастомных прошивок и тех, кто глубоко разбирается в архитектуре загрузки Snapdragon и структуре разделов Android.
Если у вас на руках устройство на Snapdragon 8 Gen 5 или 8 Elite и вы устали бороться с детектом разблокированного загрузчика на уровне ОС, этот репозиторий дает готовый и технически изящный способ обойти проблему на уровне ранней инициализации EFI. Исходники открыты под лицензией GPL v3, так что код можно смело форкать и адаптировать под свои кастомные сценарии.
