(Tempo di lettura: 2 - 3 minuti)
Da Aprile 2014 è campbiato il modo in cui vengono salvati i messaggi Whatsapp nel database locale (vedi Come leggere i messaggi Whatsapp sul proprio computer). Adesso sono necessarie due chiavi.
Una delle quali è locata sul terminale al path /data/data/com.whatsapp/files/key che è accessibile in modo diretto solo su terminali con root. Per fortuna esistono metodi alternativi procurarsela.

Nel caso di telefono con root, usando adb shell si fa una copia sulla scheda SD:
 
$ adb shell
android$ su
android# cp /data/data/com.whatsapp/files/key /sdcard
android# exit
android$ exit
 
 a questo punto si può copiare dalla sche al computer con:
$ adb pull /sdcard/key
 
Il secondo metodi che si appilca a telefoni senza root, richiede che sia installato almeno Android 4. In questo caso si utilizza la funzione ADB backup:
$ adb backup -f whatsapp.ab -noapk com.whatsapp
questo causa la visualizzazione di una richiesta sul telefono, Cliccare su "Effettua backup dei miei dati" senza fornire una password.
Screenshot
 
Una volta che il backup è terminato si vedrà un file chiamato whatsapp.ab sul proprio computer. L'estensione .ab sta per Android Backup. Per poterlo utilizzare va convertito in un archivio:
$ dd if=whatsapp.ab ibs=24 skip=1 | openssl zlib -d > whatsapp.tar
Determina il percorso della chiave nell'archivio:
$ tar tvf whatsapp.tar |grep key
-rw------- 10127/10127     158 2014-06-15 14:25 apps/com.whatsapp/f/key
 il file è nella posizione "apps/com.whatsapp/f/key". Estrarre il file e spostarlo nella directory di lavoro
$ tar xf whatsapp.tar apps/com.whatsapp/f/key
$ mv apps/com.whatsapp/f/key .
Verificare che il file sia esattamente 158 byte di dimensione.
 
Estrazione del file crypt7
Si deve recuperare il file dal dispositivo con ADB
 
$ adb pull /sdcard/WhatsApp/Databases/msgstore.db.crypt7
 
Estrazione della chiave
L'algoritmo di crittografia utiliazzato è AES con 256 bit di chiave e 128 bit di Vettore di Inizializzazione. La chiave è salvata nel file con offset da 0x7E a 0x9D . Si estrae la chiave con hexdump:
$ hexdump -e '2/1 "%02x"' key | cut -b 253-316
Il comando precedente dà un valore esadecimale di 64 cifre che sono 256 bit.
Successivamente va estratto il vettore di inizializzazione:
$ hexdump -e '2/1 "%02x"' key | cut -b 221-252
che restituisce un valore esadecimale di 32 cifre che sono 128 bits.
 
Togliere l'header nel file crypt7
 
Prima di iniziare il processo di decodifica è necessario "ritagliare" 67byte di header dal file:
$ dd if=msgstore.db.crypt7 of=msgstore.db.crypt7.nohdr ibs=67 skip=1
la dimensione del file deve essere divisibile per 128 bit o per 16 byte. Se la dimensione non è divisibile per 16 byte allora con molta probabilità il file è corrotto.

Decriptare il file
Ora abbiamo tutto il necessario per decriptare il file
$ openssl enc -aes-256-cbc -d -nosalt -nopad  -bufsize 16384 -in msgstore.db.crypt7.nohdr -K $k -iv $iv > msgstore.db

I valori $k e $iv vanno sostituiti con i valori precedentemente ottenuti con hexdump. Il file non criptato può essere trattato con il metodo che era valido precentemente. (vedi Come leggere i messaggi Whatsapp sul proprio computer)