在桌面 Linux 上解锁 Android 加密的 SD 卡磁盘映像文件

在桌面 Linux 上解锁 Android 加密的 SD 卡磁盘映像文件

我能够使用互联网上的说明在桌面 Linux 上成功解锁损坏的 Android 加密 SD 卡。

# 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"

相关内容