Esistono comandi a basso (er) livello che possono essere utilizzati in una shell per crittografare la partizione dati dell'utente. Disclaimer / Avviso: le seguenti istruzioni cancelleranno i tuoi dati , assicurandoti di fare un backup se necessario.
Seguendo questi passaggi, dovresti essere in grado di cancellare la tua partizione dati e di averla successivamente crittografata (simile a un ripristino di fabbrica):
- Avvia il telefono normalmente (o il ripristino non funziona più o ho riscontrato un problema diverso).
- Assicurarsi che la modalità di debug USB (adb) e l' accesso root per ADB siano abilitati.
- Immettere una shell di root con
adb root
seguito da adb shell
.
- Opzionale: guarda i log invocando
adb logcat
in un'altra shell.
Immettere questo comando, digitare la password e premere Invio. Questo effettivamente imposterà la tua password. Questo comando legge una riga di input ( head -1
), rimuove la nuova riga finale da Enter ( tr -d '\n'
) e la converte in una rappresentazione esadecimale ( hexdump ...
). Se sembra spaventoso o non sei sicuro di cosa faccia questo comando, vedi sotto.
vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
- Se tutto va bene, il dispositivo imposterà le chiavi e si riavvierà per completare la crittografia.
Il vdc
comando sopra ("Volume Daemon Client") comunicato con vold
(Volume Daemon) ha alcuni sottocomandi come cryptfs
per la crittografia. Il enablecrypto
sottocomando ha due modalità: wipe
(cancella /data
completamente) e inplace
(presumibilmente applicando la crittografia durante la copia dell'originale /data
all'interno del contenitore).
Quindi, sono disponibili quattro opzioni a partire da Android 5.0, una delle password
quali accetta una singola sequenza esadecimale come chiave. Quindi se la tua password è foo
, allora la rappresentazione esadecimale è 666f6f
( f
è 66
in esadecimale, o
è 6f
, vedi http://www.asciitable.com/ ). Il comando per questo è:
vdc cryptfs enablecrypto wipe password 666f6f
Questo è stato testato su un Nexus 5 (nome in codice hammerhead, in esecuzione cm-12.1-20150814) che ha una partizione separata per la memorizzazione dei metadati. È importante che la partizione userdata abbia il encryptable
flag impostato seguito dal percorso di una partizione o dalla stringa speciale footer
. Una riga (abbreviata) dal mio /fstab.hammerhead
file:
/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., controllo, crittografabile = /dev/block/platform/msm_sdcc.1/by-name/metadata
Quando è presente la stringa speciale footer
( encryptable=footer
), quindi 16 KiB alla fine della partizione dati vengono utilizzati per archiviare i metadati di crittografia.
Per ulteriori letture, vedere:
Appendice: estratto di logcat dal momento in cui ho eseguito il comando di crittografia fino al termine e al riavvio (omettendo alla fine i messaggi grafici non correlati). Nota che questo Nexus 5 ha crittografia con accelerazione hardware (QSEECom).
--------- 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