Ich kann eine beschädigte, mit Android verschlüsselte SD-Karte auf einem Linux-Desktop mithilfe von Anweisungen aus dem Internet erfolgreich entsperren.
# dmsetup create crypt5 --table "0 `blockdev --getsize /dev/mmcblk0p2` crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /dev/mmcblk0p2 0"
Die Wiederherstellung direkt von der SD-Karte mit Photorec dauerte unannehmbar lange. Als Kompromiss habe ich beschlossen, zunächst eine Disk-Image-Datei von der verschlüsselten Partition zu erstellen, damit ich die Integrität der SD-Karte überprüfen und sie erneut verwenden und die Daten später aus der Image-Datei wiederherstellen kann.
# dd if=/dev/mmcblk0p2 of=/home/crash/Documents/128gb.img iflag=direct oflag=dsync
Nun lautet die Frage: „Wie entsperre ich die Disk-Image-Datei?“ Da ich wusste, dass die Disk-Image-Datei mit der Originalpartition identisch sein sollte, habe ich versucht, den Originalbefehl zu optimieren, um die Größe des Blockgeräts und den Speicherort der Disk-Image-Datei einzufügen.
# blockdev --getsize /dev/mmcblk0p2
Ergebnis:
250048479
Stecken Sie das ein:
# dmsetup create crypt6 --table "0 250048479 crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 /home/crash/Documents/128gb.img 0"
Dies schlägt mit dem folgenden Fehler fehl:
device-mapper: reload ioctl on crypt6 failed: Invalid argument
Command failed
Ich weiß nicht, was schiefgelaufen ist. Ich möchte bestätigen, dass dieses Disk-Image entsperrt werden kann, bevor ich mit dem Löschen und Testen der SD-Karte fortfahre.
Antwort1
Ich könnte mir vorstellen, dass Sie Ihre Bilddatei in ein Blockgerät konvertieren müssen, bevor dmcrypt
Sie sie verarbeiten können. Hier verwenden wir das loop
Gerät, das es uns ermöglicht, der benannten Datei eine Blockschnittstelle bereitzustellen:
# 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"
Tatsächlich könnten Sie mit dieser Konfiguration Ihre Konstante 250048479
durch einen Rückruf ersetzen blockdev
(beachten Sie, dass ich auch das modernere $(...)
anstelle von Backticks verwende `...`
):
dmsetup create crypt6 --table "0 $(blockdev --getsize "$lodev") crypt aes-cbc-essiv:sha256 HEXIDECIMALPASSPHRASEHERE 0 $lodev 0"