Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
wa-crypt-tools — 管理 WhatsApp 的 .crypt12、.crypt14 和 .crypt15 文件。 | Kitploit
工具/GitHubGitHub/eldavoo/wa-crypt-tools
Android安全加密/解密工具移动取证数据恢复数字取证密码学
GitHubeldavoo/wa-crypt-tools

wa-crypt-tools

管理 WhatsApp 的 .crypt12、.crypt14 和 .crypt15 文件。

查看仓库
1.1k15712314天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Coverage Status

WhatsApp Crypt Tools

轻松解密和加密 WhatsApp 和 WA Business 的 .crypt12、.crypt14 和 .crypt15 文件!
解密时,你需要 密钥文件 或 64 个字符长的密钥 (或者它的截图)。
如果备份是 crypt14,密钥文件名为 "key";如果备份是 crypt15(加密的端到端备份), 则名为 "encrypted_backup.key"。
如果你在寻找更完整的 WhatsApp 取证工具套件,请查看 whapa.

快速安装

云端 - Google Colab

如果你不想在电脑上安装程序,可以 在 Google Colab 中运行此程序 。

本地 - Jupyter

如果你熟悉 Jupyter(如果不熟悉,请阅读 此处), 你可以使用该程序的 notebook 版本。

本地 - pip

你可以通过 pip 将此脚本作为包安装。只需运行:

python -m pip install wa-crypt-tools

以安装稳定版,或

python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools

以安装开发版。

你可能需要创建一个虚拟环境,以避免与其他包发生冲突。

窗口:wagui

如果你完全不想使用终端,wagui 是一个用于解密备份的小窗口: 选择你的密钥,选择备份,按下 Decrypt。

wagui 窗口

下载并双击它。 每个 release 都附带一个自包含的构建版本, 无需 Python,也无需安装:

文件适用平台
wagui-windows-x64.exeWindows
wagui-macos-arm64.zipmacOS(Apple Silicon)
wagui-linux-x64Linux(需先 chmod +x)

macOS 构建版本未进行代码签名,因此首次打开时 macOS 会拒绝:右键点击 应用并选择 打开,然后确认。

如果你已经用 pip 安装了该包,同一个窗口只需一条命令:

wagui

在 Linux 上,pip 安装还需要你的发行版的 tkinter 包(Debian/Ubuntu 上是 python3-tk, Fedora 上是 python3-tkinter)——它是 Python 的一部分,但单独打包。 可下载的构建版本已内置它,无需任何额外操作。

该窗口涵盖解密功能,这也是大多数人来这里的目的。它还会在你选择文件时立即告诉你 文件是什么,就像 wainfo 那样。加密、创建密钥文件和猜测偏移量仍保留在下面的命令行工具中。

快速开始

使用 wadecrypt 解密文件

usage: wadecrypt [-h] [-nm] [-bs BUFFER_SIZE] [-nd] [-v] [-f] [-y] [keyfile] [encrypted] [decrypted]

因此,要解密 crypt12/14/15,我们向程序提供密钥文件、加密文件和输出文件名。 它不会覆盖已存在的文件;如果你确实想覆盖,请传入 -y/--yes。

示例

$ wadecrypt encrypted_backup.key msgstore.db.crypt15 msgstore.db
key15.py:51     : [I] Crypt15 / Raw key loaded
wadecrypt.py:271        : [I] Done

使用 waencrypt 加密文件(BETA)

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 不会覆盖已存在的文件;如果你确实想覆盖,请传入 -y/--yes。

使用 --reference 时,waencrypt 会逐字节复现所引用的备份:IV、 头部(包括本库未建模的字段)以及压缩级别都取自它, 因此重新加密未修改的数据库会得到你最初的那个 md5。

-c/--compression-level 是 zlib 级别,默认为 9,这也是 WhatsApp 现在使用的级别。 历史上它使用级别 1 压缩。使用 --reference 时,级别取自参考文件,因此 复现较旧的备份无需额外操作;传入 -c 可覆盖它。

加密更复杂且未经充分测试:建议使用同一账户的另一个加密文件, 我们称之为“参考文件”。

使用参考文件(仅测试过数据库 crypt15)

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!

不使用参考文件

你需要提供以下参数:

  1. 功能列表:仅适用于 2019 年及以后的数据库。这些实际上是 WhatsApp 记录在 头部中的数据库迁移标志,无法从数据库文件推断出来。默认值是 2.26.34.7 版 msgstore 所携带的,即全部标志。 只有 msgstore 才有它们。其他所有备份——wa.db、stickers.db、WhatsApp/Backups/ 中的其余文件——完全不携带功能信息,这就是 wainfo 所说的 "No feature table found (not a msgstore DB or very old)"。要写入这种形态的 头部,请传入 --enable-features 且后面不带任何内容:空列表既不写入 迁移标志也不写入备份版本,此时 --max-feature 不起作用。
  2. 最大功能编号,撰写时为 39
  3. 加密该文件的应用版本:默认为 2.26.34.7。
  4. Jid:你电话号码的最后 2 位数字——这个确实是你自己的,默认为 00
  5. 备份版本:使用 1。

如果省略参数,将使用默认值,这些默认值取自真实的 2.26.34.7 备份:给定正确的 --iv 和 --jid,waencrypt 会写出与手机相同的头部字节, 完全不需要参考文件。传入 --reference 仍然是更好的方式,因为它 从你已有的备份中获取 IV、压缩级别和整个头部。

总结如下:

$ 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!

你可以使用 wainfo 工具获取备份文件的信息。

从截图读取密钥

WhatsApp 只显示一次 64 位密钥,之后不再显示,所以大多数人会截图保存。 你可以将该截图交给任何工具,凡是需要密钥文件的地方都可以——没有 额外的标志,工具会自行判断交给它的是什么:

$ 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

wainfo -k <screenshot> 只打印密钥,如果你只想读取它。wagui 也接受 截图:在你会选择密钥文件的地方选择它。

这是可选的,需要安装两样东西:

python -m pip install 'wa-crypt-tools[ocr]'

外加 Tesseract 程序本身——Debian/Ubuntu 上 sudo apt install tesseract-ocr, macOS 上 brew install tesseract,Windows 上 winget install UB-Mannheim.TesseractOCR。 没有它们其他一切不变;只有当你传入图片时才会提示你安装它们。

当某位数字错误时

wadecrypt 在使用密钥前会对照备份检查它,如果不匹配,它会 静默地寻找近似匹配并继续使用可用的那个。任何单个错误数字总能被找到。 你不会被告知这些,因为你无事可做——如果想看到它,请用 -v 运行。 候选密钥只有在实际解密了备份开头后才会被接受,所以这里没有任何猜测会被使用。

这适用于直接输入的 64 位数字,而不仅仅是截图——这其实是 同一种错误,因为这些数字通常就是从截图上抄下来的。在那里它还会尝试 手工复制特有的失误:两个数字调换、两组调换,以及 4x4 网格按列 而非按行读取。所有这些大约需要一秒;一个完全错误的密钥会在 通常的错误之前多花你两秒。

密钥文件永远不会被二次猜测。它的数字从未被任何人转录过,所以它 要么是正确文件,要么是错误文件。

如果连这也失败,它会说明,并告诉你该怎么做:

[C] Could not read the key from the screenshot: what it says does not decrypt this backup,
    and neither does any near miss of it.
    Transcribe the 64 digits from the screenshot by hand and pass those instead of the image.

其他一些值得了解的事项:

  • 给它原始截图,而不是屏幕的照片,也不是被缩小的版本。裁剪到 仅密钥是可以的,而且通常有帮助。
  • 它读取密钥屏幕:四行四组,或任何其他总计 64 位数字的布局。 它不是通用 OCR,不会找到写在句子中的密钥。
  • wainfo -k 没有备份可供检查,因此无法修复任何东西——它打印所 读取的内容,你自己与图片比对。

工具列表

使用方法请用 -h 选项运行工具。 0) wagui - 窗口(见上文);唯一不是命令行工具的工具

  1. wacreatekey - 创建密钥文件
  2. wadecrypt - 解密备份
  3. waencrypt - 加密备份
  4. waguess - 尝试解密备份的取巧方法
  5. wainfo - 获取备份信息

作为库使用

这些工具所做的一切都可以通过 import wa_crypt_tools 使用。

from wa_crypt_tools import DatabaseFactory, KeyFactory, IntegrityError
import zlib

key = KeyFactory.new("encrypted_backup.key")  # a key file, or the 64-character key itself

with open("msgstore.db.crypt15", "rb") as f:
    # Reads the header and leaves the stream at the start of the ciphertext.
    db = DatabaseFactory.from_file(f)
    plaintext = db.decrypt(key, f.read())

# The payload is usually zlib-compressed; a multi-file backup is a ZIP instead.
open("msgstore.db", "wb").write(zlib.decompress(plaintext))

版本——crypt12、crypt14 或 crypt15——由工厂根据密钥 和文件头部推断出来。你不需要选择类。

错误

库抛出的每个错误都派生自 WaCryptError,它本身是 ValueError:

异常含义
InvalidKeyError密钥文件或十六进制密钥无法使用
ScreenshotKeyError它的子类:OCR 无法从截图读取密钥
HeaderError头部缺失、被截断或无法解析
DecryptionError密码算法失败
IntegrityError某项检查失败,但仍产生了结果

IntegrityError 是值得特意处理的那个。认证标签不匹配的备份 仍会产生明文,库拒绝将其当作正常结果返回——但它会将其附加到 异常上,因此你可以知情地使用它:

try:
    plaintext = db.decrypt(key, f.read())
except IntegrityError as e:
    # The tag did not match: the backup is corrupt, or the key is not the right one.
    # e.data holds the plaintext anyway. This is what the tools' --force writes out.
    plaintext = e.data

没有任何函数会返回 None 来表示失败,因此没有需要检查的返回值。

常见问题

我可以在没有密钥文件的情况下解密备份吗?

不能!否则加密文件还有什么意义?

我忘记了密码 / 64 位密钥,你能帮我吗?

见上文。

程序无法解密我的备份,并说备份已损坏

你的备份已损坏。wadecrypt 在第一次检查失败时就会停止;传入 -f 它 仍会写出输出,但预期输出不可读。-f 写出的内容未通过 认证检查,因此没有任何东西能保证它是你的数据。

程序无法解密,并说密钥错误

密钥是错的。如上所述,-f 无论如何都会写出输出,同样有上述注意事项。

解密自己的数据库的最佳设置是什么?

  1. 启用端到端备份,并且不要使用密码,使用 64 位密钥选项。
  2. 使用 wacreatekey 创建 encrypted_backup.key 文件
  3. 安全存储你的密钥文件,并使用 wadecrypt 解密你的备份。

这样,你将管理自己的根密钥——否则 WhatsApp 可能会在适当的时候 更改你的密钥。

下载工具