Consigo desbloquear com sucesso um cartão SD criptografado Android corrompido no Linux desktop usando instruções da Internet.
# dmsetup create crypt5 --table "0 `blockdev --getsize /dev/mmcblk0p2` crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /dev/mmcblk0p2 0"
A recuperação diretamente do cartão SD usando o Photorec estava demorando um tempo inaceitável. Como compromisso, decidi começar criando um arquivo de imagem de disco a partir da partição criptografada para poder verificar a integridade do cartão SD, reutilizá-lo e recuperar os dados do arquivo de imagem posteriormente.
# dd if=/dev/mmcblk0p2 of=/home/crash/Documents/128gb.img iflag=direct oflag=dsync
Agora a questão é: "como faço para desbloquear o arquivo de imagem de disco?" Sabendo que o arquivo de imagem de disco deveria ser idêntico à partição original, tentei ajustar o comando original para inserir o tamanho do dispositivo de bloco e a localização do arquivo de imagem de disco.
# blockdev --getsize /dev/mmcblk0p2
Resultado:
250048479
Conecte isso:
# dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /home/crash/Documents/128gb.img 0"
Isso falha com o seguinte erro:
device-mapper: reload ioctl on crypt6 failed: Invalid argument
Command failed
Não vejo o que deu errado. Gostaria de confirmar se esta imagem de disco pode ser desbloqueada antes de prosseguir com a limpeza e teste do cartão SD.
Responder1
Eu imagino que você precise converter seu arquivo de imagem em um dispositivo de bloco antes de dmcrypt
poder lidar com isso. Aqui usamos o loop
dispositivo, que nos permite apresentar uma interface de bloco ao arquivo nomeado:
# 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"
Na verdade, usando esta configuração você poderia substituir sua constante 250048479
por uma chamada de retorno para blockdev
(observe que também estou usando o mais moderno $(...)
em vez de backticks `...`
):
dmsetup create crypt6 --table "0 $(blockdev --getsize "$lodev") crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"