Android: come leggere una scheda SD crittografata

Come leggere il contenuto di una SD card usata con crittografia su un dispositivo Android.

Estraendo dal telefono la SD card e inserendola in un PC GNU/Linux si può vedere il seguente schema di partizione (quella che interessa è la seconda partizione):

Disk /dev/sdb: 29,72 GiB, 31914983424 bytes, 62333952 sectors
Disk model: STORAGE DEVICE  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 78B76F02-A9D9-4974-B648-F277E7C43CEF

Device     Start      End  Sectors  Size Type
/dev/sdb1   2048    34815    32768   16M unknown
/dev/sdb2  34816 62333918 62299103 29,7G unknown

Senza la chiave crittografica è impossibile decifrare il contenuto della SD card, questa va recuperata dal dispositivo Android. È necessario avere accesso root al telefono oppure avere un dump della memoria.

Il file interessato si trova nella cartella /data/misc/vold, si tratta di un file di 16 byte:

-rw-------  1 root   root   16 2021-06-03 15:30 expand_b532da9c958f42df86808af649186da6.key

Copiare il file sul PC e visualizzarne il contenuto in esadecimale:

od -t x1 expand_b532da9c958f42df86808af649186da6.key
0000000 f8 de 0d b9 d7 c0 38 f4 72 53 f5 98 e7 bc 24 a2
0000020

Vedere la dimensione in byte del volume:

blockdev --getsize /dev/sdb2
62299103

Quindi è possibile attivare il volume crittografato con:

dmsetup create crypt1 \
    --table "0 62299103 crypt aes-cbc-essiv:sha256 f8de0db9d7c038f47253f598e7bc24a2 0 /dev/sdb2 0"

In questo modo diventa disponibile il device /dev/mapper/crypt1, che può essere montato (in questo esempio in modalità read-only) con:

mount -o ro /dev/mapper/crypt1 /mnt/

Il filesystem potrebbe essere ext4 oppure f2fs.

Per smontare la scheda SD:

umount /mnt
dmsetup remove crypt1

Web References