8 votos

¿Cómo desactivar la versión DM en Android con una ROM de tipo "usuario"?

Tengo un dispositivo Android One Plus 6T que tiene una ROM de tipo constructivo user . Este dispositivo está rooteado con Magisk y quiero desactivar dm-verity en este dispositivo. He tratado de correr adb disable-verity pero tengo un error que dice verity cannot be disabled/enabled - USER build

¿Hay alguna forma de desactivar esto?

Objetivo: Quiere colocar un lugar personalizado sepolicy archivo bajo 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 trató de deshabilitar Preserve force encryption y Preserve AVB 2.0/dm-verity pero aún así los comandos anteriores tienen el mismo resultado. También al reiniciar estas casillas de verificación se activan de nuevo automáticamente.

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 ?

15voto

Jack Wade Puntos 231

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):

  • Extracto ramdisk , modificar fstab y volver a embalar.
  • O parche ramdisk directamente:

    ~# magiskboot cpio ramdisk.cpio 'patch false true'

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

En los dispositivos SAR lanzados con Android 10, he construido un kernel con banderas avb(no se encuentra la bandera verity) eliminadas de las entradas fsmgr_flags y lo he hecho permisivo. También vacié la vbmeta con la bandera de verificación deshabilitada. ¿Es suficiente para un dm-veridad para ser desactivado? (No puedo probarlo como twrp no se actualiza a Android 10 y Idk todavía cómo montar partición dinámica con adb shell rooteado en la recuperación)

0 votos

@VatishSharma Lo siento, no he probado con Android 10, así que no puedo decir nada con seguridad.

0 votos

¿Tiene idea de montaje de particiones dinámicas (he hecho twrp y obtener shell adb rooteado pero sí su no actualizado para particiones dinámicas y así carecen de características de montaje)?

1voto

user329626 Puntos 6

Puedes editar el paquete Magisk Root para desactivar SOLO la bandera dm-verity. Es literalmente sólo comentar unas pocas líneas de scripts de Magisk, ya que la funcionalidad está inherentemente presente en Magisk. Aquí está el enlace a dicho paquete: Descargar magisk-onlynoveritypatch.zip Arranca en twrp, instala desde el zip, y selecciona este zip.

0 votos

Gracias por compartirlo. desafortunadamente solo los usuarios registrados pueden descargarlo. y es difícil registrarse porque no hay captcha en español :(

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X