Существуют команды низкого (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
Для меня оригинальный ответ не сработал, как ожидалось. Выглядело, как будто оно успешно зашифровано, но пользовательский интерфейс вернулся очень быстро, и настройка «Шифрование» не показала, что устройства были зашифрованы. Затем я применил команды, приведенные в обновлении , но они все еще не работали. Затем я уменьшил размер раздела данных, и он успешно зашифрован. Т.е.
mount | grep data
найти фактическое блочное устройство раздела данных. Давайте предположим, что это так/dev/block/mmcblk0p26
.umount /data
для работы ext-tools.e2fsck -f -p /dev/block/mmcblk0p26
чтобы не столкнуться с неприятностями для предстоящего изменения размера.tune2fs -l /dev/block/mmcblk0p26
чтобы получить количество блоков. Давайте предположим, что это так3057395
.resize2fs /dev/block/mmcblk0p26 3057375
т.е. вычесть достаточное количество, например 20, из исходного числа блоков.e2fsck -f -p /dev/block/mmcblk0p26
нашел неправильно размещенный инод для меня.Мне также нужно было смонтировать
/system
раздел, чтобы заполучитьresize2fs
. В моей системе этот двоичный файл был связан с 64-битной версией libc, но TWRP, который я использовал, похоже, этого не обеспечивал. Поэтому мне нужно было добавить префикс к командамenv LD_LIBRARY_PATH=/system/lib64
.источник
Не На CM12.1 2015-10-15 ответ на Lekensteyn больше не работает.
Видимо mkfs.f2fs , который нужен для создания файловой системы, был перемещен из
/system/bin/
в/sbin/
Также мы должны бороться с SELINUX. Это означает, что нам нужно сделать несколько дополнительных шагов:
источник
Очередное обновление - сборка CM13 9 января 2016 года с использованием телефона Nubia Z7 Max, NX505J
Эта команда (
ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
) больше не нужна, так как файл снова находится здесь. Нет необходимости создавать символическую ссылку.Эта команда больше не должна быть в HEX, и если вы введете hex, ваш PW будет hex.
cryptfs enablecrypto wipe password 666f6f
- Это буквально создало пароль для меня666f6f
неfoo
Я все еще исследую эту проблему, потому что я преодолел дополнительные блоки, необходимые для метаданных. Теперь мне нужно обойти тот факт, что GUI и ручные команды для шифрования приводят к шифрованию, которое является жизнеспособным только в течение одного цикла загрузки. Я сообщу, когда у меня будет успешное шифрование.
Прямо сейчас я шифрую, и он работает нормально, и я загружаюсь в первый раз, и это говорит, что телефон зашифрован. Используя TWRP, я могу подтвердить / данные зашифрованы, но пароли HEX и ASCI, которые я пробую в TWRP, не работают. При следующей перезагрузке ОС Android не может полностью загрузить CM13. Это подтверждает, что у меня правильный пароль шифрования, и тогда я получаю только 1 зашифрованную загрузку. После первого успешного зашифрованного запуска после этого он блокируется на этапе анимации цикла загрузки. Рекомендации по безопасности теперь рекомендуют шифрование телефона AES256.
источник
Имея Moto X 2013 с Cyanogenmod 12.1, я также не смог зашифровать его. Наконец, мне это удалось:
su
и подтвердите root-доступsetenforce 0
Я пришел к этому решению, объединив ответ Арта и эту ветку форума .
источник
После 6 часов психической боли и пота я, возможно, наткнулся на решение, которое сработало для меня. И это тоже был несчастный случай. Я сделал это для Samsung S4 Mini с CyanogenMod 13.0 и Android 6.0.1. Важным ключевым фактором здесь является то, что я запустил его с чистого телефона (свежей прошивки и без рута), потому что, когда телефон был ранее рутирован, то телефон вообще не хотел работать.
Я использовал решение Firelord и Lekensteyn для решения этой проблемы, но мне удалось забыть одну строку из команд.
Вот как я это сделал:
Я включил отладку Android и рут-доступ к ADB только в Настройках разработчика .
В командной строке ADB я использовал команду
adb root
andadb shell
. После этого я открыл другую командную строку ADB и использовалadb logcat
команду.В первой оболочке ADB я пошел вперед
setenforce 0
и после этогоvdc cryptfs enablecrypto wipe password YOUR-PASSWORD
.ВАЖНОЕ ЗАМЕЧАНИЕ. Команда пароля может отличаться в зависимости от используемой версии Android. Если вы используете Android 5.X , вы должны использовать шестнадцатеричную систему (в строке Chr - символ вашего пароля, шестнадцатеричное значение находится в строке Hx). Если вы используете Android 6.X , то ваш пароль будет тем паролем, который вы ввели там.
Как вы заметили, я забыл использовать
mount -oremount,rw /system
команду. После этого у меня экран станет черным. Когда я увидел, что оболочка ADB с журналом остановилась и закончилась, то перезагрузил телефон. Но, как и у всех, проблема в том, что CyanogenMod не загружается. И мне удалось довольно легко это исправить:Там вы идете, это должно работать. Сначала, когда настроится телефон, подождите минутку. Для мастера установки может произойти небольшой сбой, если вы поспешите выполнить его слишком быстро, но он автоматически перезагрузится при сбое.
Из моих очень небольших знаний о том, как работает CyanogenMod и Android Encryption, я думаю, что во время форматирования он удаляет некоторые важные файлы Cyanogen или Android, что мешает его загрузке.
источник
На моем телефоне не работает шифрование (SGS5; CM13, TWRP 3.0.2-2) - у меня всегда черный экран.
Я не хотел использовать команды оболочки, поэтому я нашел другой способ:
У меня был установлен SuperSU, я удалил его в приложении, а затем высветил SU-Remover .
После этого я смог использовать шифрование из меню.
Предупреждение:
источник