
Gestiona archivos .crypt12, .crypt14 y .crypt15 de WhatsApp.

¡Descifra y cifra archivos .crypt12, .crypt14 y .crypt15 de WhatsApp y WA Business con facilidad!
Para el descifrado, NECESITAS el archivo de clave o la clave de 64 caracteres
(o una captura de pantalla de ella).
El archivo de clave se llama "key" si la copia de seguridad es crypt14 o
"encrypted_backup.key" si la copia de seguridad es crypt15 (copias de seguridad E2E cifradas).
Aquellos que busquen una suite más completa para
forense de WhatsApp, echen un vistazo a whapa.
Si no quieres instalar programas en tu ordenador, puedes ejecutar este programa en Google Colab .
Si estás familiarizado con Jupyter (lee aquí si no lo estás), puedes usar la versión notebook del programa.
Puedes instalar este script como un paquete a través de pip. Solo ejecuta:
python -m pip install wa-crypt-tools
para la versión estable y
python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools
para la versión de desarrollo.
Es posible que tengas que crear un entorno virtual para evitar conflictos con otros paquetes.
Si prefieres no usar una terminal en absoluto, wagui es una pequeña ventana que descifra una
copia de seguridad: elige tu clave, elige la copia de seguridad, pulsa Descifrar.

Descárgala y haz doble clic en ella. Cada release incluye una compilación autocontenida que no necesita Python ni instalación:
| Archivo | Para |
|---|---|
wagui-windows-x64.exe | Windows |
wagui-macos-arm64.zip | macOS (Apple Silicon) |
wagui-linux-x64 | Linux (chmod +x primero) |
La compilación para macOS no está firmada con código, así que la primera vez que la abras macOS la rechazará: haz clic derecho en la aplicación y elige Abrir, luego confirma.
Si ya instalaste el paquete con pip, la misma ventana está a un comando de distancia:
wagui
En Linux, una instalación con pip también necesita el paquete tkinter de tu distribución (python3-tk en
Debian/Ubuntu, python3-tkinter en Fedora) -- forma parte de Python pero se empaqueta por separado.
La compilación descargable lo tiene integrado y no necesita nada.
La ventana cubre el descifrado, que es para lo que la mayoría de la gente está aquí. También te dice qué es un
archivo tan pronto como lo eliges, igual que hace wainfo. El cifrado, la creación de archivos de clave y la
adivinación de offsets se quedan en las herramientas de línea de comandos de abajo.
usage: wadecrypt [-h] [-nm] [-bs BUFFER_SIZE] [-nd] [-v] [-f] [-y] [keyfile] [encrypted] [decrypted]
Así, para descifrar un crypt12/14/15, le damos al programa el archivo de clave, el archivo cifrado y el nombre del archivo de salida.
No sobrescribirá un archivo que ya exista; pasa -y/--yes si eso es lo que quieres.
$ 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 no sobrescribirá un archivo que ya exista; pasa -y/--yes si eso es lo que
quieres.
Con --reference, waencrypt reproduce la copia de seguridad referenciada byte a byte: el IV, la
cabecera (incluyendo campos que esta biblioteca no modela) y el nivel de compresión provienen de
ella, así que volver a cifrar una base de datos sin modificar te devuelve el md5 con el que empezaste.
-c/--compression-level es el nivel de zlib, 9 por defecto, que es lo que WhatsApp usa ahora.
Históricamente comprimía a 1. Con --reference el nivel se toma de la referencia, así que
reproducir una copia de seguridad antigua no necesita nada extra; pasa -c para sobrescribirlo.
El cifrado es más complejo y no está probado: se aconseja usar otro archivo cifrado de la misma cuenta, al que llamaremos "referencia".
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!
Necesitas proporcionar los siguientes parámetros:
wa.db, stickers.db, el resto de
WhatsApp/Backups/ -- no lleva ninguna información de características, que es lo que wainfo significa
con "No feature table found (not a msgstore DB or very old)". Para escribir una cabecera de esa
forma, pasa --enable-features sin nada después: una lista vacía no escribe ni los
indicadores de migración ni la versión de copia de seguridad, y --max-feature entonces no hace nada.Se usarán los valores por defecto si se omiten parámetros, y están tomados de una copia de seguridad
real 2.26.34.7: dados el --iv y el --jid correctos, waencrypt escribe los mismos bytes de cabecera que
el teléfono, sin ninguna referencia. Pasar --reference sigue siendo la mejor forma, ya que
toma el IV, el nivel de compresión y toda la cabecera de una copia de seguridad que ya tienes.
Para resumir:
$ 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!
Puedes obtener información sobre un archivo de copia de seguridad con la herramienta wainfo.
WhatsApp muestra la clave de 64 dígitos una vez y nunca más, así que la mayoría de la gente le hace una captura. Puedes dar esa captura a cualquiera de las herramientas dondequiera que vaya el archivo de clave -- no hay ningún flag extra, las herramientas averiguan qué les han entregado: