У меня есть Android-устройство One Plus 6T с ПЗУ типа сборки user
. Это устройство рутировано с помощью Magisk, и я хочу отключить его dm-verity
на этом устройстве. Я пытался запустить adb disable-verity
, но я получил сообщение об ошибкеverity cannot be disabled/enabled - USER build
Есть ли способ отключить это?
Цель: Хотите разместить настроенный sepolicy
файл в system_root
каталоге. Я попытался сделать это с помощью следующих команд:
C:\Users\GPU-Test>adb shell
OnePlus6T:/ $ su
OnePlus6T:/ # mount -o rw,remount /system_root
OnePlus6T:/ # cp /sdcard/selinux_policy_modified /system_root/sepolicy
cp: /system_root/sepolicy: Permission denied
1|OnePlus6T:/ # cp -f /sdcard/selinux_policy_modified /system_root/sepolicy
cp: /system_root/sepolicy: No such file or directory
1|OnePlus6T:/ # ^C
130|OnePlus6T:/ # exit
130|OnePlus6T:/ $ exit
C:\Users\GPU-Test>adb disable-verity
verity cannot be disabled/enabled - USER build
Также пытался отключить Preserve force encryption
и Preserve AVB 2.0/dm-verity
установить флажок, но все же приведенные выше команды имеют тот же результат. Также при перезагрузке эти флажки снова включаются автоматически.
Я собираюсь дать общий обзор того, как dm-verity
и связанные с этим вещи работают на Android в соответствии с моими ограниченными знаниями. Ситуация может отличаться на разных устройствах и ПЗУ.
КАК ОБЕСПЕЧИВАЕТСЯ DM-VERITY?
dm-verity
( Проверенная загрузка и AVB ), а также dm-crypt
( FDE ) являются целями device-mapper
функции ядра Linux. dm-verity
проверяет целостность каждого блока по мере их считывания с блочного устройства; применяется в init_first_stage
соответствии с fs_mgr_flags
набором в fstab ( 1 ) . На устройствах с правами root ( A/B
и non-A/B
) ядро исправлено , чтобы принудительно установить истину при монтировании /system
и /vendor
если в дереве устройств fstab (dtb) обнаружены verify
/ флаги. прозрачно расшифровывает/шифрует данные при чтении/записи с/на блочное устройство. FBE основан на другой структуре ядра.avb
dm-crypt
fscrypt
; но оба управляются vold
(которые работают как собственные службы), если fs_mgr_flags
содержат файлы voldmanaged
.
ГДЕ ФСТАБ?
fstab
традиционно был файлом в Linux для указания файловых систем, которые должны быть смонтированы при загрузке. Это основной компонент fs_mgr
функциональности Android.
В выпусках до Oreo fstab
был в формате ramdisk
. С Treble он был перемещен в /vendor
(или /system/vendor
), а записи fstab для system
и vendor
(и odm
) перемещены в Blob дерева устройств ( dtb
). Ядро экспортирует dtb fstab
записи в каталог дерева устройств по адресу /proc/device-tree/firmware/android
.
Некоторые OEM-производители также вставляют fstab
или odm
разделяют nvdata
.
Источник: Конфигурация устройства хранения Android.
ГДЕ ДТБ?
Дерево устройств — это структура данных для описания оборудования, которое не может быть обнаружено ядром. Источник дерева устройств ( dts
) можно преобразовать в dtb
(бинарный большой двоичный объект DT) и наоборот с помощью dtc
. DTB загружается загрузчиком во время загрузки и передается ядру, чтобы оно могло обнаруживать оборудование и соответственно создавать узлы устройств.
DTB:
zImage
или Image.gz
в boot.img
( 2 ) . Его можно отделить от gzip
архива с помощью split-appended-dtb (sadtb)
.Или в dtbo
разделе, как это делают некоторые OEM-производители. Это можно проверить с помощью:
~# ls -l /dev/block/bootdevice/by-name/dtbo*
~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
boot.img
после 2-го этапа, или в odm
разделе (редко, некоторые OEM-производители).non-A/B
Кроме того , если устройство dtb
(из boot.img
и/или dtbo
раздела) также добавляется в recovery.img
раздел DTBO после заголовка, ядра, виртуального диска и 2-го этапа ( 3 ) . Однако это не имеет значения для обычной загрузки. Но если устройство также system-as-root
, Magisk необходимо установить в этот раздел восстановления, так как он boot.img
не содержит ramdisk
( 4 ) .
В случае, если DTB не добавлен к ядру, dtb(s)
преобразуются в dtb.img
использование mkdtimg
. Тот же инструмент может вернуть изображение.
Источник: Реализация DTO
КАК ОТКЛЮЧИТЬ DM-VERITY?
В userdebug
ПЗУ dm-verity
можно отключить с помощью adb
. Он изменяет магический номер истинного блока метаданных ( 5 , 6 ) , который записывается после последнего блока файловой системы на блочном устройстве ( system
или vendor
) ( 7 ) . Цитата отсюда :
отсутствие этого магического числа остановит процесс проверки
В случае AVB adb
изменяет , vbmeta header
чтобы отключить проверку изображения хеш-дерева ( 8 , 9 ) . Цитата отсюда :
если
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED
флаг установлен в vbmeta верхнего уровня, то онandroidboot.veritymode
отключен
В user
сборках ro.debuggable
есть 0
и adbd
не работает как root. Также есть другие отличия, такие как ALLOW_ADBD_DISABLE_VERITY
, поэтому adb
не отключается dm-verity
. Другой подход заключается в удалении флага verify
or ( 10 ) из . Цитата отсюда :avb
fstab
Чтобы проверить раздел...
...
В fstab для соответствующей записи добавьтеverify
вfs_mgr
флаги.
Точно так же, чтобы удалить шифрование, forceencrypt=
или forcefdeorfbe=
необходимо fileencryption=
заменить на encryptable=
. Однако шифрование нельзя удалить без сброса настроек (также FBE?), поэтому снятие флажка Preserve force encryption
в приложении Magisk ничего не даст.
Некоторые OEM-производители также используют флаг и свойство на устройствах с включенной функцией.support_scfs
fs_mgr
ro.config.dmverity=true
dm-verity
Есть также некоторые эксплойты , обнаруженные в реализации загрузчика и adb некоторых OEM-производителей, которые можно использовать для отключения dm-verity
на уязвимых устройствах. Однако такие недостатки безопасности обычно со временем исправляются с помощью обновлений от OEM-производителей.
ВАРИАНТ 1
Установите параметры в файле конфигурации перед установкой Magisk:
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Если установлен, после снятия отметки Preserve AVB v2.0/dm-verity
в приложении необходимо переустановить Magisk. Цитата отсюда :
в Magisk Manager «Удалить > Восстановить образы», чтобы восстановить образы, установите флажок «Сохранить AVB 2.0/dm-verity» в «Дополнительных настройках», затем переустановите Magisk через приложение.
ВАРИАНТ 2
Используйте некоторые dm-verity
почтовые индексы отключения, подобные этому .
ВАРИАНТ 3.
Выясните, где находятся fstab
записи /system
и /vendor
на вашем устройстве.
Если в ramdisk
(до высоких частот):
ramdisk
, измените fstab
и перепакуйте.Или исправить ramdisk
напрямую:
~# magiskboot cpio ramdisk.cpio 'patch false true'
Если в dtb
:
boot.img
dtb(s)
dtb(s)
.dtb(s)
к ядруboot.img
dtbo
разделе или boot.img
после 2-го этапа, исправьте dtb.img
и запишите обратно в раздел или boot.img
.Как распаковать/перепаковать образ Boot или Recovery и Ramdisk?
Используйте АИК или magiskboot
.
Как пропатчить dtb
? Исправление
напрямую с помощью или magiskboot
преобразование вручную dtb
в формат .dts
dts
dm-verity
dts
dtb
СВЯЗАННЫЙ:
Вы можете просто отредактировать корневой пакет Magisk, чтобы ТОЛЬКО отключить флаг dm-verity. Это буквально просто комментирование нескольких строк скриптов Magisk, поскольку функциональность изначально присутствует в Magisk. Вот ссылка на такой пакет: Скачать magisk-onlynoveritypatch.zip Загрузитесь в twrp, установите из zip и выберите этот zip.
алексс
Ватиш Шарма
алексс
/
вместо/system_root
?Ирфан Латиф
/
, а неsystem
в раздел./
является энергозависимой файловой системой.алексс
Ирфан Латиф
system
раздел будет монтироваться по адресу,/
но файлы, которые будут изменены/добавлены (напримерinit
,init.rc
, ,/sbin
), будут перекрываться с помощью монтирования привязки. В каждом случае цель должна быть бессистемной и необнаруживаемой .Ватиш Шарма
sepolicy
файл непосредственно вsystem.img
, а затем прошить его с помощьюfastboot system system.img
команды. Я перепробовал множество похожих на учебники china-devices.com/forum/index.php?threads/… , но получаю сообщение об ошибке типа «Неверный формат разреженного файла в заголовке magi\n Не удалось прочитать разреженный файл». Я думаю, что все эти учебники устарели для новых образов Android. Ребята, у вас есть идеи о каком-либо инструменте, который может извлечь файлыsystem.img
?Ирфан Латиф
system.img
не имеет большого значения, но это не имеет значения. Устройство не будет загружаться с измененным,system.img
еслиdm-verity
оно включено. Позвольте мне написать вам ответ, что вы можете попробовать отключитьdm-verity
.