Je vais donner un aperçu général de la façon dont dm-verity
et les choses connexes fonctionnent sur Android d'après mes connaissances limitées. La situation peut varier selon les appareils et les ROMs.
COMMENT LA VERITE DES DM EST-ELLE ASSUREE ?
dm-verity
( Botte vérifiée y AVB ) ainsi que dm-crypt
( FDE ) sont des cibles de device-mapper
du noyau Linux. dm-verity
vérifie l'intégrité de chaque bloc lorsqu'il est lu à partir du périphérique de bloc ; cette vérification est assurée par init_first_stage
selon fs_mgr_flags
défini dans fstab ( 1 ) . Sur système-as-Root les dispositifs ( A/B
y non-A/B
), le noyau est corrigé pour forcer la véracité lors du montage /system
y /vendor
si verify
/ avb
sont trouvés dans l'arbre des périphériques fstab (dtb).
dm-crypt
décrypte/chiffre les données de manière transparente lors de la lecture/écriture depuis/vers le périphérique de bloc. FBE est basé sur un cadre de noyau différent fscrypt
mais les deux sont gérés par vold
(qui fonctionne comme un service natif) si fs_mgr_flags
contiennent voldmanaged
.
OÙ SE TROUVE FSTAB ?
fstab
a traditionnellement été un fichier sous Linux pour spécifier les systèmes de fichiers à monter au démarrage. C'est un composant essentiel de fs_mgr
sur Android.
Sur les versions pré-Oreo fstab
était en ramdisk
. Avec Treble, il a été déplacé vers /vendor
(ou /system/vendor
) alors que les entrées fstab pour system
y vendor
(et odm
) sont déplacés vers le Device Tree Blob ( dtb
). Exportations de noyaux dtb fstab
dans le répertoire de l'arborescence du dispositif à /proc/device-tree/firmware/android
.
Certains équipementiers mettent aussi fstab
en odm
o nvdata
les partitions.
Source : Configuration du dispositif de stockage Android
OÙ EST DTB ?
Arbre des dispositifs est une structure de données pour décrire le matériel qui ne peut pas être découvert par le noyau. Device Tree Source ( dts
) peut être converti en dtb
(blob binaire de DT) et vice versa en utilisant dtc
. DTB est chargé par le chargeur de démarrage au moment du démarrage et transmis au noyau pour qu'il puisse découvrir le matériel et créer des nœuds de périphérique en conséquence.
DTB est l'un ou l'autre :
-
Annexé au noyau zImage
o Image.gz
en boot.img
( 2 ) . Il peut être séparé de gzip
archives utilisant split-appended-dtb (sadtb)
.
-
Ou dans dtbo
partition comme le font certains OEM. Cela peut être vérifié avec :
~# ls -l /dev/block/bootdevice/by-name/dtbo*
~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
-
Ou à la fin de boot.img
après la 2e étape, ou en odm
partition (rare, certains OEM le font).
De même, si l'appareil est non-A/B
, dtb
(de boot.img
et/ou dtbo
) est également ajouté à recovery.img
dans la section DTBO après l'en-tête, le noyau, le disque virtuel et le deuxième étage. ( 3 ) . Cependant, cela n'a pas d'importance pour un démarrage normal. Mais si le périphérique est également system-as-root
Magisk doit être installé sur cette partition de récupération en tant qu'outil de gestion des données. boot.img
ne contient pas ramdisk
( 4 ) .
Dans le cas où DTB n'est pas ajouté au noyau, dtb(s)
sont convertis en dtb.img
en utilisant mkdtimg
. Le même outil peut récupérer l'image.
Source : Mise en œuvre de DTO
COMMENT DÉSAC DÉSAC DÉSAC DÉSACTIVER DM-VÉRITÉ ?
En userdebug
ROMs, dm-verity
peut être désactivé en utilisant adb
. Il modifie le nombre magique du bloc de métadonnées de vérification. ( 5 , 6 ) qui est écrit après le dernier bloc du système de fichiers sur le périphérique de bloc ( system
o vendor
) ( 7 ) . Cité dans aquí :
l'absence de ce chiffre magique interrompra le processus de vérification.
En cas d'AVB, adb
modifie vbmeta header
pour désactiver la vérification des images de hashtree ( 8 , 9 ) . Cité dans aquí :
si le AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLED
est activé dans le vbmeta de premier niveau, alors androidboot.veritymode
est réglé sur désactivé
En user
construit ro.debuggable
es 0
y adbd
ne fonctionne pas comme Root. Il y a aussi d'autres différences comme celle de ALLOW_ADBD_DISABLE_VERITY
donc adb
ne désactivera pas dm-verity
. L'autre approche consiste à supprimer verify
o avb
( 10 ) drapeau de fstab
. Cité dans aquí :
Pour vérifier la partition...
...
Dans le fstab de l'entrée concernée, ajoutez verify
à la fs_mgr
drapeaux.
De même, pour supprimer le cryptage, forceencrypt=
, forcefdeorfbe=
o fileencryption=
doivent être remplacés par encryptable=
. Cependant, le cryptage ne peut pas être supprimé sans réinitialisation d'usine (FBE aussi ?), donc décocher la case Preserve force encryption
dans l'application Magisk ne fera rien.
Certains OEM utilisent également support_scfs
fs_mgr
et ro.config.dmverity=true
sur les appareils avec dm-verity
activé.
Il y a aussi des exploits découvert dans chargeur de démarrage y adb de certains fabricants d'équipements d'origine, qui peut être utilisé pour désactiver dm-verity
sur les appareils concernés. Toutefois, ces failles de sécurité sont généralement corrigées au fil du temps par les mises à jour des équipementiers.
OPTION 1
Définir les options dans le fichier de configuration avant d'installer Magisk :
~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk
Si elle est installée, après avoir décoché Preserve AVB v2.0/dm-verity
dans l'application, Magisk doit être réinstallé. Cité par aquí :
dans Magisk Manager, "Uninstall > Restore Images" pour restaurer les images, cochez la case "Preserve AVB 2.0/dm-verity" dans Advanced Settings, puis réinstallez Magisk via l'application.
OPTION 2
Utilisez quelques dm-verity
disabler zips comme ce .
OPTION 3
Trouvez où le fstab
les entrées de /system
y /vendor
sont sur votre appareil.
Si en ramdisk
(pré-Treble) :
Si en dtb
:
- Si elle est annexée au noyau :
- Extrait
boot.img
- Split annexé
dtb(s)
- Patch
dtb(s)
.
- Ajouter
dtb(s)
au noyau
- Repack
boot.img
- Si en
dtbo
ou dans boot.img
après la 2e étape, patch dtb.img
et réécrire sur la partition ou boot.img
.
Comment décompresser / repacker l'image de démarrage ou de récupération et le Ramdisk ?
Utilisez AIK o magiskboot
.
Comment faire un patch dtb
?
Patch directement en utilisant magiskboot
ou convertir manuellement dtb
a dts
, modifier dts
avec n'importe quel éditeur de texte pour supprimer dm-verity
et convertir dts
retour à dtb
.
RELATED :
0 votes
Pouvez-vous être plus précis sur la cible de votre question, car vous avez généralement déjà patché votre appareil contre dm-verity (Magisk Manager a une case à cocher pour cela) ?
0 votes
J'ai ajouté plus de détails concernant pourquoi je veux faire cela et ce que j'ai essayé.
0 votes
Pourquoi ne pas utiliser
/
à la place de/system_root
?1 votes
@alecxs sur les appareils système en tant que racine, Magisk monte le ramdisk de récupération à
/
, pas la partitionsystème
./
est un système de fichiers volatile.1 votes
@IrfanLatif merci, "récupération" était le morceau manquant! Maintenant cet article a du sens pour moi "Magisk monte le système sur ‘/system_root’ et monte en liens symboliques ‘/system_root/system’ sur ‘/system.’" xda-developers.com/magisk-google-pixel-3-pixel-3a-android-q
2 votes
@alecxs avec Q les choses ont de nouveau changé. Maintenant, la partition
système
sera montée à/
mais les fichiers à modifier / ajouter (par exempleinit
,init.rc
,/sbin
) seront superposés en utilisant des montages de type bind. Dans chaque cas, la cible est d'être sans système et sans détection.0 votes
Je pense que je dois placer le fichier
sepolicy
directement danssystem.img
puis le flasher via la commandefastboot system system.img
. J'ai essayé beaucoup de tutoriels comme celui-ci china-devices.com/forum/index.php?threads/… mais j'obtiens une erreur du type "Format de fichier sparse invalide à l'en-tête magique \n Impossible de lire le fichier sparse". Je pense que tous ces tutoriels sont obsolètes pour les nouvelles images Android. Avez-vous une idée d'un outil qui peut extrairesystem.img
?0 votes
@VatishSharma modifier
system.img
n'est pas difficile mais cela ne change rien. L'appareil ne démarrera pas avecsystem.img
modifié sidm-verity
est activé. Laissez moi écrire une réponse pour vous expliquer ce que vous pouvez essayer pour désactiverdm-verity
.