Обход проверок загрузчика на Snapdragon 8 Elite через патчинг ABL

15 авг 2026
981
256
11
3 недели

Каждый, кто рутовал свежие смартфоны на 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 управление происходит через физические кнопки громкости:

  1. Volume Up (первичная установка): Скрипт забирает .abl из текущего слота, патчит его в boot.efi, складывает файлы boot.efi, LinuxLoader.efi и BOOTENTRIES в путь /mnt/vendor/persist/efisp/, после чего заливает BDS.efi на раздел efisp.
  2. После этого необходимо обязательно перезагрузиться в Recovery и сделать полный Format Data.
  3. После загрузки системы модуль ставят повторно, но в этот раз выбирают 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, так что код можно смело форкать и адаптировать под свои кастомные сценарии.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.