Существуют команды низкого (er) уровня, которые можно использовать в оболочке для шифрования раздела пользовательских данных. Отказ от ответственности / Предупреждение: следующие инструкции уничтожат ваши данные , при необходимости сделайте резервную копию.
После этих шагов, вы должны быть в состоянии уничтожить ваш раздел данных и он зашифрован впоследствии ( по аналогии с возвратом к заводским):
- Загрузите ваш телефон нормально (либо восстановление не работает, либо я столкнулся с другой проблемой).
- Убедитесь, что режим отладки USB (adb) и Root-доступ для ADB включены.
- Введите корневую оболочку с
adb root
последующим adb shell
.
- Необязательно: смотрите логи, вызывая их
adb logcat
в другой оболочке.
Введите эту команду, введите свой пароль и нажмите Enter. Это фактически установит ваш пароль. Эта команда читает одну строку из input ( head -1
), удаляет завершающую новую строку из Enter ( tr -d '\n'
) и преобразует ее в шестнадцатеричное представление ( hexdump ...
). Если это выглядит страшно или вы не уверены, что делает эта команда, см. Ниже.
vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
- Если все в порядке, ваше устройство установит ключи и перезагрузится, чтобы завершить шифрование.
Приведенная выше vdc
команда («Клиент Volume Daemon»), с которой связывается vold
(Volume Daemon), имеет некоторые подкоманды, например, cryptfs
для шифрования. enablecrypto
Субкоманда имеет два режима: wipe
(очистить /data
полностью) и inplace
(предположительно применяя шифрование при копировании оригинала /data
внутри контейнера).
Затем, начиная с Android 5.0, доступны четыре варианта, один из password
которых принимает одну шестнадцатеричную последовательность в качестве ключа. Таким образом , если ваш пароль foo
, то шестнадцатеричное представление 666f6f
( f
находится 66
в шестнадцатеричном, o
это 6f
, см http://www.asciitable.com/ ). Команда для этого:
vdc cryptfs enablecrypto wipe password 666f6f
Это было протестировано на Nexus 5 (кодовое имя молоток, работает cm-12.1-20150814), который имеет отдельный раздел для хранения метаданных. Это важно , что пользовательские данные раздела имеют encryptable
установленный флаг , за которой следует либо пути к разделу или специальной строкой footer
. (Сокращенная) строка из моего /fstab.hammerhead
файла:
/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., проверьте, encryptable = /dev/block/platform/msm_sdcc.1/by-name/metadata
Когда присутствует специальная строка footer
( encryptable=footer
), то 16 КиБ в конце раздела данных используются для хранения метаданных шифрования.
Для дальнейшего чтения смотрите:
Приложение: отрывок из logcat с того момента, как я выполнил команду шифрования, до ее завершения и перезагрузки (в конце исключая несвязанные графические сообщения). Обратите внимание, что этот Nexus 5 имеет аппаратно-ускоренную криптографию (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