Voy a dar una visión general de cómo dm-verity
y cosas relacionadas funcionan en Android según mis limitados conocimientos. La situación puede variar en diferentes dispositivos y ROMs.
¿CÓMO SE APLICA LA VERIDAD DM?
dm-verity
( Bota verificada y AVB ) así como dm-crypt
( FDE ) son objetivos de device-mapper
del kernel de Linux. dm-verity
verifica la integridad de cada bloque a medida que se lee desde el dispositivo de bloques; se aplica mediante init_first_stage
según fs_mgr_flags
establecido en fstab ( 1 ) . En system-as-Root dispositivos ( A/B
y non-A/B
), el núcleo es parcheado para forzar la veracidad durante el montaje /system
y /vendor
si verify
/ avb
Las banderas se encuentran en el árbol de dispositivos fstab (dtb).
dm-crypt
descifra/encripta los datos de forma transparente cuando se leen/escriben desde/hacia el dispositivo de bloque. FBE se basa en un marco diferente del núcleo fscrypt
pero ambos son gestionados 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 a montar en el arranque. Es un componente central de fs_mgr
funcionalidad en Android.
Sobre los lanzamientos anteriores a Oreo fstab
estaba en ramdisk
. Con Treble se trasladó a /vendor
(o /system/vendor
) mientras que las entradas fstab para system
y vendor
(y odm
) se trasladan al Bloque del Árbol de Dispositivos ( dtb
). Exportación de núcleos dtb fstab
entradas en el directorio del árbol de dispositivos en /proc/device-tree/firmware/android
.
Algunos fabricantes de equipos originales también ponen fstab
en odm
o nvdata
particiones.
Fuente: Configuración del dispositivo de almacenamiento Android
¿DÓNDE ESTÁ DTB?
Árbol de dispositivos es una estructura de datos para describir el hardware que no es descubrible para el kernel. Fuente del árbol de dispositivos ( dts
) se puede convertir en dtb
(blob binario de DT) y viceversa utilizando dtc
. El DTB es cargado por el gestor de arranque en el momento de arrancar y se pasa al kernel para que pueda descubrir el hardware y crear los nodos del dispositivo en consecuencia.
DTB es cualquiera:
-
Añadido al núcleo zImage
o Image.gz
en boot.img
( 2 ) . Se puede dividir de gzip
archivo utilizando split-appended-dtb (sadtb)
.
-
O en dtbo
partición como 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/&|'
-
O al final de boot.img
después de la 2ª etapa, o en odm
partición (raro, algunos OEM lo hacen).
También si el dispositivo es non-A/B
, dtb
(de boot.img
y/o dtbo
) también se añade a recovery.img
en la sección DTBO después de la cabecera, el kernel, el ramdisk y la 2ª etapa ( 3 ) . Sin embargo, esto no importa para el arranque normal. Pero si el dispositivo es también system-as-root
En esta partición de recuperación es necesario instalar Magisk, ya que el boot.img
no contiene ramdisk
( 4 ) .
En caso de que la DTB no se adjunte al núcleo, dtb(s)
se convierten en dtb.img
utilizando mkdtimg
. La misma herramienta puede volcar la imagen.
Fuente: Implementación de DTO
¿CÓMO DESACTIVAR DM-VERITY?
En userdebug
ROMs, dm-verity
se puede desactivar con adb
. Modifica el número mágico del bloque de metadatos de verificación ( 5 , 6 ) que se escribe después del último bloque del sistema de archivos en el dispositivo de bloques ( system
o vendor
) ( 7 ) . Citado en aquí :
la ausencia de este número mágico detendrá el proceso de verificación
En el caso de AVB, adb
modifica vbmeta header
para desactivar la verificación de la imagen del hashtree ( 8 , 9 ) . Citado en aquí :
si el AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED
en el nivel superior de vbmeta, entonces androidboot.veritymode
se ajusta a discapacitados
En user
construye ro.debuggable
es 0
y adbd
no se ejecuta como Root. También hay otras diferencias como la de ALLOW_ADBD_DISABLE_VERITY
Así que adb
no desactivará dm-verity
. Otro enfoque es eliminar verify
o avb
( 10 ) bandera de fstab
. Citado en aquí :
Para verificar la partición...
...
En el fstab de la entrada correspondiente, añada verify
a la fs_mgr
banderas.
Del mismo modo, para eliminar la encriptación, forceencrypt=
, forcefdeorfbe=
o fileencryption=
deben ser sustituidos por encryptable=
. Sin embargo, la encriptación no se puede eliminar sin un restablecimiento de fábrica (¿también el FBE?), por lo que desmarcar Preserve force encryption
en la aplicación Magisk no hará nada.
Algunos fabricantes de equipos originales también utilizan support_scfs
fs_mgr
bandera y ro.config.dmverity=true
en dispositivos con dm-verity
habilitado.
También hay algunos explota descubierto en gestor de arranque y adb implementación de algunos OEM que se puede utilizar para desactivar dm-verity
en los dispositivos afectados. Sin embargo, estos fallos de seguridad suelen corregirse con el tiempo mediante actualizaciones de los fabricantes de equipos.
OPCIÓN 1
Establezca 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
en la aplicación, es necesario reinstalar Magisk. Citado de aquí :
en Magisk Manager, "Desinstalar > Restaurar imágenes" para restaurar las imágenes, marque la casilla "Preservar AVB 2.0/dm-verity" en la configuración avanzada, y luego vuelva a instalar Magisk a través de la aplicación.
OPCIÓN 2
Utiliza algunos dm-verity
cremalleras disabler como este .
OPCIÓN 3
Averiguar dónde está el fstab
entradas de /system
y /vendor
están en su dispositivo.
Si en ramdisk
(pre-Treble):
Si en dtb
:
- Si se añade al núcleo:
- Extracto
boot.img
- División anexa
dtb(s)
- Parche
dtb(s)
.
- Añada
dtb(s)
al núcleo
- Volver a empaquetar
boot.img
- Si en
dtbo
partición o en boot.img
después de la 2ª etapa, parche dtb.img
y escribir de nuevo en la partición o boot.img
.
¿Cómo desempaquetar/reempaquetar la imagen de arranque o recuperación y el Ramdisk?
Utilice AIK o magiskboot
.
Cómo parchear dtb
?
Parche directamente con magiskboot
o convertir manualmente dtb
a dts
, editar dts
con cualquier editor de texto para eliminar dm-verity
banderas, y convertir dts
volver a dtb
.
RELACIONADO:
0 votos
¿Puedes ser más específico en tu pregunta, porque normalmente ya has parcheado tu dispositivo contra dm-verity (Magisk Manager tiene una casilla para)?
0 votos
He añadido más detalles sobre por qué quiero hacer esto y lo que he probado.
0 votos
Por qué no utilizar
/
en lugar de/system_root
?1 votos
@alecxs en dispositivos system-as-Root Magisk monta el ramdisk de recuperación en
/
nosystem
partición./
es un sistema de archivos volátil.1 votos
@IrfanLatif gracias, ¡la "recuperación" era la pieza que faltaba! Ahora este artículo tiene sentido para mí "Magisk monta el sistema a '/system_root' y bind mount '/system_root/system' a '/system'. " xda-developers.com/magisk-google-pixel-3-pixel-3a-Android-q
2 votos
@alecxs con Q las cosas han vuelto a cambiar. Ahora
system
La partición se calculará en/
pero los archivos a modificar/añadir (por ejemploinit
,init.rc
,/sbin
) se superpondrán utilizando soportes de unión. En cada caso el objetivo debe ser sin sistema y sin detección .0 votos
Creo que tengo que colocar
sepolicy
directamente ensystem.img
y luego flashearlo a través defastboot system system.img
comando. He probado un montón de tutoriales como china-devices.com/forum/index.php?threads/ pero recibo un error como "Formato de archivo disperso no válido en la cabecera magi \n No se ha podido leer el archivo disperso ". Creo que todos estos tutoriales están obsoletos para las nuevas imágenes de Android. ¿Tenéis idea de alguna herramienta que pueda extraersystem.img
?0 votos
@VatishSharma modificando
system.img
no es un gran problema, pero no hace ninguna diferencia. El dispositivo no arranca con la modificaciónsystem.img
sidm-verity
está activado. Permítanme escribir la respuesta para usted lo que usted puede tratar de desactivardm-verity
.