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 rootseguito da adb shell.
- Opzionale: guarda i log invocando
adb logcatin 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 vdccomando sopra ("Volume Daemon Client") comunicato con vold(Volume Daemon) ha alcuni sottocomandi come cryptfsper la crittografia. Il enablecryptosottocomando ha due modalità: wipe(cancella /datacompletamente) e inplace(presumibilmente applicando la crittografia durante la copia dell'originale /dataall'interno del contenitore).
Quindi, sono disponibili quattro opzioni a partire da Android 5.0, una delle passwordquali accetta una singola sequenza esadecimale come chiave. Quindi se la tua password è foo, allora la rappresentazione esadecimale è 666f6f( fè 66in 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 encryptableflag impostato seguito dal percorso di una partizione o dalla stringa speciale footer. Una riga (abbreviata) dal mio /fstab.hammerheadfile:
/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