Disable DM-Verity: отключение проверки целостности системы на Android

Ошибка dm-verity corruption или сообщение «Your device is corrupt» при загрузке Android почти всегда появляется после модификации раздела system или vendor — например, после установки кастомного recovery, патча boot-образа или попытки получить root. Механизм dm-verity (Device Mapper Verity) сверяет контрольные суммы системных разделов с эталонными значениями, и любое несовпадение блокирует загрузку или переводит раздел в режим только для чтения.

Отключение dm-verity — типовой шаг при рутировании, установке кастомных прошивок и модификации системных файлов. Однако эта процедура влияет на безопасность устройства и требует разблокированного загрузчика, поэтому подходит не всем и не всегда. Ниже разберём, как работает механизм, когда его отключение оправдано и какие способы существуют.

Что такое DM-Verity и как он работает

DM-Verity — это функция ядра Linux, которая проверяет целостность блочных устройств при помощи дерева хешей. Каждый блок данных системного раздела сверяется с хешем, а корневой хеш подписан ключом производителя. Если хотя бы один блок изменён, проверка завершается ошибкой.

В зависимости от настроек прошивки результат проверки может быть разным: устройство откажется загружаться, покажет предупреждение или смонтирует раздел в режиме только для чтения. На современных версиях Android dm-verity тесно связан с механизмом Verified Boot (AVB — Android Verified Boot), который проверяет цепочку доверия от загрузчика до системного раздела.

Именно поэтому простое редактирование файлов в /system на стоковой прошивке с заблокированным загрузчиком невозможно: даже если изменить файл, при следующей загрузке проверка целостности выявит несоответствие.

Когда отключение DM-Verity действительно нужно

Отключать проверку целостности имеет смысл не всегда. Современные методы рутирования, например Magisk, работают по принципу systemless — они не изменяют системный раздел, а патчат образ boot или init_boot. В этом случае отдельное отключение dm-verity обычно не требуется, достаточно разблокированного загрузчика.

  • 🔧 Установка кастомных прошивок, где инструкция явно требует отключить verity
  • 📦 Модификация разделов system, vendor или product напрямую (редкий сценарий)
  • 🛠 Прошивка через fastboot с флагом отключения проверки на старых устройствах
  • 🧪 Разработка и тестирование сборок Android, где нужен отключаемый verified boot

Если ваша цель — просто root-доступ, сначала проверьте инструкцию по Magisk для конкретной модели. Возможно, dm-verity трогать вообще не придётся.

📊 Для чего вам нужно отключить DM-Verity?
Установка кастомной прошивки
Получение root-доступа
Модификация системных разделов
Просто изучаю тему

Подготовка: что нужно сделать до отключения

Первый и обязательный шаг — разблокировка загрузчика (bootloader unlock). Без этого любые команды fastboot, связанные с verity, будут отклонены. Учтите: разблокировка на большинстве устройств стирает все данные, поэтому заранее сделайте резервную копию.

Также понадобится компьютер с установленными инструментами ADB и Fastboot (пакет Android SDK Platform Tools) и корректные USB-драйверы для вашего устройства. Проверить соединение можно командой fastboot devices — устройство должно отображаться в списке, когда загружено в режим fastboot.

☑️ Подготовка к отключению DM-Verity

Выполнено: 0 / 5
⚠️ Внимание: разблокировка загрузчика и отключение проверки целостности снижают защиту устройства. Перестают работать некоторые банковские приложения и платёжные сервисы, а гарантийные обязательства производитель может аннулировать. Действуйте осознанно.

Способы отключения DM-Verity

Конкретная команда зависит от поколения устройства и версии механизма верификации. На старых устройствах (примерно до Android 8–9) применялась команда с флагом --disable-verity:

fastboot flash vbmeta --disable-verity --disable-verification vbmeta.img

Здесь vbmeta.img — образ раздела vbmeta из прошивки вашего устройства. Использовать образ от другой модели нельзя: подписи не совпадут, и устройство может не загрузиться.

На новых устройствах с AVB 2.0 поведение отличается: флаги отключения записываются в vbmeta, а полное отключение verity для системных разделов может быть недоступно без модификации самой прошивки. На таких устройствах корректный путь — использовать systemless-решения вроде Magisk, а не бороться с верификацией напрямую.

Для сборок Android с разблокированным загрузчиком в среде разработки существует также команда adb disable-verity, но она работает только на userdebug/eng-сборках и требует root. На обычных пользовательских прошивках она завершится ошибкой.

Сравнение подходов к обходу проверки целостности

МетодЧто делаетКогда применимРиски
Magisk (systemless root)Патчит boot-образ, не трогая systemБольшинство современных устройствНизкий, обратим
fastboot --disable-verityОтключает verity через флаги vbmetaСтарые устройства, кастомные прошивкиСредний, bootloop при ошибке
adb disable-verityОтключает verity на отладочных сборкахТолько userdebug/eng-прошивкиНизкий, но недоступен обычным пользователям
Кастомная прошивка без verityПроверка отключена на уровне сборкиПолный переход на кастомСредний, зависит от качества сборки

Типичные проблемы и их решения

Самая частая неприятность после отключения verity — bootloop, циклическая перезагрузка. Обычно это означает, что прошит несовместимый образ vbmeta или системный раздел уже был модифицирован и не проходит даже ослабленную проверку. Лечится возвратом стокового vbmeta и, при необходимости, полной перепрошивкой стоковых разделов.

Вторая ситуация — команда fastboot возвращает ошибку вроде not allowed in locked state. Это значит, что загрузчик заблокирован или разблокировка была отозвана (например, после OTA-обновления на некоторых прошивках). Проверьте статус командой fastboot oem device-info или аналогичной для вашей модели — точный синтаксис уточняйте в документации производителя.

⚠️ Внимание: не прошивайте vbmeta и boot-образы от других моделей или региональных версий, даже если устройства внешне идентичны. Несовпадение разметки разделов может привести к состоянию, когда устройство не загружается даже в fastboot.

Если после всех манипуляций устройство загрузилось, но системный раздел остался доступным только для чтения, — это нормально для современных Android с динамическими разделами и EROFS. Полная запись в system на устройствах с динамическими разделами невозможна без специальных инструментов, и отключение dm-verity этого не меняет.

Почему system остаётся read-only даже после отключения verity

Начиная с Android 10 многие устройства используют динамические разделы (super), где system, vendor и product объединены в одну группу. Файловая система часто смонтирована как read-only на уровне формата (EROFS) или размер раздела не оставляет места для записи. Отключение verity убирает проверку хешей, но не делает раздел перезаписываемым.

Как вернуть всё обратно

Обратная процедура проста, если у вас сохранилась стоковая прошивка. Прошейте оригинальный образ vbmeta без флагов отключения:

fastboot flash vbmeta vbmeta.img

Затем при необходимости заблокируйте загрузчик командой fastboot flashing lock. Важно: блокировать загрузчик можно только на полностью стоковой прошивке — иначе устройство не пройдёт проверку при загрузке и потребует полной перепрошивки.

После возврата в стоковое состояние банковские приложения и сервисы, проверяющие целостность устройства, обычно начинают работать снова, хотя на некоторых устройствах счётчик вмешательств (например, Knox у Samsung) сбросить невозможно.

Часто задаваемые вопросы

Можно ли отключить DM-Verity без разблокировки загрузчика?

Нет. Все команды, влияющие на verity и vbmeta, выполняются только при разблокированном загрузчике. Это осознанное ограничение механизма Verified Boot.

Обязательно ли отключать DM-Verity для root через Magisk?

Обычно нет. Magisk работает по принципу systemless и не изменяет системный раздел, поэтому отдельное отключение verity чаще всего не требуется. Следуйте инструкции для вашей конкретной модели.

Устройство ушло в bootloop после прошивки vbmeta. Что делать?

Загрузитесь в режим fastboot и прошейте стоковый vbmeta из официальной прошивки вашей модели. Если не помогло — выполните полную перепрошивку стоковых разделов.

Перестанут ли работать банковские приложения после отключения verity?

Вероятно, да: многие финансовые приложения проверяют статус загрузчика и целостность системы. Часть из них можно обойти средствами Magisk (DenyList, Zygisk), но гарантий нет — механизмы проверки регулярно обновляются.

Чем отличается disable-verity от disable-verification?

Флаг --disable-verity отключает проверку целостности разделов через dm-verity, а --disable-verification — проверку подписей vbmeta. Для кастомных прошивок обычно требуются оба флага одновременно.