Le conversazioni di backup di whatsapp vengono ora salvate con l’estensione .crypt8. Questo significa che ancora una volta whatsapp ha cambiato l’algoritmo crittografico usato per cifrare la cronologia di tutti i messaggi salvati sul nostro telefono (msgstore.db.crypt8).

Cambiamenti da Crypt7 a Crypt8

Per quanto concerne l’algoritmo in se, non vi è nulla di nuovo fra il crypt7 e il crypt8. Con l’avvento del crypt8 è stato aggiunto solamente un ulteriore passo per ottenere le conversazioni in chiaro.

Con il passaggio a crypt8, whatsapp ha anche disabilitato la possibilità di fare il backup con ADB. Questo metodo se ricordate permetteva di estrarre le chiavi di cifratura dal telefono non rootato. Questo significa che adesso, non potete recuperare le chiavi di cifratura se prima non rootate il telefono. E’ stata proprio rimossa la feature “android:allowBackup” dall’apk di whatsapp.

Mostriamo dunque una procedura valida per i database in crypt8:

Estrarre la chiave di cifratura (key) dal telefono

Per decrittare i file crypt8, avete bisogno del file chiave. La chiave possiede due insieme di “decryption keys”, uno è il vettore d’inizializzazione IV e l’altro è proprio la chiave di cifratura. (Questo perchè l’algoritmo crittografico scelto segue la modalità operativa CBC).

Usando un telefono rootato, lanciate l'ADB shell sul vostro pc, passate a root e copiate il file key sulla scheda SD.
Il percorso alla chiave è questo: /data/data/com.whatsapp/files/key

La procedura è questa:

$ adb shell
android$ su
android# cp /data/data/com.whatsapp/files/key /sdcard
android# exit
android$ exit

Dopo che il file è stato copiato sulla scheda SD, usate nuovamente ADB per copiarlo sul computer:

$ adb pull /sdcard/key

Estraiamo le conversazioni in crypt8

Usando nuovamente il comando pull di ADB, già visto sopra:

$ adb pull /sdcard/WhatsApp/Databases/msgstore.db.crypt8

Estraiamo la chiave di cifratura e l’IV dal file key

Il metodo crittografico utilizzato è AES con una lunghezza della chiave di 256 bit ed un vettore d’inizializzazione (IV) di 128 bit. La chiave AES da 256 bit è salvata dalla posizione 0x7E del file fino alla 0x9D. Con un offeste che parte da 0x00. Se siamo sotto linux possiamo estrarre la chiave AES con hexdump e assegnare il valore alla variabile $k.
Potete utilizzare uno dei due comandi qui sotto, vi daranno lo stesso risultato:

$ k=$(hexdump -e '2/1 "%02x"' key | cut -b 253-316)

$ k=$(dd if=key bs=1 skip=126 count=32 2>/dev/null | hexdump -e '2/1 "%02x"')

La variabile $k a questo punto conterrà un valore esadecimale di 64 cifre in ASCII per una lunghezza di appunto 256 bit.
Fatto questo, procediamo all’estrazione del vettore d’inizializzazione (IV) e assegniamolo alla variabile $iv.
L’IV è salvato all’interno del file dalla posizione 0x6E fino alla 0x7D. Ancora, potete scegliere uno dei due comandi qui sotto per farlo:

$ iv=$(hexdump -e '2/1 "%02x"' key | cut -b 221-252)

$ iv=$(dd if=key bs=1 skip=110 count=16 2>/dev/null | hexdump -e '2/1 "%02x"')

La variabile $iv a questo punto, conterrà un valore esadecimale di 32 cifre in ASCII, per una lunghezza di 128 bit.

Rimuoviamo gli header dal file msgstore.db.crypt8

Prima di iniziare la fase di decrypting, dobbiamo rimuovere gli header di 67 byte dal file crypt8.

$ dd if=msgstore.db.crypt8 of=msgstore.db.crypt8.nohdr ibs=67 skip=1

Il comando sopra rimuovere i primi 67 byte dal file, e salva il nuovo file con estensione cypt8.nohdr. Se date un’occhiata al contenuto dell’header, il vettore d’inizializzazione si trova proprio la, fra la posizione 0x33 ed 0x42. Quindi dal precedente msgstore.db.crypt8 siamo passati al nuovo msgstore.db.crypt8.nohdr.

Il file che abbiamo ottenuto dev’essere divisibile per 128 bit o 16 bytes, vuol dire che dev’essere un multiplo di queste grandezze.
Per esempio, la grandezza del mio file di output è di 16216176 byte; un numero divisibile per 16. Se il vostro file non è un multiplo di 16 byte probabilmente è corrotto!


$ ls -l msgstore.db.crypt8.nohdr
-rw-r--r--+ 1 ibrahim users 16216176 Dec 17 18:35 msgstore.db.crypt8.nohdr

Decrittiamo il file msgstore.db.crypt8.nohdr

Adesso abbiamo tutto ciò che ci serve per decrittare il file delle conversazioni (msgstore.db.crypt8.nohdr), utilizzando l’utility openssl. Ricordiamo queste viste fin’ora sono tutte operazioni da svolgere sotto una distribuzione LINUX.

$ openssl enc -aes-256-cbc -d -nosalt -bufsize 16384 -in msgstore.db.crypt8.nohdr -K $k -iv $iv | gunzip > msgstore.db

Le variabili $k e $iv possiedono la chiave crittografica e il vettore d’inizializzazione, ottenuti nei passi precedenti con hexdump. Se tutto va per il meglio una volta lanciato quest’ultimo comando ci verrà generato un file msgstore.db contenente un database SQLite non cifrato!

"gzip: stdin: decompression OK, trailing garbage ignored"

Potrebbero esserci dei Warning durante la procedura, ignorateli, piuttosto controllare che il file sia stato generato correttamente.

Per aprire il database e leggere le conversazioni, consigliamo di utilizzare questo software per Windows, Whatsapp Viewer. Gratuito e non richiede installazione. Per aprire il msgstore.db dal programma cliccate la voce Open dal menu in alto File.

La guida è terminata. Per eventuali problemi, vi invitiamo a commentare sotto!
Condividete se vi è tornata utile!