特定のホスト環境の WeChat データベースをクラックして、チャット履歴を取得します
wechaty
などの WeChat ボットを使用する場合、各リアルタイム メッセージをフックすることしかできず、完全なチャット履歴記録を取得することはできません。
ただし、 wechaty
のフレームワークとチャット記録を取得するための API の範囲内であれば、実現可能かもしれません。
WeChat のチャット記録はデータベースに保存されるため、データベースの観点から取得できます。
WeChat チャット レコードは、暗号化をサポートし、開くために秘密キーが必要なsqlite
データベースであるsqlcipher
に保存されるため、最初にデータベースの秘密キーを取得する必要があります。
MacOS を例に挙げると、いくつかの逆メソッド ( dtrace
) を使用してプログラムのデータベース アクティビティをフックできます。データベースを開くプログラムにはキーの読み取りが含まれるため、この読み取りアクションを解析して平文の秘密キーを取得できます。
理論的には、どのプラットフォームでも実装できますが、特に Android や Windows などのプラットフォームにはリバース エンジニアが多く、クラックの難易度は低いかもしれません。ただし、私の個人的なメイン コンピューターは Mac/iOS なので、互換性は考慮していません。当面は Windows/Android エコシステムを使用します。
第二に、PC 側のエンジニアリング能力はモバイル側のエンジニアリング能力よりも豊富であるため、PC 側のブレークスルーを優先することがコスト効率の高い選択となります。
現時点では、dtrace スクリプトとフック ロジック全体で、MacOS WeChat クライアントのバージョンが3.6 未満であることを確認する必要があります。
WeChat の以前のバージョンのダウンロード アドレス: WeChat の古いバージョン (Mac) |
MacOSではsqlcipherを読み書きできる環境を構築する必要があります。
# 1. check where is your `libcrypto.a`
brew list openssl | grep libcrypto.a
# 或者 find /usr/local/Cellar -name libcrypto.a
# 2. use the libcrypto.a with openssl version >= 3
LIBCRYPTO={YOUR-libcrypto.a}
# 3. install sqlcipher
git submodule add https://github.com/sqlcipher/sqlcipher
cd sqlcipher
./configure --enable-tempstore=yes CFLAGS= " -DSQLITE_HAS_CODEC "
LDFLAGS= $LIBCRYPTO --with-crypto-lib=none
make
# need password
sudo make install
セーフ モードに入るには、cmd + Shift + R を押し続ける必要があります (Mac Studio では電源ボタンを押し続けるだけです)。
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
ヒント: 対応するバージョンの正しい WeChat プログラムを実行していることを確認する必要があります。
# comparing to `wechat-decipher-macos`, I make the script more robust.
# 由于key是固定的,也可以把输出内容持久化,只需要在命令后面加上 `> data/dbcracker.log`
pgrep -f /Applications/WeChat-3.6.0.app/Contents/MacOS/WeChat | xargs sudo core/dbcracker.d -p > .keys
ヒント: ログイン時にキーの読み取りアクションが発生するため、最初にプログラムを実行してからログインする必要があります。
各データベースの格納アドレス、秘密鍵、バージョンなどを取得しているので、プログラムですべてのデータを読み取ることができます。
pysqlcipher
使用できますnode-sqlcipher
を使用できます