Tengo un dispositivo Android One Plus 6T que tiene una ROM de tipo compilación user
. Este dispositivo está rooteado con Magisk y quiero deshabilitarlo dm-verity
en este dispositivo. Intenté ejecutar adb disable-verity
pero recibí un error que decíaverity cannot be disabled/enabled - USER build
¿Hay alguna forma de desactivar esto?
Objetivo: desea colocar sepolicy
un archivo personalizado en el system_root
directorio. He intentado hacerlo con los siguientes comandos:
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
También intenté deshabilitar Preserve force encryption
y Preserve AVB 2.0/dm-verity
casilla de verificación, pero aún así los comandos anteriores tienen el mismo resultado. También al reiniciar, estas casillas de verificación se habilitan nuevamente automáticamente.
Voy a dar una descripción general de cómo dm-verity
funcionan las cosas relacionadas en Android de acuerdo con mi conocimiento limitado. La situación puede diferir en diferentes dispositivos y ROM.
¿CÓMO SE APLICA DM-VERITY?
dm-verity
( Arranque verificado y AVB ), así como dm-crypt
( FDE ), son objetivos de las device-mapper
características del kernel de Linux. dm-verity
verifica la integridad de cada bloque a medida que se leen desde el dispositivo de bloques; aplicado por init_first_stage
según lo fs_mgr_flags
establecido en fstab ( 1 ) . En los dispositivos del sistema como raízA/B
( y non-A/B
), el kernel está parcheado para forzar la veracidad durante el montaje /system
y /vendor
si verify
/ avb
se encuentran indicadores en el árbol de dispositivos fstab (dtb).
dm-crypt
descifra/cifra los datos de forma transparente cuando se leen/escriben desde/hacia el dispositivo de bloqueo. FBE se basa en un marco de kernel diferentefscrypt
; pero ambos son administrados por vold
(que se ejecuta como un servicio nativo) si fs_mgr_flags
contienen voldmanaged
.
¿DÓNDE ESTÁ FSTAB?
fstab
ha sido tradicionalmente un archivo en Linux para especificar los sistemas de archivos que se montarán en el arranque. Es un componente central de fs_mgr
la funcionalidad en Android.
En los lanzamientos anteriores a Oreo fstab
estaba en ramdisk
. Con Treble se movió a /vendor
(o /system/vendor
) mientras que las entradas de fstab para system
y vendor
(y odm
) se movieron a Device Tree Blob ( dtb
). Kernel exporta dtb fstab
entradas en el directorio del árbol de dispositivos en /proc/device-tree/firmware/android
.
Algunos OEM también instalan fstab
o odm
particionan nvdata
.
Fuente: Configuración del dispositivo de almacenamiento de Android
¿DÓNDE ESTÁ DTB?
Device Tree es una estructura de datos para describir hardware que no es detectable por el kernel. Device Tree Source ( dts
) se puede convertir a dtb
(blob binario de DT) y viceversa usando dtc
. El cargador de arranque carga DTB en el momento del arranque y lo pasa al kernel para que pueda descubrir el hardware y crear nodos de dispositivos en consecuencia.
DTB es:
zImage
o Image.gz
en boot.img
( 2 ) . Se puede dividir del gzip
archivo usando split-appended-dtb (sadtb)
.O en dtbo
partición como lo hacen algunos OEM. Esto se puede comprobar con:
~# 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
la segunda etapa, o en odm
la partición (raro, algunos OEM lo hacen).Además, si el dispositivo es non-A/B
, dtb
(desde boot.img
y/o dtbo
partición) también se agrega en recovery.img
la sección DTBO después del encabezado, kernel, ramdisk y la segunda etapa ( 3 ) . Sin embargo, esto no importa para el arranque normal. Pero si el dispositivo también lo es system-as-root
, Magisk debe instalarse en esta partición de recuperación ya que boot.img
no contiene ramdisk
( 4 ) .
En caso de que DTB no se agregue al kernel, dtb(s)
se convierten para dtb.img
usar mkdtimg
. La misma herramienta puede volcar la imagen.
Fuente: Implementación de DTO
¿CÓMO DESACTIVAR DM-VERITY?
En userdebug
las ROM, dm-verity
se puede desactivar usando adb
. Modifica el número mágico del bloque de metadatos de verdad ( 5 , 6 ) que se escribe después del último bloque del sistema de archivos en el dispositivo de bloque ( system
o vendor
) ( 7 ) . Citado de aquí :
la ausencia de este número mágico detendrá el proceso de verificación
En el caso de AVB, adb
se modifica vbmeta header
para deshabilitar la verificación de imágenes de hashtree ( 8 , 9 ) . Citado de aquí :
si la
AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED
bandera está configurada en vbmeta de nivel superior, entoncesandroidboot.veritymode
está deshabilitada
En user
las compilaciones ro.debuggable
se está 0
y adbd
no se está ejecutando como root. También hay otras diferencias como la de ALLOW_ADBD_DISABLE_VERITY
, por lo adb
que no se deshabilitará dm-verity
. Otro enfoque es eliminar verify
o ( 10 ) marcar de . Citado de aquí :avb
fstab
Para verificar la partición...
...
En el fstab para la entrada relevante, agregueverify
a lasfs_mgr
banderas.
Del mismo modo, para eliminar el cifrado, forceencrypt=
o forcefdeorfbe=
debe fileencryption=
reemplazarse por encryptable=
. Sin embargo, el cifrado no se puede eliminar sin restablecer los valores de fábrica (¿FBE también?), por lo que desmarcar Preserve force encryption
la aplicación Magisk no hará nada.
Algunos OEM también usan marcas y propiedades en dispositivos habilitados.support_scfs
fs_mgr
ro.config.dmverity=true
dm-verity
También se han descubierto algunos exploits en el cargador de arranque y en la implementación de adb de algunos OEM que se pueden usar para deshabilitarlos dm-verity
en los dispositivos afectados. Sin embargo, tales fallas de seguridad generalmente se solucionan con el tiempo con actualizaciones de los OEM.
OPCIÓN 1
Configure las opciones en el archivo de configuración antes de instalar Magisk:
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Si está instalado, después de desmarcar Preserve AVB v2.0/dm-verity
la aplicación, Magisk debe reinstalarse. Citado de aquí :
en Magisk Manager, "Desinstalar> Restaurar imágenes" para restaurar las imágenes, marque la casilla "Conservar AVB 2.0/dm-verity" en Configuración avanzada, luego reinstale Magisk a través de la aplicación.
OPCIÓN 2
Usa algunos dm-verity
zips desactivadores como este .
OPCIÓN 3
Averigua dónde están las fstab
entradas de /system
y /vendor
en tu dispositivo.
Si está en ramdisk
(pre-agudos):
ramdisk
, modificar fstab
y reempaquetar.O parchear ramdisk
directamente:
~# magiskboot cpio ramdisk.cpio 'patch false true'
Si en dtb
:
boot.img
dtb(s)
dtb(s)
_dtb(s)
al núcleoboot.img
dtbo
la partición o boot.img
después de la segunda etapa, parchee dtb.img
y vuelva a escribir en la partición o boot.img
.¿Cómo desempaquetar/reempaquetar la imagen de arranque o recuperación y el disco RAM?
Utilice AIK o magiskboot
.
¿ Cómo parchear dtb
?
Parche directamente usando magiskboot
o convierta manualmente dtb
a dts
, edite dts
con cualquier editor de texto para eliminar dm-verity
marcas y dts
vuelva a convertir a dtb
.
RELACIONADO:
Simplemente puede editar el paquete raíz de Magisk para deshabilitar SOLAMENTE el indicador dm-verity. Literalmente, solo está comentando algunas líneas de scripts de Magisk, ya que la funcionalidad está inherentemente presente en Magisk. Aquí está el enlace a dicho paquete: Descargue magisk-onlynoveritypatch.zip Arranque en twrp, instale desde zip y seleccione este zip.
alecxs
Vatish Sharma
alecxs
/
en lugar de/system_root
?Irfan Latif
/
, nosystem
en la partición./
es un sistema de archivos volátil.alecxs
Irfan Latif
system
la partición se montará en/
pero los archivos que se modificarán/agregarán (p. ej.init
,init.rc
,/sbin
) se superpondrán mediante montajes de enlace. En cada caso, el objetivo debe ser sin sistema y sin detección .Vatish Sharma
sepolicy
el archivo directamentesystem.img
y luego flashearlo mediantefastboot system system.img
un comando. Probé muchos tutoriales como china-devices.com/forum/index.php?threads/… pero aparece un error como "Formato de archivo disperso no válido en el encabezado magi \n Error al leer el archivo disperso". Creo que todos estos tutoriales están obsoletos para las nuevas imágenes de Android. ¿Tienen alguna idea sobre alguna herramienta que pueda extraersystem.img
?Irfan Latif
system.img
no es gran cosa, pero no hace ninguna diferencia. El dispositivo no se iniciará con modificadosystem.img
sidm-verity
está habilitado. Déjame escribirte una respuesta sobre lo que puedes intentar deshabilitardm-verity
.