
WhatsApp の .crypt12、.crypt14、.crypt15 ファイルを管理します。

WhatsAppおよびWA Businessの.crypt12、.crypt14、.crypt15ファイルを簡単に復号・暗号化できます!
復号には、キーファイルまたは64文字のキー
(またはそのスクリーンショット)が必要です。
キーファイルの名前は、バックアップがcrypt14の場合は「key」、
バックアップがcrypt15(暗号化されたE2Eバックアップ)の場合は「encrypted_backup.key」です。
WhatsAppフォレンジック向けのより完全なスイートをお探しの方は、whapaをご覧ください。
コンピュータにプログラムをインストールしたくない場合は、このプログラムを Google Colabで実行 できます。
Jupyterに慣れている場合(そうでない場合は こちら をお読みください)、プログラムの ノートブック版 を使用できます。
このスクリプトはpip経由でパッケージとしてインストールできます。安定版をインストールするには、次を実行してください:
python -m pip install wa-crypt-tools
開発版をインストールするには:
python -m pip install git+https://github.com/ElDavoo/wa-crypt-tools
他のパッケージとの競合を避けるために、仮想環境を作成する必要があるかもしれません。
ターミナルをまったく使いたくない場合は、waguiはバックアップを復号する小さなウィンドウです:
キーを選び、バックアップを選び、Decryptを押すだけです。

ダウンロードしてダブルクリックするだけです。 各 リリースには、Pythonもインストールも不要な 自己完結型ビルドが含まれています:
| ファイル | 対象 |
|---|---|
wagui-windows-x64.exe | Windows |
wagui-macos-arm64.zip | macOS (Apple Silicon) |
wagui-linux-x64 | Linux(先にchmod +xしてください) |
macOSビルドはコード署名されていないため、初回起動時にmacOSが拒否します:アプリを右クリックして Openを選択し、確認してください。
すでにpipでパッケージをインストールしている場合、同じウィンドウはコマンド1つで起動できます:
wagui
Linuxでは、pipインストールにはディストリビューションのtkinterパッケージも必要です(Debian/Ubuntuではpython3-tk、
Fedoraではpython3-tkinter)-- これはPythonの一部ですが別々にパッケージ化されています。
ダウンロード可能なビルドには組み込まれており、何も必要ありません。
このウィンドウは復号をカバーしており、ほとんどの人がこれを目的としています。また、ファイルを選択するとすぐに
wainfoと同じようにそのファイルの情報を表示します。暗号化、キーファイルの作成、オフセットの推測は
以下のコマンドラインツールに残っています。
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
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を渡してください。
暗号化はより複雑で未テストです:同じアカウントの別の暗号化ファイル(これを「参照」と呼びます)を 使用することをお勧めします。
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!
以下のパラメータを指定する必要があります:
wa.db、stickers.db、その他の
WhatsApp/Backups/ -- は機能情報をまったく持たず、これがwainfoが
「No feature table found (not a msgstore DB or very old)」と言う意味です。その形状の
ヘッダーを書き込むには、--enable-featuresの後に何も渡さずに指定します:空のリストは
移行フラグもバックアップバージョンも書き込まず、--max-featureは何もしなくなります。パラメータを省略するとデフォルトが使用され、それらは実際の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も
スクリーンショットを受け付けます:キーファイルを選ぶ場所でそれを選んでください。
これはオプションであり、2つのものをインストールする必要があります:
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は使用前にキーをバックアップに対してチェックし、適合しない場合は、
静かにニアミスを探して、機能するものを使用して続行します。1桁の誤りは常に見つかります。
これについて何も通知されません。あなたが何かする必要はないからです -- 確認したい場合は-vを付けて実行してください。
候補は、実際にバックアップの先頭を復号できた場合にのみ受け入れられるため、ここで使用される推測はありません。
これは直接入力された64桁にも適用され、スクリーンショットだけに限りません -- これは同じ間違いです。 桁は通常、そもそもスクリーンショットから入力されるからです。そこでは手作業でのコピーに特有の ミスも試します:2桁の入れ替わり、2つのグループの入れ替わり、4x4グリッドを行ではなく列方向に 読んでしまった場合。これらすべてに約1秒かかります。単に間違ったキーの場合は、通常のエラーの前に 2秒かかります。
キーファイルは決して再推測されません。その桁は誰も転記していないため、正しいファイルか 間違ったファイルかのどちらかです。
それでも失敗した場合は、その旨と対処方法を伝えます:
[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.
他に知っておくべきこと:
wainfo -kには照合するバックアップがないため、何も修復できません -- 読み取ったものを出力し、
あなた自身が画像と比較します。使用方法については、ツールを-hオプション付きで実行してください。
0) wagui - ウィンドウ(上記参照)。コマンドラインツールではない唯一のものです
wacreatekey - キーファイルを作成wadecrypt - バックアップを復号waencrypt - バックアップを暗号化waguess - バックアップの復号を試みるハッキーな方法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です: