
Gerencie arquivos .crypt12, .crypt14 e .crypt15 do WhatsApp.

Descriptografe e criptografe arquivos .crypt12, .crypt14 e .crypt15 do WhatsApp e do WA Business com facilidade!
Para descriptografar, você PRECISA do arquivo de chave ou da chave de 64 caracteres
(ou de uma captura de tela dela).
O arquivo de chave se chama "key" se o backup for crypt14 ou
"encrypted_backup.key" se o backup for crypt15 (backups E2E criptografados).
Aqueles que procuram uma suíte mais completa para
perícia forense de WhatsApp, confiram o whapa.
Se você não quer instalar programas no seu computador, você pode executar este programa no Google Colab .
Se você está familiarizado com o Jupyter (leia aqui se não estiver), você pode usar a versão em notebook do programa.
Você pode instalar este script como um pacote através do pip. Basta executar:
python -m pip install wa-crypt-tools
para a versão estável e
python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools
para a versão de desenvolvimento.
Talvez você precise criar um ambiente virtual para evitar conflitos com outros pacotes.
Se você preferir não usar um terminal, o wagui é uma pequena janela que descriptografa um
backup: escolha sua chave, escolha o backup, pressione Decrypt.

Baixe e dê um duplo clique. Cada release traz uma build autocontida que não precisa de Python nem de instalação:
| Arquivo | Para |
|---|---|
wagui-windows-x64.exe | Windows |
wagui-macos-arm64.zip | macOS (Apple Silicon) |
wagui-linux-x64 | Linux (execute chmod +x nele primeiro) |
A build para macOS não é assinada digitalmente, então na primeira vez que você abri-la o macOS vai recusar: clique com o botão direito no app e escolha Open, depois confirme.
Se você já instalou o pacote com pip, a mesma janela está a um comando de distância:
wagui
No Linux, uma instalação via pip também precisa do pacote tkinter da sua distribuição (python3-tk no
Debian/Ubuntu, python3-tkinter no Fedora) -- ele faz parte do Python mas é empacotado separadamente.
A build para download já o tem embutido e não precisa de nada.
A janela cobre a descriptografia, que é o motivo pelo qual a maioria das pessoas está aqui. Ela também informa o que é um
arquivo assim que você o seleciona, da mesma forma que o wainfo faz. Criptografia, criação de arquivos de chave e
adivinhação de offsets permanecem nas ferramentas de linha de comando abaixo.
usage: wadecrypt [-h] [-nm] [-bs BUFFER_SIZE] [-nd] [-v] [-f] [-y] [keyfile] [encrypted] [decrypted]
Então, para descriptografar um crypt12/14/15, passamos ao programa o arquivo de chave, o arquivo criptografado e o nome do arquivo de saída.
Ele não sobrescreverá um arquivo que já existe; passe -y/--yes se for isso que você quer.
$ 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]
O waencrypt não sobrescreverá um arquivo que já existe; passe -y/--yes se for isso que
você quer.
Com --reference, o waencrypt reproduz o backup referenciado byte a byte: o IV, o
cabeçalho (incluindo campos que esta biblioteca não modela) e o nível de compressão vêm todos
dele, então re-criptografar um banco de dados não modificado devolve o md5 com o qual você começou.
-c/--compression-level é o nível do zlib, 9 por padrão, que é o que o WhatsApp usa agora.
Ele comprimia no nível 1 historicamente. Com --reference o nível é obtido da referência, então
reproduzir um backup mais antigo não precisa de nada extra; passe -c para sobrescrevê-lo.
A criptografia é mais complexa e não testada: recomenda-se usar outro arquivo criptografado da mesma conta, que chamaremos de "referência".
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!
Você precisa fornecer os seguintes parâmetros:
wa.db, stickers.db, o resto de
WhatsApp/Backups/ -- não carrega nenhuma informação de feature, que é o que o wainfo quer
dizer com "No feature table found (not a msgstore DB or very old)". Para escrever um cabeçalho desse
formato, passe --enable-features sem nada depois: uma lista vazia não escreve nem as
flags de migração nem a versão de backup, e --max-feature então não faz nada.Os padrões serão usados se os parâmetros forem omitidos, e eles são obtidos de um backup
2.26.34.7 real: dados o --iv e o --jid corretos, o waencrypt escreve os mesmos bytes de cabeçalho que
o telefone escreve, sem nenhuma referência. Passar --reference ainda é a melhor forma, já que
ele obtém o IV, o nível de compressão e todo o cabeçalho de um backup que você já tem.
Resumindo:
$ 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!
Você pode obter informações sobre um arquivo de backup com a ferramenta wainfo.
O WhatsApp mostra a chave de 64 dígitos uma vez e nunca mais, então a maioria das pessoas tira uma captura de tela dela. Você pode fornecer essa captura de tela a qualquer uma das ferramentas onde quer que o arquivo de chave vá -- não há flag extra, as ferramentas descobrem o que lhes foi entregue: