
Gérer les fichiers WhatsApp .crypt12, .crypt14 et .crypt15.

Déchiffrez et chiffrez facilement les fichiers .crypt12, .crypt14 et .crypt15 de WhatsApp et WA Business !
Pour le déchiffrement, vous avez BESOIN du fichier de clé ou de la clé de 64 caractères
(ou d'une capture d'écran de celle-ci).
Le fichier de clé est nommé « key » si la sauvegarde est en crypt14 ou
« encrypted_backup.key » si la sauvegarde est en crypt15 (sauvegardes E2E chiffrées).
Ceux qui cherchent une suite plus complète pour
la forensique WhatsApp, consultez whapa.
Si vous ne voulez pas installer de programmes sur votre ordinateur, vous pouvez exécuter ce programme dans Google Colab .
Si vous connaissez Jupyter (lisez ici si ce n'est pas le cas), vous pouvez utiliser la version notebook du programme.
Vous pouvez installer ce script en tant que paquet via pip. Exécutez simplement :
python -m pip install wa-crypt-tools
pour la version stable et
python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools
pour la version de développement.
Vous devrez peut-être créer un environnement virtuel pour éviter les conflits avec d'autres paquets.
Si vous préférez ne pas utiliser de terminal du tout, wagui est une petite fenêtre qui déchiffre une
sauvegarde : choisissez votre clé, choisissez la sauvegarde, appuyez sur Decrypt.

Téléchargez-la et double-cliquez dessus. Chaque release contient une build autonome qui ne nécessite ni Python ni installation :
| Fichier | Pour |
|---|---|
wagui-windows-x64.exe | Windows |
wagui-macos-arm64.zip | macOS (Apple Silicon) |
wagui-linux-x64 | Linux (chmod +x d'abord) |
La build macOS n'est pas signée, donc la première fois que vous l'ouvrez, macOS refusera : faites un clic droit sur l'application et choisissez Ouvrir, puis confirmez.
Si vous avez déjà installé le paquet avec pip, la même fenêtre est à une commande :
wagui
Sous Linux, une installation pip nécessite aussi le paquet tkinter de votre distribution (python3-tk sur
Debian/Ubuntu, python3-tkinter sur Fedora) -- il fait partie de Python mais est empaqueté séparément.
La build téléchargeable l'intègre et ne nécessite rien.
La fenêtre couvre le déchiffrement, ce pour quoi la plupart des gens sont ici. Elle vous indique aussi ce qu'est un
fichier dès que vous le sélectionnez, comme le fait wainfo. Le chiffrement, la création de fichiers de clé et
la recherche d'offsets restent dans les outils en ligne de commande ci-dessous.
usage: wadecrypt [-h] [-nm] [-bs BUFFER_SIZE] [-nd] [-v] [-f] [-y] [keyfile] [encrypted] [decrypted]
Donc, pour déchiffrer un crypt12/14/15, nous donnons au programme le fichier de clé, le fichier chiffré et le nom du fichier de sortie.
Il n'écrasera pas un fichier qui existe déjà ; passez -y/--yes si c'est ce que vous voulez.
$ 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 n'écrasera pas un fichier qui existe déjà ; passez -y/--yes si c'est ce que
vous voulez.
Avec --reference, waencrypt reproduit la sauvegarde référencée octet pour octet : l'IV, le
header (y compris les champs que cette bibliothèque ne modélise pas) et le niveau de compression proviennent tous
de celle-ci, donc re-chiffrer une base de données non modifiée vous redonne le md5 avec lequel vous avez commencé.
-c/--compression-level est le niveau zlib, 9 par défaut, ce que WhatsApp utilise actuellement.
Il compressait à 1 historiquement. Avec --reference le niveau est pris depuis la référence, donc
reproduire une sauvegarde plus ancienne ne nécessite rien de plus ; passez -c pour le remplacer.
Le chiffrement est plus complexe et non testé : il est conseillé d'utiliser un autre fichier chiffré du même compte, que nous appellerons « référence ».
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!
Vous devez fournir les paramètres suivants :
wa.db, stickers.db, le reste de
WhatsApp/Backups/ -- ne porte aucune information de fonctionnalité, ce que wainfo signifie
par « No feature table found (not a msgstore DB or very old) ». Pour écrire un header de cette
forme, passez --enable-features sans rien après : une liste vide n'écrit ni les
drapeaux de migration ni la version de sauvegarde, et --max-feature ne fait alors rien.Les valeurs par défaut seront utilisées si les paramètres sont omis, et elles sont tirées d'une vraie sauvegarde
2.26.34.7 : avec le bon --iv et --jid, waencrypt écrit les mêmes octets de header que
le téléphone, sans aucune référence. Passer --reference reste la meilleure façon, puisqu'il
prend l'IV, le niveau de compression et tout le header d'une sauvegarde que vous avez déjà.
Pour résumer :
$ 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!
Vous pouvez obtenir des informations sur un fichier de sauvegarde avec l'outil wainfo.