суббота, 17 сентября 2016 г.

Android M. SD-карта, как внутренняя память (Adopted Storage). Как прочитать на ПК?

В этом небольшом посте (все равно не спится) я постараюсь рассмотреть довольно интересную тему о том как можно получить доступ к данным находящимся на SD-карте, которая была использована как внутренняя память (adopted storage) на устройстве с Android 6.0 Masrhmallow на ПК без подключения к самому смартфону. Например, в случае когда он был поврежден или утерян. На самом деле это не представляет особенных сложностей, при соблюдении ряда условий: вы должны предварительно сохранить ключ шифрования с устройства (сделать это можно, если у вас есть root-права или установлено кастомное recovery, например, TWRP с поддержкой расшифровки раздела userdata), также, у вас под рукой должен быть ПК с Linux и желательно с кардридером.

Чтобы пост был максимально полезным все положения / инструкции и т.п. которые вы в нем увидите я, естественно, буду проверять вместе с вами на практике. Поэтому приступим. Итак, у меня имеется Alcatel Idol 3 4.7" 6039Y с Android M, Samsung'овская microSD на 16 Gb и ноутбук Acer Aspire ES 11 с установленной на нем Ubuntu 16.04 (в более ранних версиях ОС заставить работать штатный кардридер мне, к сожалению, не удалось).

Вставляем microSD в телефон и форматируем ее как внутреннюю память и перемещаем на нее данные приложений:



Теперь мы должны получить root-доступ к телефону, чтобы скопировать с него ключ шифрования, либо установить кастомный recovery, например, TWRP. Я воспользуюсь именно вторым вариантом, тем более что TWRP 3.0.2-0 для этого аппарата я недавно пересобрал из исходников (взять бинарник можно тут, ну а для тех кто желает собрать TWRP для Idol 3 6039Y самостоятельно, дерево я выложил тут). Для прошивки TWRP в аппарат я использовал свой Sahara & Firehose Test (будущий Alcatel Flasher), как и что нужно делать для прошивки указано в посте, посвященном этому ПО, поэтому останавливаться отдельно на вопросах прошивки я не буду.

Загружаемся в TWRP и монтируем раздел Data в меню Mount. После чего подключаем аппарат к ПК и с помощью adb shell заходим в консоль. Где сначала с помощью команды ls /data/misc/vold определяем имя файла содержащего наш 16-байтный AES ключ, а потом с помощью hexdump, либо скопировав файл на ПК достаем сам ключ:


Таким образом наш 16-байтный AES ключ выглядит следующим образом:
 00000000:  B5 76 C1 F4-9B 1F B1 0F-0E 54 04 84-87 F3 52 AF
Теперь можно достать флешку из телефона и переместиться за ПК с Linux. В моем случае это будет несколько проще, т.к. ноутбук с Ubuntu находится в одной сети с ПК с которого я пишу, поэтому я просто вставлю флешку в него, запущу x11vnc сервер на ноутбуке и VNC Viewer на том ПК с которого я пишу эту статью:


Как мы видим вставленная microSD представляет собой устройство /dev/mmcblk1 на котором есть два раздела (!) - FAT32 (/dev/mmcblk1p1) с именем android_meta и зашифрованный aes-cbc-essiv:sha256 ext4 раздел (/dev/mmcblk1p2) с именем android_expand.

Далее делаем следующее:


  • sudo blockdev --getsize /dev/mmcblk1p2 - узнаем размер устройства в блоках (31256543), получившееся значение мы будем использовать в следующей команде.
  • sudo dmsetup create crypt1 --table "0 31256543 crypt aes-cbc-essiv:sha256 B576C1F49B1FB10F0E54048487F352AF 0 /dev/mmcblk1p2 0" (вся команда пишется в одну строку) - создаем "расшифрованное устройство" (да простят меня *nix пользователи, т.к. я не силен в данной терминологии) crypt1, которое потом мы и будем монтировать как ext4 ... устройство должно создаться в /dev/mapper.
  • sudo dmsetup info - проверяем статус
После чего можно монтировать получившееся устройство /dev/mapper/crypt1 как ext4:
  • sudo mkdir /mnt/adopted
  • sudo mount -t ext4 /dev/mapper/crypt1 /mnt/adopted
Все должно выполниться без ошибок:


После чего запускаем тот же mc с правами root - sudo mc , переходим в папку /mnt/adopted и видим содержимое нашего adopted storage. Как видно все довольно просто:


В /media/0 у нас находятся все папки которые у нас "видны" с телефона как SD-карта, в /media/0/Android/data данные приложений, ну и далее по списку. "Размонтировать" флешку можно в обратном порядке, т.е.:
  • sudo umount /mnt/adopted
  • sudo dmsetup remove crypt1
После чего флешку можно извлекать из ПК. Ну вот вообщем-то и всё на сегодня. Как видите (и мы в этом убедились на практике) получить доступ к файлам хранящимся на adopted storage при наличии ключа шифрования не так уж и сложно. 

1 комментарий :

  1. Спасибо за статью! Когда придёт время, попробую сохранить таким образом Adopted Storage при смене прошивки.

    ОтветитьУдалить