Il existe des commandes de bas (er) niveau qui peuvent être utilisées dans un shell pour crypter votre partition de données utilisateur. Avertissement / Avertissement: les instructions suivantes effaceront vos données , assurez-vous de faire une sauvegarde si nécessaire.
En suivant ces étapes, vous devriez pouvoir effacer votre partition de données et la chiffrer ensuite (comme pour une réinitialisation d'usine):
- Démarrez votre téléphone normalement (soit la récupération ne fonctionne plus, soit j'ai rencontré un problème différent).
- Assurez-vous que le mode de débogage USB (adb) et l' accès root pour ADB sont activés.
- Entrez un shell racine avec
adb root
suivi de adb shell
.
- Facultatif: surveillez les journaux en appelant
adb logcat
dans un autre shell.
Entrez cette commande, saisissez votre mot de passe et appuyez sur Entrée. Cela définira en fait votre mot de passe. Cette commande lit une ligne d'entrée ( head -1
), supprime la nouvelle ligne de fin de Enter ( tr -d '\n'
) et la convertit en une représentation hexadécimale ( hexdump ...
). Si cela semble effrayant ou si vous n'êtes pas sûr de ce que fait cette commande, voir ci-dessous.
vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
- Si tout se passe bien, votre appareil définira les clés et redémarrera pour terminer le cryptage.
La vdc
commande ci-dessus ("Volume Daemon Client") communiquée avec vold
(Volume Daemon) a quelques sous-commandes comme cryptfs
pour le chiffrement. La enablecrypto
sous-commande a deux modes: wipe
(effacer /data
complètement) et inplace
(soi-disant appliquer le cryptage tout en copiant votre original /data
à l'intérieur du conteneur).
Ensuite, quatre options sont disponibles à partir d'Android 5.0, l'une d'elles est celle password
qui accepte une seule séquence hexadécimale comme clé. Ainsi, si votre mot de passe est foo
, alors la représentation hexadécimale est 666f6f
( f
est 66
en hexadécimal, o
est 6f
, voir http://www.asciitable.com/ ). La commande pour cela est:
vdc cryptfs enablecrypto wipe password 666f6f
Cela a été testé sur un Nexus 5 (nom de code hammerhead, exécutant cm-12.1-20150814) qui a une partition séparée pour stocker les métadonnées. Il est important que la partition userdata ait l' encryptable
indicateur défini suivi du chemin d'accès à une partition ou de la chaîne spéciale footer
. Une ligne (abrégée) de mon /fstab.hammerhead
fichier:
/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., check, encryptable = /dev/block/platform/msm_sdcc.1/by-name/metadata
Lorsque la chaîne spéciale footer
( encryptable=footer
) est présente, 16 Ko à la fin de la partition de données sont utilisés pour stocker les métadonnées de chiffrement.
Pour plus de lecture, voir:
Annexe: extrait de logcat à partir du moment où j'ai exécuté la commande de chiffrement jusqu'à ce qu'elle se termine et redémarre (en omettant les messages graphiques non liés à la fin). Notez que ce Nexus 5 dispose d'une cryptographie accélérée par le matériel (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