Доброго времени суток, дорогой читатель! С момента нашей последней встречи прошло более полугода и за это время произошли некоторые новшества для тех, кто увлекается кастомизацией своих устройств под управлением Android.
Это вторая часть из цикла статей о премудростях прошивки и кастомизации. В ней мы разберем, какие стабильные проекты прошивок есть на данный момент, как выбрать и установить систему, не превратив свой девайс в кирпич и как установить необходимые компоненты Google.
Цикл статей
Введение
Выбираем прошивку
Условно прошивки от сторонних разработчиков можно разделить на 2 большие группы:
- Прошивки, разработанные и поддерживаемые одиночными энтузиастами.
- Прошивки, разрабатываемые командой программистов.
У обоих видов прошивок есть свои преимущества и недостатки. Рассмотрим ключевые из них.
Прошивки от энтузиастов
Главное отличие прошивок, разработанных одиночным разработчиком, это отсутствие какой-либо внятной перспективы дальнейшей поддержки. Сегодня желание заниматься есть, завтра — нет. Среди подобных самоделок много плохо оптимизированных систем, зачастую это модификации каких-то сторонних проектов. Изменения Android часто незначительны и не имеют системного характера.
Зашифровано TWRP? Есть простое Решение!
Однако, встречаются и вполне жизнеспособные версии, и, порой, на какой-нибудь забытый всеми, старенький смартфон есть только самопальный порт какого-то более популярного проекта.
Такие авторские прошивки можно найти в темах вашего устройства на XDA и 4pda.
Проекты
Совсем другое дело — командные проекты. Это уже целый коллектив сторонних разработчиков («кураторов»), которые занимаются разработкой сторонней прошивки.
Если перед одиночными разработчиками в основном стоит задача портирования какой-либо существующей прошивки на конкретное устройство, то команда может позволить себе полномасштабную разработку нового функционала, перенося его на гораздо больший спектр устройств.
Самые яркие представители данного типа прошивок у всех на слуху:
- Pixel Experience
- EvolutionX
- crDroid
- Paranoid
- AOSP (чистый Android)
- LineageOS (бывший CyanogenOS)
- ArrowOS
- RessurectionRemix
- и другие
Однозначные плюсы таких проектов — долгосрочная поддержка прошивок, более высокое качество прошивок в целом, оперативное устранение багов, наличие полезного функционала и тематических сообществ.
В общем, одни преимущества, поэтому я однозначно рекомендую в первую очередь ставить именно такие прошивки.
Выделяющиеся представители
Pixel Experience
На самом деле, большая часть отличий между перечисленными выше проектами скрывается «под капотом», однако, есть и сильно выделяющиеся системы, вроде Pixel Experience.
Как нетрудно догадаться, авторы стремились предоставить пользователям смартфонов ощущение от «пилотирования» устройств Pixel. И у них неплохо получилось! На моем устройстве Pixel Experience — единственный способ попробовать Android 13 с его новой системой разрешений раньше других.
Прошивка Xiaomi, Установка ROOT прав, TWRP, настройка NFC, расшифровка DATA, перевод System в RW !
Правда, достигается это ценой накачивания прошивки сервисами Google до отказа, что нельзя отнести к плюсам. Тем не менее, на 4pda это самая популярная прошивка.
crDroid
Эта сборка базируется на LineageOS, но это можно заметить только по системным приложениям. Сбалансированная прошивка, хороший баланс между оптимизацией и возможностями кастомизации. В меню настроек присутсвует отдельная вкладка, которая помогает гибко менять множество настроек, для изменения которых раньше требовались сторонние инструменты.
Отдельно хочу отметить возможность включить альтернативный вид уведомлений, который действительно менее агрессивен и адаптируется к цветой палитре приложения. Имеется шифрование data.
Для меня всю эту идилию испортил неработающий механизм обновлений — на моем устройстве он ломал систему, приходилось ставить каждую версию начисто, повторяя процедуру настройки устройства с нуля.
Не факт, что на других устройствах проблема присутствует.
LineageOS
Проект с большой историей, вдаваться в которую — не тема этой статьи.
Базируется на чистом Android с небольшим добавлением своего функционала. В комплекте чаще всего идет recovery от разработчиков, однако по личному опыту могу сказать, что это скорее опция, чем необходимость. Является основой для некоторых других сборок.
ArrowOS
На мой взгляд, лучшая версия прошивки из представленных. Как заявляют основатели проекта:
ArrowOS is an AOSP based project started with the aim of keeping things simple, clean and neat. We added just the right and mostly used stuff that will be actually USEFUL at the end of the day, aiming to deliver smooth performance with better battery life.
И у них чертовски хорошо получается! Никакого собственного функционала сборка не добавляет, однако уровень оптимизации весьма впечатляет. Ключевой особенностью считаю регулярные обновления, которые без проблем устанавливаются в автоматическом режиме.
Скачивание и установка прошивки
После того, как вы выбрали приглянувшуюся вам прошивку, необходимо ее скачать. Почти всегда это один zip-архив. (в древности иногда приходилось каждый раздел шить отдельно).
Предполагается, что вы прочли первую статью и на данный момент у вас установлен кастомный recovery и отформатирован раздел data и сделаны бэкапы важных данных.
Если вы занимаетесь перепрошивкой своего аппарата, я настоятельно рекомендую иметь в телефоне вместительную и быструю SD-карту, для хранения бекапов и файлов прошивок. Но такая возможность есть не у всех, поэтому рассмотрим вариант установки прошивки с картой памяти в телефоне и без нее.
Обратите внимание: некоторые recovery, вроде CWM не имеют возможности установки прошивки из памяти устройства.
Установка с карты памяти
Самый простой вариант.
Первым делом необходимо закинуть архив с прошивкой на карту памяти телефона, обычно это не вызывает трудностей.
Далее обязательно отформатировать все разделы телефона, за исключением MicroSD, чтобы от старой системы ничего не осталось, после чего установить архив спрошивкой.
В каждом recovery этот процесс выглядит по-разному, но интуитивно понятен.
После окончания процесса установки настоятельно рекомендую еще раз отформатировать раздел Data. На этом всё, перезагружаемся в систему, пользуемся.
Установка без карты памяти
Этот способ чуть сложнее.
Для него нам понадобится компьютер с ADB.
Закидываем архив с прошивкой в папку с adb.exe, называем как-нибудь попроще (я обычно называю update.zip).
На телефоне также необходимо отформатировать все разделы, кроме MicroSD и data, а также включить режим sideload.
В TWRP-based рекавери это делается в разделе Advanced — ADB Sideload.
В CWM присутствует пункт Apply update from ADB.
Эти режимы включают sideload, который ждет, пока на него придет команда установить файл. Подключаем телефон с включенным sideload к компьютеру с помощью USB и пишем в терминале ADB команду
adb sideload update.zip
Где update.zip — название архива с прошивкой.
Начнется точно такой же процесс установки, по окончании которого ваше устройство перезагрузится.
В этом случае, возможен Bootloop. Не пугайтесь, просто зайдите в recovery и снова отформатируйте раздел Data. В большинстве случаев, проблема в шифровании этого раздела.
Я что-то нажал и оно сломалось. Возможные проблемы
Абсолютно не исключено, что что-то пойдёт не так. Хочу вас успокоить — если у вас была возможность разблокировать загрузчик, значит у вас в любом случае будет возможность восстановить родную систему.
Рассмотрим распространенные ситуации которые могут возникнуть из-за неправильного порядка действий/спешки/невнимательности/фазы луны.
Bootloop или вечная загрузка
Первое по популярности состояние смартфона после перепрошивки. BootLoop (циклическая загрузка, дословно), возникает вообще в любых ситуациях, когда система не может нормально запуститься. Выглядит как. Циклическая перезагрузка.
Причин этому может быть множество. Например, на дешевых аппаратах я чаще всего встречал такую проблему из-за аппаратной неисправности памяти. В некоторых случаях это результат манипуляций с системными файлами, вроде Magisk (об этом чуде в следующей статье). Применительно же к нашей ситуации наиболее вероятны два варианта:
- Прошивка изначально мертва (чаще всего авторские) или не для вашей модели телефона.
- Система не может расшифровать раздел Data.
С первым случаем всё ясно, стоит либо проверить совместимость прошивки с вашим аппаратом, либо скачать ту, у которой есть положительные отзывы от пользователей.
На втором случае стоит остановиться подробнее.
С некоторой (уж и не припомню с какой) версии Android в системе по умолчанию включено шифрование данных (раздел Data). И расшифровать его сможет только та система, которая его и зашифровала. Именно поэтому я рекомендую форматировать этот раздел ДО и ПОСЛЕ прошивки, перед первым запуском, поскольку я сталкивался с ситуациями, когда в процессе прошивки раздел Data шифровался и система не могла запуститься.
Обратите внимание, что при первом запуске система загружается немного дольше (в пределах разумного), чем обычно.
Решение простое: форматировать раздел Data через recovery, если не помогло — смотри пункт 1.
System Destroyed
Или похожие страшные надписи с не менее страшными красными значками восклицания/biohazard/nuclear danger.
По сути причины всё те же самые, разница лишь в том, что тут система сама в состоянии сообщить, что она не может запуститься.
Чаще всего связана эта ошибка с несовместимостью/битостью файла прошивки.
Решение — другая прошивка.
Устройство-специфичные проблемы
Так я обозвал проблемы, которые возникают на отдельных устройствах при определенных обстоятельствах.
Например, на моём Xiaomi в один прекрасный момент перестали работать вообще все датчики. С помощью Google я нашел необходимую информацию и файлы и перепрошил раздел persist.
Решение таких проблем необходимо искать на тематических форумах с темами вашего устройства, желательно до того, как они произойдут.
Если ничего не помогает
Если вы достаточно удачливы для того, чтобы ни один из способов решения проблем вам не помог, найдите информацию о том, как с помощью утилиты производителя прошить родную систему. Чаще всего эта информация находится ряд с той, которая научила вас разблокировать загрузчик и зачастую это делается с помощью одной и той же утилиты.
Установка сервисов Google
Лично для меня первой причиной смены прошивки стала непомерная прожорливость родной китайской MIUI, напичканной всяким китайским хламом, который в России бесполезен, а батарею кушает. Да и производительность не радовала глаз.
В падении производительности и продолжительности жизни батареи часто становятся виновны сервисы Google, которые имеют статус системных приложений и родная оболочка никак не может повлиять на их энергопотребление.
Однако, я очень быстро понял, что на «голом» Android жизни тоже не будет — почти все приложения тянут лицензию с помощью Google сервисов, загружают карты, местоположение, синхронизируют контакты, получают уведомления с помощью них же.
Для решения этой проблемы существуют различные «дизайнерские» пакеты GApps, которые представляют собой разные комбинации приложений Google, в зависимости от ваших потребностей.
С вашего позволения, не буду разбирать подробно эту тему, скажу лишь что во времена мамонтов (4.0) для этого был хорош OpenGapps, сейчас мне известен только один актуальный ресурс — NikGapps. На сайте проекта подробно описаны пакеты приложений и что они в себя включают, но поделюсь маленькой хитростью.
На официальном сайте NikGapps есть ссылки на sourceforge репозиторий, где можно найти отдельные приложения от Google (Addons).
Например, мне для полноценной жизни не нужно от гугла практически ничего, кроме собственно его ядра и Ассистента, уж больно мы с ним сблизились.
Поэтому, если вы хотите чистую систему с минимальным присутствием большого брата, будет разумно поставить пакет core, который включает в себя ядро сервисов и аддон Google Search (velvet), который включает в себя приложение Google и Ассистент.
Для первого запуска я также ставлю Device Setup для восстановления настроек с прошлого устройства.
Эти сервисы выглядят абсолютно так же как и прошивки — это архивы, которые прошиваются через recovery. Рекомендую делать это сразу же после установки системы, не включая телефон.
Альтернатива GApps
MircoG
Есть ли жизнь без GApps и постоянного надзора за действиями пользователя? Этим вопросом задавались, похоже, многие люди, поскольку существует такой проект как MicroG. Его цель — заменить закрытые гугловские сервисы открытыми.
На мой субъективный взгляд — проект скорее мертв, чем жив. Многие функции не работают или работают через раз, энергоэффективность так же остается под вопросом. И хотя мне удавалось настроить их на приемлемый уровень, я не стал бы рекомендовать их к использованию.
Huawei Services
Наверняка многие знают, что у Китая с США довольно напряженные отношения и, как следствие, с некоторых пор Америка запретила Китаю доступ к сервисам Google. Но наши предприимчивые соседи не расстроились и соорудили что-то вроде аналогичной экосистемы.
Не скажу, что оно очень уж плохо — российское приложение Mir Pay имеет возможность авторизации через Huawei Services. В остальном же те же яйца, только в профиль.
Заключение
После проделанных операций необходимо запустить смартфон, произвести первичную настройку, вход в аккаунт Google, обновление всех возможных приложений и необходимую кастомизацию.
В этой статье мы узнали, как же вообще выглядит процесс установки прошивки и научились ставить только необходимые компоненты.
В следующей статье я разберу, что такое Root-права, как их получить и как заставить банковские приложения закрывать глаза на всё это безобразие.
Спасибо за прочтение, жду вашу конструктивную критику и пожелания!
Источник: habr.com
Как исправить bootloop или расшифровать /data в TWRP?
Я пытаюсь восстановить данные со стандартного/заводского шифрованного устройства. Samsung Galaxy S7 Edge, застрявшего в загрузке (т.е.: бесконечный перезапуск при при загрузке системы). Используется стоковый ром. Работают только recovery (twrp) и режим загрузки работают.
Мне нужно либо исправить зацикливание, либо расшифровать хотя бы хотя бы раздел данных в twrp (я знаю шаблон блокировки). Примечание: I знаю, что загрузку можно исправить сбросом к заводским настройкам, но это приведет к к потере данных.
Model: SM-G935F Codename: hero2lte Android version: Stock 7.1.x (almost sure) TWRP: 3.2.3-0
Установить
Я следовал руководству adb guide и install guide (только до и включая установку twrp; LineageOS не была установлена).
После установки adb и heimdall на ПК, вот что было сделано на телефоне:
- Войдите в режим загрузки
- heimdall flash —RECOVERY twrp-3.2.3-0-hero2lte.img .
- Перезагрузитесь в recovery
Он продолжал говорить, что не может смонтировать /system или /data, но он **никогда не спрашивает (и до сих пор не спрашивает) пароль шифрования или что-либо еще. Когда при попытке сделать резервную копию nandroid, внутреннее хранилище показало 0 МБ и вышло сообщение об ошибке. не работает.
Загрузка в систему прошла без проблем.
Затем я попробовал установить (LineageOS’) su, чтобы иметь возможность делать резервные копии вещей используя что-то вроде oandbackup или TitaniumBackup:
- Загрузка в recovery
- adb push addonsu-15.1-arm64-signed.zip .
- Установить -> addonsu-15.1-arm64-signed.zip
Я думал, что произойдет одно из следующих событий:
- Запись сработает, и su будет доступен.
- Запись сработает, и стоковый ром проигнорирует ее.
- Запись не сработает, ничего не произойдет
Снова появились ошибки с разделами (до этого момента я думал, что что зашифрован только раздел данные, а не системный).
Я попробовал Reboot -> System, и вот что произошло:
- Устройство застряло (и до сих пор застряло) в петле загрузки.
Поэтому я попробовал использовать LineageOS’ su-removal:
- Загрузитесь в recovery
- adb push addonsu-remove-15.1-arm64-signed.zip
- Install -> addonsu-remove-15.1-arm64-signed.zip
Тем не менее, кажется, что ничего не изменилось. Экранный журнал TWRP:
Could not mount /data and unable to find crypto footer. Failed to mount ‘/data’ (Invalid argument) Updating partition details. Failed to mount /data (Invaild argument) . done Unable to mount storage Failed to mount /data (Invaild argument) Full SELinux support is present. Unable to mount /data/media/TWRP/.twrps MTP Enabled
Если посмотреть на /cache/recovery/log , он не показывает /system как пустой:
/system | /dev/block/sda14 | Size: 4132MB Used: 3987MB Free: 145MB Backup Size: 3987MB Flags: Can_Be_Mounted Can_Be_Wiped Can_Be_Backed_Up Wipe_Available_in_GUI IsPresent Mount_Read_Only Primary_Block_Device: /dev/block/sda14 Display_Name: System Storage_Name: System Backup_Path: /system Backup_Name: system Backup_Display_Name: System Storage_Path: /system Current_File_System: ext4 Fstab_File_System: ext4 Backup_Method: files /data | /dev/block/sda18 | Size: 0MB Used: 0MB Free: 0MB Backup Size: 0MB Flags: Can_Be_Mounted Can_Be_Wiped Can_Be_Backed_Up Wipe_During_Factory_Reset Wipe_Available_in_GUI IsPresent Can_Be_Encrypted Has_Data_Media Can_Encrypt_Backup Use_Userdata_Encryption Is_Storage Is_Settings_Storage Symlink_Path: /data/media Symlink_Mount_Point: /sdcard Primary_Block_Device: /dev/block/sda18 Length: -20480 Display_Name: Data Storage_Name: Internal Storage Backup_Path: /data Backup_Name: data Backup_Display_Name: Data Storage_Path: /data/media Current_File_System: ext4 Fstab_File_System: ext4 Backup_Method: files MTP_Storage_ID: 65537
Но он ничего не показывает при попытке доступа к нему:
~ # ls -lah /system __bionic_open_tzdata: couldn’t find any tzdata when looking for localtime! __bionic_open_tzdata: couldn’t find any tzdata when looking for GMT! __bionic_open_tzdata: couldn’t find any tzdata when looking for posixrules! drwxr-xr-x 2 root root 40 Jan 1 1970 . drwxrwxrwt 24 root root 840 Sep 10 02:15 ..
Также в /cache/recovery/log :
I:Done processing fstab files I:Setting up ‘/data’ as data/media emulated storage. I:Created ‘/sdcard’ folder. I:Can’t probe device /dev/block/sda18 I:Unable to mount ‘/data’ I:Actual block device: ‘/dev/block/sda18’, current file system: ‘ext4’ I:Can’t probe device /dev/block/sda18 I:Unable to mount ‘/data’ I:Actual block device: ‘/dev/block/sda18’, current file system: ‘ext4’ get_crypt_ftr_info crypto key location: ‘footer’ Bad magic for real block device /dev/block/sda18 Could not mount /data and unable to find crypto footer. I:Setting up ‘/data’ as data/media emulated storage. I:Can’t probe device /dev/block/sda18 I:Unable to mount ‘/data’ # .
Вопросы:
- Если он даже не смог смонтировать раздел, как он стал soft bricked?
- Пишет ли «Install» что-нибудь еще где-нибудь (за исключением записей журнала и т.д.)?
- Может ли он на самом деле перезаписать/повредить раздел (или непосредственно блочное устройство). даже если он не может его смонтировать?
- Есть ли способ отладить цикл загрузки?
- Как можно исправить зацикливание?
Расшифровка
Поэтому я попробовал расшифровать разделы данных, чтобы посмотреть, смогу ли я хотя бы получить к ним доступ из twrp, используя эти шаги.
Получилась следующая картина:
[_ 1 6] [2 7 5] [3 4 _]
Это означает, что код, который использует twrp (от 1 до 9), должен быть таким: 2478635. Поэтому я попробовал:
~ # twrp decrypt 2478635 Attempting to decrypt data partition via command line. Failed to decrypt data.
Я также попробовал использовать «родной» код (от 0 до 8), безрезультатно:
~ # twrp decrypt 1367524 Attempting to decrypt data partition via command line. Failed to decrypt data.
~ # ls -l /dev/block/platform/155a0000.ufs/by-name/ __bionic_open_tzdata: couldn’t find any tzdata when looking for localtime! __bionic_open_tzdata: couldn’t find any tzdata when looking for GMT! __bionic_open_tzdata: couldn’t find any tzdata when looking for posixrules! lrwxrwxrwx 1 root root 15 Sep 10 02:15 BOOT -> /dev/block/sda5 lrwxrwxrwx 1 root root 15 Sep 10 02:15 BOTA0 -> /dev/block/sda1 lrwxrwxrwx 1 root root 15 Sep 10 02:15 BOTA1 -> /dev/block/sda2 lrwxrwxrwx 1 root root 16 Sep 10 02:15 CACHE -> /dev/block/sda15 lrwxrwxrwx 1 root root 15 Sep 10 02:15 CPEFS -> /dev/block/sdd1 lrwxrwxrwx 1 root root 16 Sep 10 02:15 CP_DEBUG -> /dev/block/sda17 lrwxrwxrwx 1 root root 16 Sep 10 02:15 DNT -> /dev/block/sda10 lrwxrwxrwx 1 root root 15 Sep 10 02:15 EFS -> /dev/block/sda3 lrwxrwxrwx 1 root root 16 Sep 10 02:15 HIDDEN -> /dev/block/sda16 lrwxrwxrwx 1 root root 15 Sep 10 02:15 OTA -> /dev/block/sda7 lrwxrwxrwx 1 root root 15 Sep 10 02:15 PARAM -> /dev/block/sda4 lrwxrwxrwx 1 root root 16 Sep 10 02:15 PERSDATA -> /dev/block/sda13 lrwxrwxrwx 1 root root 16 Sep 10 02:15 PERSISTENT -> /dev/block/sda11 lrwxrwxrwx 1 root root 15 Sep 10 02:15 RADIO -> /dev/block/sda8 lrwxrwxrwx 1 root root 15 Sep 10 02:15 RECOVERY -> /dev/block/sda6 lrwxrwxrwx 1 root root 16 Sep 10 02:15 STEADY -> /dev/block/sda12 lrwxrwxrwx 1 root root 16 Sep 10 02:15 SYSTEM -> /dev/block/sda14 lrwxrwxrwx 1 root root 15 Sep 10 02:15 TOMBSTONES -> /dev/block/sda9 lrwxrwxrwx 1 root root 16 Sep 10 02:15 USERDATA -> /dev/block/sda18
Показывает, что sda14 — это системный раздел, а sda18 — это данные. раздел. Поэтому мне удалось вытащить /dev/block/sda14 и /dev/block/sda18 :
adb pull /dev/block/sda14 sda14.img # . adb pull /dev/block/sda18 sda18.img /dev/block/sda18: 1 file pulled. 3.7 MB/s (26843545600 bytes in 6961.803s)
Я проверил, что SHA-1 хэши блочного устройства и .img совпадают, но но я в растерянности, как расшифровать их на компьютере.
Вопрос:
Как я могу расшифровать их на Android/Linux/Windows?
Примечание: Если это слишком специфично для этого сайта, пожалуйста, прокомментируйте, где находится соответствующий подходящий форум. Я знаю о специфическом для телефонов xda, но это кажется слишком общим. Любая помощь будет принята с благодарностью.
5 2018-09-10T19:55:57+00:00 0
backup — Mount Android encrypted data partition on PC — Android Enthusiasts Stack Exchange
My Nexus 4 screen met a tragic end due to violent contact with flooring tiles. Everything works except the touchscreen (which displays fine but does not react to touch any more).I would like to g.
android.stackexchange.com
Using ADB and fastboot | LineageOS Wiki
wiki.lineageos.org
Install LineageOS on hero2lte | LineageOS Wiki
wiki.lineageos.org
Command to list partitions? — Android Enthusiasts Stack Exchange
I want to list the partitions on my phone — system, boot, recovery etc. What terminal command should I use? The mount command just lists mount points.
Источник: kzen.dev
Шифрование Android. Можно ли извлечь данные из шифрованного раздела.
Если при работе в Explorer (в eMMC Tool Shuite) наблюдается такая картина:
Mount [system] successfully PartType: LINUX
Mount [cache] successfully PartType: LINUX
Mount [persist] successfully PartType: LINUX
Mount [cust] successfully PartType: LINUX
Mount [userdata] SKIPPED PartType: Full Disk Encryption
Mount [data] SKIPPED PartType: Full Disk Encryption
Mount [storage/sdcard1] SKIPPED PartType: Full Disk Encryption
Это означает, что раздел пользовательских данных зашифрован .
eMMC File Manager выводит такую информацию:
Warning! Partition #46 [USERDATA] Is ENCRYPTED!
Rev: 1.3
Key Size: 16 bytes
Algo: aes-xts essiv:sha256
MKey: 0x40203A849FA58DAFAE95ED1E81EC9C32
Salt: 0x6D7C5B1F84B51F2A657FEAB2865C5324
На текущий момент данные из такого раздела извлечь практически невозможно прямым считыванием раздела из eMMC.
Если плата повреждена и на ней исправны процессор и eMMC, то единственный вариант извлечь данные — перепаять процессор и eMMC в рабочий аппарат, включить его, ввести пароль пользователя и получить доступ к данным.
Если говорить коротко о шифровании, то раздел /data шифруется 128битным ключом (16 байт) по алгоритму SHA256 (точнее одной из его разновидности). В данном случае идет речь о FDE (Full Disk Encryption) (полнодисковое шифрование).
1) Первое включение:
При первом включении (также после «wipe data») устройство с предустановленной ОС Android 5.0 и выше генерирует псевдослучайный 128-разрядный ключ. Его называют мастер-ключом (Master Key) или DEK (Device Encryption Key) . Помимо DEK, также генерируется еще одно псевдослучайное 128-битное число Salt (соль), а пользователя просят ввести пароль (если пользователь пароль не вводит, а ОС шифрование /data включает, то ОС использует какой-то свой пароль, на знании этого пароля основано получение доступа к /data в Xiaomi через TWRP).
Далее ОС Android рассчитывает промежуточный ключ (IK1), затем к нему примешивает Hardware-Bound private Key (HBK) (индивидуальный ключ процессора), рассчитывает IK2, IK3 и создает Encrypted Master Key (используя KEK, IV (части IK3)), т.е. зашифрованный Master Key (DEK) с помощью пароля пользователя.
Encrypted Master Key и Salt сохраняются в так называемом «Хранилище ключей» (Crypto Footer), которое располагается либо в в самом процессоре (в более новых процессорах), либо в конце зашифрованного раздела userdata (31 сектор от конца).
Все данные на пользовательском разделе /data в конечном счете шифруются именно с помощью DEK . Как именно выглядит этот ключ, владелец устройства не знает, он никогда не вводит его и даже не может считать штатными средствами. Созданием DEK, а также проверкой валидности ключей занимается модуль «KeyMaster», работающий в так называемой «Trusted Execution Environment (TEE)» процессора, за пределы которой не должен выйти ключ шифрования DEK.
2) Включение аппарата при наличии зашифрованного раздела:
Для расшифровки данных, когда пользователь вводит свой пароль (или при его отсутствии используется «дефолтный» пароль), ОС Android получает Salt из «Хранилища ключей» (Crypto Footer), рассчитывает с помощью него промежуточный ключ (IK1), затем с помощью Hardware-Bound private Key (HBK) (индивидуальный ключ процессора), рассчитывает IK2, IK3 и оправляет полученный результат (KEK, IV) для попытки рассчитать DEK в модуль «KeyMaster», который также использует Encrypted Master Key из «Хранилища ключей» (Crypto Footer). Если пароль пользователя верный, то полученный DEK используется для раскодирования раздела /data.
Для того, чтобы пользователь мог сменить свой пароль без перешифрования всего раздела, используется ключ, называемый Encrypted Master Key, т.е. Master Key (DEK), зашифрованный с помощью пароля пользователя. Если аппарат включен, пароль пользователя введен, и данные расшифрованы с помощью DEK, то возможно создание нового Encrypted Master Key, который сохраняется вместо предыдущего в хранилище ключей (Crypto Footer).
3) Невозможность расшифровать раздел данных:
а) при вводе неверного пароля;
б) замена процессора (с другим Hardware-Bound private Key (HBK));
с) замена процессора (с другим Hardware-Bound private Key (HBK) и другим содержимым «Хранилища ключей» (Crypto Footer)).
В этих случаях модуль «KeyMaster» получает не соответствующий зашифрованным данным DEK, и расшифровка раздела данных не предоставляется возможным.
Кому интересно узнать больше, рекомендую статьи:
Источник: gsmforum.ru