Разблокируйте зашифрованный Android-ФАЙЛ ОБРАЗА ДИСКА SD-карты на настольном Linux

Разблокируйте зашифрованный Android-ФАЙЛ ОБРАЗА ДИСКА SD-карты на настольном Linux

Мне удалось успешно разблокировать поврежденную зашифрованную SD-карту Android на настольном Linux, используя инструкции из Интернета.

# dmsetup create crypt5 --table "0 `blockdev --getsize /dev/mmcblk0p2` crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /dev/mmcblk0p2 0"

Восстановление напрямую с SD-карты с помощью photorec заняло неприемлемое количество времени. В качестве компромисса я решил начать с создания файла образа диска из зашифрованного раздела, чтобы я мог проверить целостность SD-карты и повторно использовать ее, а затем восстановить данные из файла образа позже.

# dd if=/dev/mmcblk0p2 of=/home/crash/Documents/128gb.img iflag=direct oflag=dsync

Теперь возникает вопрос: «Как мне разблокировать файл образа диска?» Зная, что файл образа диска должен быть идентичен исходному разделу, я попытался подправить исходную команду, чтобы включить размер блочного устройства и расположение файла образа диска.

# blockdev --getsize /dev/mmcblk0p2

Результат:

250048479

Вставьте это:

# dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /home/crash/Documents/128gb.img 0"

Это приводит к следующей ошибке:

device-mapper: reload ioctl on crypt6 failed: Invalid argument
Command failed

Я не вижу, что пошло не так. Я хотел бы убедиться, что этот образ диска можно разблокировать, прежде чем я перейду к очистке и тестированию SD-карты.

решение1

Я бы предположил, что вам нужно преобразовать файл изображения в блочное устройство, прежде чем dmcryptвы сможете его обработать. Здесь мы используем loopустройство, которое позволяет нам представить блочный интерфейс для именованного файла:

# Create a loop device and capture its name
lodev=$(losetup --show --find /home/crash/Documents/128gb.img)
echo "Using device $lodev for the image" >&2

# Map the crypto layer on to the loop block device
dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"

...
# Delete the loop device when we have finished with it
losetup -d "$lodev"

На самом деле, используя эту конфигурацию, вы можете заменить константу 250048479на обратный вызов blockdev(обратите внимание, что я также использую более современный метод, $(...)а не обратные кавычки `...`):

dmsetup create crypt6 --table "0 $(blockdev --getsize "$lodev") crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"

Связанный контент