
Gestire file WhatsApp .crypt12, .crypt14 e .crypt15.

Decifra e cifra con facilità i file .crypt12, .crypt14 e .crypt15 di WhatsApp e WA Business!
Per la decifratura, ti serve il file della chiave o la chiave lunga 64 caratteri
(oppure uno screenshot della stessa).
Il file della chiave si chiama "key" se il backup è crypt14 oppure
"encrypted_backup.key" se il backup è crypt15 (backup E2E cifrati).
Coloro che cercano una suite più completa per
l'analisi forense di WhatsApp, date un'occhiata a whapa.
Se non vuoi installare programmi sul tuo computer, puoi eseguire questo programma in Google Colab .
Se hai familiarità con Jupyter (leggi qui se non ne hai), puoi usare la versione notebook del programma.
Puoi installare questo script come pacchetto tramite pip. Esegui semplicemente:
python -m pip install wa-crypt-tools
per la versione stabile e
python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools
per la versione di sviluppo.
Potresti dover creare un ambiente virtuale per evitare conflitti con altri pacchetti.
Se preferisci non usare affatto un terminale, wagui è una piccola finestra che decifra un
backup: scegli la chiave, scegli il backup, premi Decifra.

Scaricala e fai doppio clic. Ogni release include una build autonoma che non richiede Python né installazione:
| File | Per |
|---|---|
wagui-windows-x64.exe | Windows |
wagui-macos-arm64.zip | macOS (Apple Silicon) |
wagui-linux-x64 | Linux (prima esegui chmod +x) |
La build per macOS non è firmata digitalmente, quindi la prima volta che la apri macOS la rifiuterà: fai clic con il tasto destro sull'app e scegli Apri, poi conferma.
Se hai già installato il pacchetto con pip, la stessa finestra è a un comando di distanza:
wagui
Su Linux, un'installazione con pip richiede anche il pacchetto tkinter della tua distribuzione (python3-tk su
Debian/Ubuntu, python3-tkinter su Fedora) -- fa parte di Python ma è pacchettizzato separatamente.
La build scaricabile lo ha integrato e non richiede nulla.
La finestra copre la decifratura, che è ciò per cui la maggior parte delle persone è qui. Ti dice anche cos'è un
file non appena lo scegli, come fa wainfo. La cifratura, la creazione di file di chiave e
la stima degli offset restano negli strumenti da riga di comando sottostanti.
usage: wadecrypt [-h] [-nm] [-bs BUFFER_SIZE] [-nd] [-v] [-f] [-y] [keyfile] [encrypted] [decrypted]
Quindi, per decifrare un crypt12/14/15, diamo al programma il file della chiave, il file cifrato e il nome del file di output.
Non sovrascriverà un file già esistente; passa -y/--yes se è quello che vuoi.
$ wadecrypt encrypted_backup.key msgstore.db.crypt15 msgstore.db
key15.py:51 : [I] Crypt15 / Raw key loaded
wadecrypt.py:271 : [I] Done
usage: waencrypt [-h] [-f] [-y] [-v] [--enable-features [ENABLE_FEATURES ...]] [--max-feature MAX_FEATURE]
[--multi-file] [--type {12,14,15}] [--iv IV] [--reference REFERENCE] [--noparse]
[--wa-version WA_VERSION] [--jid JID] [--backup-version BACKUP_VERSION] [--no-compress]
[-c [0-9]] [keyfile] [decrypted] [encrypted]
waencrypt non sovrascriverà un file già esistente; passa -y/--yes se è quello che
vuoi.
Con --reference, waencrypt riproduce il backup di riferimento byte per byte: l'IV, l'
header (inclusi i campi che questa libreria non modella) e il livello di compressione provengono tutti da
esso, quindi ricifrare un database non modificato ti restituisce l'md5 con cui avevi iniziato.
-c/--compression-level è il livello zlib, 9 per impostazione predefinita, che è quello che WhatsApp usa ora.
Storicamente comprimeva a 1. Con --reference il livello viene preso dal riferimento, quindi
riprodurre un backup più vecchio non richiede nulla in più; passa -c per sovrascriverlo.
La cifratura è più complessa e non testata: si consiglia di usare un altro file cifrato dallo stesso account, che chiameremo "riferimento".
waencrypt --reference msgstore.db.crypt15 encrypted_backup.key msgstore.db msgstore-new.db.crypt15
waencrypt.py:57 : [W] This script is in beta stage
waencrypt.py:89 : [I] Done!
Devi fornire i seguenti parametri:
wa.db, stickers.db, il resto di
WhatsApp/Backups/ -- non porta alcuna informazione sulle feature, che è ciò che wainfo intende
con "No feature table found (not a msgstore DB or very old)". Per scrivere un header di quella
forma, passa --enable-features senza nulla dopo: una lista vuota non scrive né i
flag di migrazione né la versione del backup, e --max-feature quindi non fa nulla.I valori predefiniti verranno usati se i parametri sono omessi, e sono presi da un vero backup
2.26.34.7: dati i giusti --iv e --jid, waencrypt scrive gli stessi byte di header che
scrive il telefono, senza alcun riferimento. Passare --reference è comunque il modo migliore, poiché
prende l'IV, il livello di compressione e l'intero header da un backup che hai già.
Per riassumere:
$ waencrypt --enable-features 5 6 7 8 9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 --type 15 --wa-version 2.26.34.7 --jid 00 --backup
-version 1 encrypted_backup.key msgstore.db msgstore-new.db.crypt15
waencrypt.py:57 : [W] This script is in beta stage
waencrypt.py:89 : [I] Done!
Puoi ottenere informazioni su un file di backup con lo strumento wainfo.
WhatsApp mostra la chiave di 64 cifre una volta sola e mai più, quindi la maggior parte delle persone ne fa uno screenshot. Puoi dare quello screenshot a uno qualsiasi degli strumenti ovunque vada il file della chiave -- non c'è un flag aggiuntivo, gli strumenti capiscono cosa è stato loro passato:
$ wadecrypt Screenshot_20260901-184609_WhatsApp.png msgstore.db.crypt15 msgstore.db
ocr.py:503 : [I] Reading the key from the screenshot, this takes a few seconds...
key15.py:55 : [I] Crypt15 / Raw key loaded
wadecrypt.py:301 : [I] Done