Wie deaktiviere ich dm-verity auf Android mit Build-Typ-ROM vom Typ "Benutzer"?

Ich habe ein One Plus 6T Android-Gerät mit einem ROM des Build-Typs user. dm-verityDieses Gerät ist mit Magisk gerootet und ich möchte es auf diesem Gerät deaktivieren . Ich habe versucht zu laufen, adb disable-verityaber ich habe eine Fehlermeldung erhaltenverity cannot be disabled/enabled - USER build

Gibt es eine Möglichkeit, dies zu deaktivieren?

sepolicyZiel: Sie möchten eine benutzerdefinierte Datei im Verzeichnis platzieren system_root. Ich habe es mit folgenden Befehlen versucht:

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 encryptionEs wurde auch versucht, das Kontrollkästchen zu deaktivieren Preserve AVB 2.0/dm-verity, aber die obigen Befehle haben immer noch das gleiche Ergebnis. Auch beim Neustart werden diese Kontrollkästchen automatisch wieder aktiviert.

Können Sie bitte genauer sagen, worauf Ihre Frage abzielt, da Sie Ihr Gerät normalerweise bereits gegen dm-verity gepatcht haben (Magisk Manager hat ein Kontrollkästchen für)?
Ich habe mehr Details darüber hinzugefügt, warum ich dies tun möchte und was ich versucht habe.
/warum nicht statt verwenden /system_root?
@alecxs auf System-als-Root-Geräten Magisk mountet die Wiederherstellungs-Ramdisk auf /, nicht systemauf Partition. /ist ein flüchtiges Dateisystem.
@IrfanLatif danke, "Erholung" war das fehlende Stück! Jetzt macht dieser Artikel für mich Sinn: „Magisk mountet das System an ‚/system_root‘ und bindet mount ‚/system_root/system‘ an ‚/system‘. " xda-developers.com/magisk-google-pixel-3-pixel-3a-android-q
@alecxs mit Q hat sich wieder was geändert. Jetzt systemwird die Partition angehängt, /aber die zu ändernden/hinzuzufügenden Dateien (z. B. init, init.rc, /sbin) werden mithilfe von Bind-Mounts überlagert. In jedem Fall soll das Ziel systemlos und erkennungslos sein .
Ich denke, ich muss sepolicydie Datei direkt platzieren system.imgund dann per Befehl flashen fastboot system system.img. Ich habe viele Tutorials wie china-devices.com/forum/index.php?threads/… ausprobiert , aber ich erhalte eine Fehlermeldung wie „Ungültiges Sparse-Dateiformat bei Header Magi \n Fehler beim Lesen der Sparse-Datei“. Ich denke, dass alle Tutorials für neue Android-Images veraltet sind. Habt ihr eine Ahnung von einem Tool, das extrahieren kann system.img?
@VatishSharma zu modifizieren system.imgist keine große Sache, aber es macht keinen Unterschied. Das Gerät startet nicht mit geändertem, system.imgwenn dm-verityaktiviert ist. Lassen Sie mich Ihnen antworten, was Sie versuchen können, zu deaktivieren dm-verity.

Antworten (2)

Ich werde einen allgemeinen Überblick darüber geben, wie dm-verityund verwandte Dinge auf Android funktionieren, entsprechend meinem begrenzten Wissen. Die Situation kann auf verschiedenen Geräten und ROMs unterschiedlich sein.

WIE WIRD DM-VERITY DURCHGESETZT?

dm-verity( Verified Boot und AVB ) sowie dm-crypt( FDE ) sind Ziele von device-mapperFunktionen des Linux-Kernels. dm-verityverifiziert die Integrität jedes Blocks, wenn sie vom Blockgerät gelesen werden; erzwungen durch init_first_stagegemäß fs_mgr_flagsSatz in fstab ( 1 ) . Auf System-als-Root- Geräten ( A/Bund non-A/B) wird der Kernel gepatcht , um während des Mountens Verity zu erzwingen /system, und /vendorwenn verify/ avb-Flags im fstab-Gerätebaum (dtb) gefunden werden.
dm-cryptentschlüsselt/verschlüsselt Daten transparent beim Lesen/Schreiben von/auf Blockgerät. FBE basiert auf einem anderen Kernel-Frameworkfscrypt; aber beide werden verwaltet von vold(der als nativer Dienst ausgeführt wird), wenn fs_mgr_flagsenthalten voldmanaged.

WO IST FSTAB?

fstabist traditionell eine Datei unter Linux, um Dateisysteme anzugeben, die beim Booten gemountet werden sollen. Es ist eine Kernkomponente der fs_mgrFunktionalität von Android.

Bei Veröffentlichungen vor Oreo fstabwar in ramdisk. /vendorMit Treble wurde es nach (oder ) verschoben /system/vendor, während die fstab-Einträge für systemund vendor(und odm) nach Device Tree Blob ( dtb) verschoben wurden. Der Kernel exportiert dtb fstabEinträge im Gerätebaumverzeichnis unter /proc/device-tree/firmware/android.

Einige OEMs setzen auch oder Partitionen fstabein .odmnvdata

Quelle: Konfiguration des Android-Speichergeräts

WO IST DTB?

Der Gerätebaum ist eine Datenstruktur zum Beschreiben von Hardware, die für den Kernel nicht erkennbar ist. Device Tree Source ( dts) kann in (binäres Blob von DT) konvertiert werden dtbund umgekehrt mit dtc. DTB wird beim Booten vom Bootloader geladen und an den Kernel übergeben, damit dieser Hardware erkennen und entsprechende Geräteknoten erstellen kann.

DTB ist entweder:

  • Angehängt an Kernel zImageoder Image.gzin boot.img ( 2 ) . Es kann gzipmit vom Archiv getrennt werden split-appended-dtb (sadtb).
  • Oder in dtboPartition, wie es einige OEMs tun. Dies kann überprüft werden mit:

    ~# ls -l /dev/block/bootdevice/by-name/dtbo*
    ~# grep -C5 PARTNAME=dtbo /sys/dev/block/*/uevent | grep DEVNAME | sed 's/.*=//; s|^|/dev/block/&|'
    
  • Oder am Ende boot.imgnach der 2. Stufe oder in odmder Partition (selten, einige OEMs tun dies).

Auch wenn das Gerät non-A/B, dtb(von boot.imgund/oder Partition) ist, wird es auch im DTBO-Abschnitt nach Header, Kernel, Ramdisk und 2nd Stage ( 3 )dtbo hinzugefügt . Dies spielt jedoch keine Rolle beim normalen Booten. Aber wenn das Gerät auch ist , muss Magisk in dieser Wiederherstellungspartition installiert werden, da die keine ( 4 ) enthält .recovery.imgsystem-as-rootboot.imgramdisk

Falls DTB nicht an den Kernel angehängt wird, dtb(s)werden sie in dtb.imgdie Verwendung von mkdtimg. Dasselbe Tool kann das Bild zurückgeben.

Quelle: Implementieren von DTO

WIE DEAKTIVIERE ICH DM-VERITY?

Kann auf userdebugROMs dm-veritymit deaktiviert werden adb. Es ändert die magische Zahl des Verity-Metadatenblocks ( 5 , 6 ) , der nach dem letzten Dateisystemblock auf dem Blockgerät ( systemoder vendor) ( 7 ) geschrieben wird . Zitat von hier :

Das Fehlen dieser magischen Zahl stoppt den Verifizierungsprozess

Im Fall von AVB adbwerden Änderungen vorgenommen , vbmeta headerum die Überprüfung von Hashtree-Bildern zu deaktivieren ( 8 , 9 ) . Zitat von hier :

wenn das AVB_VBMETA_IMAGE_FLAGS_HASHTREE_DISABLEDFlag in der vbmeta der obersten Ebene gesetzt ist, androidboot.veritymodewird es auf deaktiviert gesetzt

On userbuilds ro.debuggablewird 0und adbdwird nicht als root ausgeführt. Es gibt auch andere Unterschiede wie den von ALLOW_ADBD_DISABLE_VERITY, also adbwird nicht deaktiviert dm-verity. Ein anderer Ansatz besteht darin , das Flag verifyor ( 10 ) aus zu entfernen . Zitat von hier :avb fstab

Um die Partition zu überprüfen...
...
in der fstab für den entsprechenden Eintrag verifydie fs_mgrFlags ergänzen.

Um die Verschlüsselung zu entfernen, müssen forceencrypt=, forcefdeorfbe=oder fileencryption=durch ersetzt werden encryptable=. Die Verschlüsselung kann jedoch nicht ohne Zurücksetzen auf die Werkseinstellungen entfernt werden (auch FBE?), sodass das Deaktivieren Preserve force encryptionder Magisk-App nichts bewirkt.

Einige OEMs verwenden Flags und Eigenschaften auch auf Geräten mit aktiviertem.support_scfs fs_mgrro.config.dmverity=truedm-verity

Es wurden auch einige Exploits in der Bootloader- und ADB- Implementierung einiger OEMs entdeckt, die zum Deaktivieren dm-verityauf betroffenen Geräten verwendet werden können. Solche Sicherheitslücken werden jedoch normalerweise im Laufe der Zeit durch Updates von OEMs behoben.

OPTION 1
Legen Sie Optionen in der Konfigurationsdatei fest, bevor Sie Magisk installieren:

~# echo 'KEEPVERITY=false' >/cache/.magisk
~# echo 'KEEPFORCEENCRYPT=true' >>/cache/.magisk

Falls installiert, Preserve AVB v2.0/dm-veritymuss Magisk nach dem Deaktivieren der App neu installiert werden. Zitat von hier :

in Magisk Manager „Deinstallieren > Bilder wiederherstellen“, um die Bilder wiederherzustellen, aktivieren Sie das Kontrollkästchen „AVB 2.0/dm-verity beibehalten“ in den erweiterten Einstellungen und installieren Sie dann Magisk über die App neu.

OPTION 2
Verwenden Sie einige dm-verityDisabler-Reißverschlüsse wie diesen .

OPTION 3
Finden Sie heraus, wo sich die fstabEinträge von /systemund /vendorauf Ihrem Gerät befinden.

Wenn in ramdisk(vor Höhen):

  • Extrahieren ramdisk, modifizieren fstabund neu packen.
  • ramdiskOder direkt patchen :

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

Wenn im dtb:

  • Wenn an den Kernel angehängt:
    • Extraktboot.img
    • Teilung angehängtdtb(s)
    • Patch dtb(s).
    • dtb(s)An Kernel anhängen
    • Umpackenboot.img
  • Wenn in dtboder Partition oder boot.imgnach der 2. Stufe, patchen dtb.imgund zurück in die Partition oder schreiben boot.img.

Wie werden Boot- oder Recovery-Image und Ramdisk entpackt / neu gepackt?
Verwenden Sie AIK oder magiskboot.

Wie wird gepatcht dtb?
Patchen Sie direkt mit magiskbootoder konvertieren Sie sie manuell dtbin dts, bearbeiten Sie sie dtsmit einem beliebigen Texteditor, um dm-verityMarkierungen zu entfernen, und konvertieren Sie sie dtswieder in dtb.

VERWANDT:

In SAR-Geräten, die mit Android 10 gestartet wurden, habe ich einen Kernel erstellt, bei dem avb-Flags (kein Verity-Flag gefunden) aus fsmgr_flags-Einträgen entfernt und permissiv gemacht wurden. Leeren Sie auch das vbmeta mit deaktiviertem Überprüfungs-Flag. Reicht es, wenn eine dm-Verity deaktiviert wird? (Ich kann es nicht testen, da twrp noch nicht auf Android 10 und Idk aktualisiert ist, wie man eine dynamische Partition mit gerooteter Adb-Shell in der Wiederherstellung einbindet.)
@VatishSharma Tut mir leid, ich habe es nicht mit Android 10 getestet, kann also nichts mit Sicherheit sagen.
Haben Sie eine Idee, dynamische Partitionen zu mounten (ich habe twrp erstellt und eine gerootete Adb-Shell erhalten, aber ja, es ist nicht für dynamische Partitionen aktualisiert und es fehlen daher Mount-Funktionen)?
@VatishSharma keine Ahnung.

Sie können das Magisk-Stammpaket einfach bearbeiten, um NUR das dm-verity-Flag zu deaktivieren. Es werden buchstäblich nur ein paar Zeilen von Magisk-Skripten auskommentiert, da die Funktionalität in Magisk von Natur aus vorhanden ist. Hier ist der Link zu einem solchen Paket: Download magisk-onlynoveritypatch.zip Booten Sie in twrp, installieren Sie von zip und wählen Sie dieses zip aus.

thx fürs teilen. Leider können nur registrierte Benutzer herunterladen. und es ist schwer sich zu registrieren, weil es kein englisches captcha gibt :(