警告: このツールは、自分のデータベースをクラックする目的のみに使用してください。いかなる違法な状況でも使用しないでください。
(このツールは、 https://github.com/ppwwyyxx/wechat-dump/wiki、pysqlcipher.dbapi2.DatabaseError: ファイルが暗号化されているか、データベースではない にリストされている問題を解決する可能性があります)
一部のデバイスでは、「md5(imei + uin)[:7]」を使用して EnMicroMsg.db を復号化しようとすると、「ファイルが暗号化されているか、データベースではありません」というエラー メッセージが表示される場合があります。考えられる理由の 1 つは、WeChat が IMEI ではなく他のデバイス ID を使用してパスワードを生成していることです。
幸いなことに、28 ビットのパスワード (合計 16^7 の組み合わせ) はブルート フォース攻撃に耐えるほど強力ではありません。
WeChat は sqlcipher v2 を使用してデータベースを暗号化します。セキュリティ機能の一部は次のとおりです (https://www.zetetic.net/sqlcipher/design/ より)。
したがって、フェローリングが私たちの戦略です。最初のページを取得します。最後の 16B から IV を取得し、最初の 16B から塩を取得します。可能なパスフレーズのすべての組み合わせを繰り返します。対応するキーを導出します。データベースを復号化します。
sqlite db の元のヘッダーは 16B 文字列「SQLite format 3 」であることがわかっていますが、これは暗号化された場合にはソルトに置き換えられます。以下は、ページ サイズを表す 2B (0x04 0x00)、1B 書き込みバージョン ( 0x01 0x02) および 1B 読み取りバージョン ( 0x01 0x02)。正しいプレーンテキストを取得できるかどうかをテストするための同一のバイトが 4 つあります。 (2019-04-12) Wechat 7 以降、Tencent は新しい書き込み/読み取りバージョン (0x02) を使用しており、以前の検出は無効になります。次に、次の 3 つの固定バイトを使用して、正しいプレーン テキストを取得できるかどうかをテストします。 1. オフセット 5 の最大埋め込みペイロード部分 (0x40)。 2. オフセット 6 の最小埋め込みペイロード部分 (0x20)。 3. オフセット 7 のリーフ ペイロード部分 (0x20) (ここでは衝突を無視できます。パスを正常に取得しても DB を開けない場合は、「誤った警告」をスキップして次のパスから開始してください。)
単一の PBKDF2 を 4000 回反復するのに約 5 ミリ秒かかります。したがって、最悪の場合、解読には 16^7 * 0.005 /3600/24 = 15.5 日かかります。 8 コア PC では、2 日まで短縮されます (今では妥当なように思えます)。
systemInfo.cfg と CompareInfo.cfg が利用可能な場合は、クラックする前に、extract_key_from_cfg_files.py を使用してキーを取得してください。
C バージョンと Python バージョンの 2 つのバージョンを選択できます。前者の方が少し速いはずです (コアは openssl に依存しています。4000 回の反復の計算に違いはありません)。
$ sudo apt-get install libssl-dev
$ gcc password_cracker.c -l crypto -o password_cracker.o
「crack_enmicromsg_db_(C_version)」のパラメータを変更します。 process_no: 使用されているコアの合計数。注: パスの取得に成功してもデータベースを開けない場合は、「pass_start」を変更して次のパスから開始してください。
始める:
$ python2 crack_enmicromsg_db_(C_version).py
デモの目的。よく書かれていません。
Yuxin Wu が作成した素晴らしい wechat ダンプを使用して、データベース全体をダンプします。キーを使用するには、「decrypt-db.py」の数行を調整する必要があります。楽しむ!
decrypt_db_with_password.py: パスワードがすでにわかっている場合は、このスクリプトを使用して、SQLite 用 DB ブラウザで表示/編集できる復号化されたデータベースを取得します。
encrypt_db_again.py: データベースを再度暗号化します。注: (2018 2 04) WeChat が正しく開けるかどうかはテストされていません。
extract_key_from_cfg_files.py : このスクリプトはCompareInfo.cfgおよびsystemInfo.cfgからキーを抽出できます。 Python 3で書かれていることに注意してください。まず search_path を変更してから、スクリプトを実行します。
$ python3 extract_key_from_cfg_files.py
sqlcipher-tools/decrypt.c は、sqlcipher がどのように機能するかを理解するのに非常に役立ちます。
wechat-dump/decrypt-db.py は、WeChat db の主要なパラメーターを提供します。
sqlcipher ドキュメント : 詳細なセキュリティ機能。
問題 #4 を修正: openssl 1.1 に対してコンパイルされません: openssl 1.1 パッチを提供してくれた @couling に感謝します。