デスクトップ Linux で Android の暗号化された SD カードのディスク イメージ ファイルをロック解除する

デスクトップ Linux で Android の暗号化された SD カードのディスク イメージ ファイルをロック解除する

インターネットの指示に従って、破損した Android の暗号化 SD カードをデスクトップ Linux 上で正常にロック解除できました。

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

photorec を使用して SD カードから直接復元すると、許容できないほどの時間がかかっていました。妥協案として、暗号化されたパーティションからディスク イメージ ファイルを作成して、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"

関連情報