Di seguito una breve guida su come leggere le conversazioni nei file di backup di WhatsApp criptati con crypt7 su dispositivi Android. Whatsapp continua ad aumentare il livello di cifratura dell’algoritmo, ma sembra non funzionare, infatti è stato hackerato più volte fin dalle sue prime versioni. Il POC sembra essere stato trovato da un hacker spagnolo, incuriosito da un’applicazione comparsa sul play store dove venivano visualizzati grafici statistici sull’utilizzo di whatsapp.
Conosciamo meglio crypt7
Crypt7 è l’ultimo sistema di cifratura usato da WhatsApp per cryptare i backup delle conversazioni. Per decifrare i file crypt7 si ha bisogno di 3 file, la chiave di crittografia con cifratura AES-256 bit, un vettore d’inizializzazione chiamato IV di 128 bit e gli header del file di 67byte del db criptato. Questi file si trovano sul “vostro” telefono in una locazione (diciamo) sicura.
/data/data/com.whatsapp/files/key
Per accedere e prendere questi 3 file ci sono 2 sistemi.
Per chi ha il telefono rootato
- Installatevi l’sdk di android. Ci interessa il comando adb
- Assicuriamoci che il dispositivo sia riconosciuto dal nostro sistema operativo e presente nella lista dei devices
- Aprite un terminale e digitiamo le seguenti istruzioni.
$ adb devices List of devices attached GalaxyNexus device $ adb shell android$ su android# android# cp /data/data/com.whatsapp/files/key /sdcard android# exit android$ exit |
Ora che si trova nella vostra sdcard, copiamolo sul computer con:
$ adb pull /sdcard/key |
Per chi NON ha il telefono rootato
Si dovrà utilizzare adb per effettuare un backup di quella cartella. Per eseguire questa operazione è necessaria l’installazione dell’sdk android. Per chi ha un sistema windows c’è la versione lite dell’sdk, con l’essenziale a questo link sdk android lite.
Lanciamo il backup:
$ adb backup -f whatsapp.ab -noapk com.whatsapp |
Questo farà comparire una schermata di notifica di backup sul telefono per accettare o negare l’operazione e utilizzare una password per i backup. Non inseriamo nessuna password e procediamo al backup.
Al termine del backup, avremo il file whatsapp.ab sul nostro computer, per estrarre il contenuto bisogna trasformarlo in un archivio .tar
Linux ci facilita il compito utilizzando il comando dd in questo modo
$ dd if=whatsapp.ab ibs=24 skip=1 | openssl zlib -d > whatsapp.tar |
Estraiamo la chiave dall’archivio,
$ tar xf whatsapp.tar apps/com.whatsapp/f/key $ mv apps/com.whatsapp/f/key . |
Verifichiamo che la chiave sia esattamente di 158 bytes. Se la dimensione corrisponde, possiamo procedere.
Estrazione del database delle conversazioni whatsapp crittografate con crypt7
Sempre utilizzando adb, possiamo estrarre i database sul nostro computer a prescindere, che il telefono è rootato o meno, il comando è lo stesso:
$ adb pull /sdcard/WhatsApp/Databases/msgstore.db.crypt7 |
Estrazione delle chiavi dal file key
Il file key, è composto dalla chiave crittografica di 256 bit + IV di 128.
1. Per prendere la chiave principale utilizziamo il comando dal terminale:
$ hexdump -e '2/1 "%02x"' key | cut -b 253-316 |
Ci verrà restituita un valore esadecimale a 64 caratteri lungo 128bit.
2. Mentre per prendere l’IV
$ hexdump -e '2/1 "%02x"' key | cut -b 221-252 |
Questo ci darà un valore esadecimale da 32 cifre, di lunghezza 128 bit.
Estrazione dell’header dal file crypt7
Estraiamo l’header di 67 byte del file crypt7.
$ dd if=msgstore.db.crypt7 of=msgstore.db.crypt7.nohdr ibs=67 skip=1 |
Ora avremo il file msgstore.db.crypt7.nohdr. Verifichiamo che sia divisible per 128bit o 16 byte, se c’è qualche resto allora il file è corrotto. Per farlo prendiamo la dimensione del file in byte e facciamo l’operazione Modulo ( Mod) per 16 se il risultato è zero allora possiamo procedere al passo successivo.
Passo finale, decriptiamo il database e leggiamo le conversazioni
$ openssl enc -aes-256-cbc -d -nosalt -nopad -bufsize 16384 -in msgstore.db.crypt7.nohdr -K $k -iv $iv > msgstore.db |
Sostituiamo i rispettivi $k con il primo hexdump effettuato e $iv con il secondo hexdump.
Il comando darà come risultato un database SQLite non crittografato, chiamato msgstore.db
Altre soluzioni
Esistono anche diversi siti web che ti permettono di effettuare questa procedura online, ma sinceramente dare informazioni online su siti completamente anonimi mi sembra un azzardo. Per correttezza questo è uno dei siti web che permette di effettuare l’operazione di decrypt online
Oppure se volete a vostro rischio e pericolo utilizzare l’applicazione presente sul Play Store WhatsApp Tri-Crypt
Per chi è interessato c’è un’applicazione che permette di effettuare il backup via WIFI WiFi ADB – Debug Over Air
luca
20 Novembre 2014 — 14:51
perchè a me non riconosce il comando dd???
akira88
6 Dicembre 2014 — 19:39
Grazie.
Quando ho provato la procedura con il file msgstore.db.crypt7 non creava un file leggibile da sqlite3, mentre ho notato che c’erano altri file con nomi msgstore-yyyy-mm-dd.db.crypt7 (penso i backup giornalieri), e con quelli funziona!
vitolipari
11 Dicembre 2014 — 17:48
Ciao, Ottima guida!!!
Volevo fare una domanda, una volta avuto accesso al database, ho fatto un paio di modifiche, adesso vorrei cifrare il db per poi fare il restore!
Come posso fare per cifrare il database modificato?
FabioNatalucci
11 Dicembre 2014 — 17:52
Ciao @luca sicuramente non lo avrai installato, anche se mi sembra strano. Che sistema operativo usi?
FabioNatalucci
11 Dicembre 2014 — 17:57
Ciao vitolipari non ho provato a fare il procedimento inverso. Non so se è possibile farlo, mi informo e ti faccio sapere.
lormagni
21 Dicembre 2014 — 19:49
Per chi non ha il file “key” c’è un modo per decriptare i file database?
Purtroppo sono riuscito a salvare solo un file database su 8, poi il telefono è partito del tutto :(
FabioNatalucci
21 Dicembre 2014 — 20:25
lormagni purtroppo non è possibile per un utente comune, decriptare i database, senza il file key. Che significa che è partito del tutto?