Es gibt Befehle auf niedriger (er) Ebene, die in einer Shell zum Verschlüsseln Ihrer Benutzerdatenpartition verwendet werden können. Haftungsausschluss / Warnung: Die folgenden Anweisungen löschen Ihre Daten. Stellen Sie sicher, dass Sie bei Bedarf ein Backup erstellen .
Wenn Sie die folgenden Schritte ausführen, sollten Sie in der Lage sein, Ihre Datenpartition zu löschen und anschließend verschlüsseln zu lassen (ähnlich wie beim Zurücksetzen auf die Werkseinstellungen):
- Starten Sie Ihr Telefon normal (entweder funktioniert die Wiederherstellung nicht mehr oder ich bin auf ein anderes Problem gestoßen).
- Stellen Sie sicher, dass der USB-Debugging-Modus (adb) und der Root-Zugriff für ADB aktiviert sind.
- Geben Sie eine Root-Shell mit
adb root
gefolgt von ein adb shell
.
- Optional: Überwachen Sie Protokolle, indem Sie sie
adb logcat
in einer anderen Shell aufrufen .
Geben Sie diesen Befehl ein, geben Sie Ihr Passwort ein und drücken Sie die Eingabetaste. Dadurch wird Ihr Passwort festgelegt. Dieser Befehl liest eine Zeile von input ( head -1
), entfernt die nachfolgende neue Zeile von Enter ( tr -d '\n'
) und konvertiert sie in eine hexadezimale Darstellung ( hexdump ...
). Wenn es beängstigend aussieht oder Sie nicht sicher sind, was dieser Befehl bewirkt, siehe unten.
vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
- Wenn alles in Ordnung ist, setzt Ihr Gerät die Schlüssel und startet neu, um die Verschlüsselung abzuschließen.
Der obige vdc
Befehl ("Volume Daemon Client"), mit dem vold
(Volume Daemon) kommuniziert wird, enthält einige Unterbefehle wie cryptfs
für die Verschlüsselung. Der enablecrypto
Unterbefehl verfügt über zwei Modi: wipe
( /data
vollständig löschen ) und inplace
(angeblich Verschlüsselung anwenden, während Sie Ihr Original /data
in den Container kopieren ).
Ab Android 5.0 stehen dann vier Optionen zur Verfügung, von password
denen eine eine einzelne hexadezimale Sequenz als Schlüssel akzeptiert. Wenn also Ihr Passwort ist foo
, dann ist die hexadezimale Darstellung ist 666f6f
( f
ist 66
in hex, o
ist 6f
, siehe http://www.asciitable.com/ ). Der Befehl hierfür lautet:
vdc cryptfs enablecrypto wipe password 666f6f
Dies wurde auf einem Nexus 5 (Codename Hammerhead, cm-12.1-20150814) getestet, der über eine separate Partition zum Speichern von Metadaten verfügt. Es ist wichtig, dass für die Benutzerdatenpartition das encryptable
Flag gesetzt ist, gefolgt vom Pfad zu einer Partition oder der speziellen Zeichenfolge footer
. Eine (abgekürzte) Zeile aus meiner /fstab.hammerhead
Datei:
/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., check, encryptable = /dev/block/platform/msm_sdcc.1/by-name/metadata
Wenn die spezielle Zeichenfolge footer
( encryptable=footer
) vorhanden ist, werden 16 KB am Ende der Datenpartition zum Speichern von Verschlüsselungsmetadaten verwendet.
Weitere Informationen finden Sie unter:
Anhang: Logcat-Auszug von dem Moment an, in dem ich den Verschlüsselungsbefehl ausgeführt habe, bis er abgeschlossen ist und neu gestartet wird (wobei am Ende nicht verwandte Grafiknachrichten weggelassen werden). Beachten Sie, dass dieses Nexus 5 über hardwarebeschleunigte Krypto (QSEECom) verfügt.
--------- beginning of main
08-16 12:57:15.459 W/DrmManagerClientImpl(Native)( 2108): DrmManager server died!
08-16 12:57:15.459 I/ServiceManager( 184): service 'drm.drmManager' died
08-16 12:57:15.467 D/Cryptfs ( 186): Just asked init to shut down class main
08-16 12:57:15.470 D/Cryptfs ( 186): unmounting /mnt/shell/emulated succeeded
08-16 12:57:15.599 I/ServiceManager( 184): service 'media.audio_flinger' died
08-16 12:57:15.599 I/ServiceManager( 184): service 'media.player' died
08-16 12:57:15.599 I/ServiceManager( 184): service 'media.camera' died
...
08-16 12:57:16.695 D/Cryptfs ( 186): unmounting /data succeeded
08-16 12:57:16.695 D/QSEECOMAPI: ( 186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.696 D/QSEECOMAPI: ( 186): App is already loaded QSEE and app id = 2
08-16 12:57:16.697 I/Cryptfs ( 186): keymaster version is 3
08-16 12:57:16.697 D/QSEECOMAPI: ( 186): QSEECom_dealloc_memory
08-16 12:57:16.697 D/QSEECOMAPI: ( 186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:16.697 D/QSEECOMAPI: ( 186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.697 D/QSEECOMAPI: ( 186): App is already loaded QSEE and app id = 2
08-16 12:57:18.058 D/QSEECOMAPI: ( 186): QSEECom_dealloc_memory
08-16 12:57:18.058 D/QSEECOMAPI: ( 186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:18.058 I/Cryptfs ( 186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:18.208 D/BootAnimation( 2683): Use save memory method, maybe small fps in actual.
08-16 12:57:18.208 E/QCOM PowerHAL( 2683): Failed to acquire lock.
08-16 12:57:18.691 D/QSEECOMAPI: ( 186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:18.691 D/QSEECOMAPI: ( 186): App is already loaded QSEE and app id = 2
08-16 12:57:18.692 I/Cryptfs ( 186): Signing safely-padded object
08-16 12:57:18.797 D/QSEECOMAPI: ( 186): QSEECom_dealloc_memory
08-16 12:57:18.797 D/QSEECOMAPI: ( 186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:20.056 I/Cryptfs ( 186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:20.690 D/QSEECOMAPI: ( 186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:20.691 D/QSEECOMAPI: ( 186): App is already loaded QSEE and app id = 2
08-16 12:57:20.691 I/Cryptfs ( 186): Signing safely-padded object
08-16 12:57:20.796 D/QSEECOMAPI: ( 186): QSEECom_dealloc_memory
08-16 12:57:20.796 D/QSEECOMAPI: ( 186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:21.429 I/Cryptfs ( 186): Enabling support for allow_discards in dmcrypt.
08-16 12:57:21.429 I/Cryptfs ( 186): load_crypto_mapping_table: target_type = crypt
08-16 12:57:21.429 I/Cryptfs ( 186): load_crypto_mapping_table: real_blk_name = /dev/block/platform/msm_sdcc.1/by-name/userdata, extra_params = 1 allow_discards
08-16 12:57:21.431 I/Cryptfs ( 186): Making empty filesystem with command /system/bin/make_ext4fs -a /data -l 13725837312 /dev/block/dm-0
08-16 12:57:21.447 I/make_ext4fs( 186): SELinux: Loaded file_contexts from /file_contexts
08-16 12:57:21.447 I/make_ext4fs( 186): Creating filesystem with parameters:
08-16 12:57:21.447 I/make_ext4fs( 186): Size: 13725835264
08-16 12:57:21.448 I/make_ext4fs( 186): Block size: 4096
08-16 12:57:21.448 I/make_ext4fs( 186): Blocks per group: 32768
08-16 12:57:21.448 I/make_ext4fs( 186): Inodes per group: 8144
08-16 12:57:21.448 I/make_ext4fs( 186): Inode size: 256
08-16 12:57:21.448 I/make_ext4fs( 186): Journal blocks: 32768
08-16 12:57:21.449 I/make_ext4fs( 186): Label:
08-16 12:57:21.449 I/make_ext4fs( 186): Transparent compression: none
08-16 12:57:21.449 I/make_ext4fs( 186): Blocks: 3351034
08-16 12:57:21.449 I/make_ext4fs( 186): Block groups: 103
08-16 12:57:21.459 I/make_ext4fs( 186): Reserved block group size: 823
08-16 12:57:21.465 I/make_ext4fs( 186): Created filesystem with 11/838832 inodes and 93654/3351034 blocks
08-16 12:57:21.465 I/make_ext4fs( 186): Total files: 0
08-16 12:57:21.465 I/make_ext4fs( 186): Total bytes: 0
08-16 12:57:42.926 D/Cryptfs ( 186): Successfully created filesystem on /dev/block/dm-0