Існують команди низького рівня (er) рівня, які можна використовувати в оболонці для шифрування розділу користувачів даних. Відмова / попередження: наведені нижче інструкції видалять ваші дані , гарантують, що ви зробите резервну копію, якщо це потрібно.
Після цих кроків, ви повинні бути в змозі знищити ваш розділ даних і він зашифрований згодом ( по аналогії з поверненням до заводських):
- Завантажте телефон нормально (або відновлення більше не працює, або я зіткнувся з іншою проблемою).
- Переконайтеся, що ввімкнено режим налагодження через USB (adb) та кореневий доступ для ADB.
- Введіть кореневу оболонку з
adb root
наступним adb shell
.
- Необов’язково: дивитися журнали, викликаючи
adb logcat
іншу оболонку.
Введіть цю команду, введіть свій пароль і натисніть Enter. Це фактично встановить ваш пароль. Ця команда зчитує один рядок введення ( head -1
), знімає новий рядок від Enter ( tr -d '\n'
) і перетворює його в шістнадцяткове подання ( hexdump ...
). Якщо це виглядає страшно або якщо ви не впевнені, що робить ця команда, дивіться нижче.
vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
- Якщо все піде нормально, ваш пристрій встановить клавіші та перезавантажиться для завершення шифрування.
Наведена вище vdc
команда ("Клієнт об'єму демонів"), що передається 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 (кодова назва hammerhead, працює cm-12.1-20150814), який має окремий розділ для зберігання метаданих. Це важливо , що призначені для користувача дані розділу мають encryptable
встановлений прапор , за якої слід або шляху до розділу або спеціальним рядком footer
. Рядок із мого /fstab.hammerhead
файлу (скорочений) :
/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., check, 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