Puedo desbloquear con éxito una tarjeta SD cifrada de Android corrupta en un escritorio Linux siguiendo instrucciones de Internet.
# dmsetup create crypt5 --table "0 `blockdev --getsize /dev/mmcblk0p2` crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /dev/mmcblk0p2 0"
La recuperación directamente desde la tarjeta SD usando Photorec estaba tomando una cantidad de tiempo inaceptable. Como compromiso, decidí comenzar creando un archivo de imagen de disco a partir de la partición cifrada para poder verificar la integridad de la tarjeta SD y reutilizarla y luego recuperar los datos del archivo de imagen más adelante.
# dd if=/dev/mmcblk0p2 of=/home/crash/Documents/128gb.img iflag=direct oflag=dsync
Ahora la pregunta es: "¿Cómo desbloqueo el archivo de imagen del disco?" Sabiendo que se supone que el archivo de imagen del disco es idéntico a la partición original, intenté modificar el comando original para introducir el tamaño del dispositivo de bloque y la ubicación del archivo de imagen del disco.
# blockdev --getsize /dev/mmcblk0p2
Resultado:
250048479
Conecte eso:
# dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /home/crash/Documents/128gb.img 0"
Esto falla con el siguiente error:
device-mapper: reload ioctl on crypt6 failed: Invalid argument
Command failed
No veo qué salió mal. Me gustaría confirmar que esta imagen de disco se puede desbloquear antes de pasar a limpiar y probar la tarjeta SD.
Respuesta1
Me imagino que necesitas convertir tu archivo de imagen a un dispositivo de bloque antes de dmcrypt
poder manejarlo. Aquí utilizamos el loop
dispositivo que nos permite presentar una interfaz de bloque al archivo nombrado:
# 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"
En realidad, usando esta configuración podrías reemplazar tu constante 250048479
con una llamada de regreso a blockdev
(observa que también estoy usando las comillas más modernas $(...)
en lugar de las comillas invertidas `...`
):
dmsetup create crypt6 --table "0 $(blockdev --getsize "$lodev") crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"