Knacken Sie die WeChat-Datenbank einer bestimmten Host-Umgebung, um deren Chat-Verlauf zu erhalten
Wenn Sie einen WeChat-Bot wie wechaty
verwenden, können Sie nur jede Echtzeitnachricht einbinden und keine vollständigen historischen Chat-Aufzeichnungen erhalten.
Im Rahmen von wechaty
und der API zum Abrufen von Chat-Aufzeichnungen ist dies jedoch möglicherweise machbar.
Da WeChat-Chat-Datensätze in der Datenbank gespeichert werden, können sie aus der Datenbankperspektive abgerufen werden.
Da WeChat-Chat-Datensätze in sqlcipher
gespeichert werden, einer sqlite
-Datenbank, die Verschlüsselung unterstützt und zum Öffnen einen geheimen Schlüssel erfordert, müssen wir zunächst den geheimen Schlüssel der Datenbank erhalten.
Am Beispiel von MacOS können wir einige umgekehrte Methoden ( dtrace
) verwenden, um die Datenbankaktivität des Programms einzubinden. Da das Öffnen der Datenbank durch das Programm das Lesen des Schlüssels beinhaltet, können wir diese Leseaktion analysieren, um den geheimen Klartextschlüssel zu erhalten.
Theoretisch kann es auf jeder Plattform implementiert werden, insbesondere auf Android, Windows und anderen Plattformen. Es gibt mehr Reverse Engineers und es ist möglicherweise weniger schwierig zu knacken. Mein persönlicher Hauptcomputer ist jedoch Mac/iOS, daher habe ich nicht an die Kompatibilität gedacht vorerst mit dem Windows/Android-Ökosystem.
Zweitens sind die technischen Möglichkeiten auf der PC-Seite umfangreicher als auf der mobilen Seite. Daher ist es eine kostengünstige Entscheidung, Durchbrüchen auf der PC-Seite den Vorrang zu geben.
Derzeit müssen unser dtrace-Skript und die gesamte Hook-Logik sicherstellen, dass die Version des MacOS WeChat-Clients unter 3.6 liegt.
Download-Adresse früherer Versionen von WeChat: Ältere Versionen von WeChat (Mac) |
Unter MacOS muss eine Umgebung konfiguriert werden, die sqlcipher lesen und schreiben kann.
# 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
Sie müssen cmd + Umschalt + R gedrückt halten, um in den abgesicherten Modus zu gelangen (halten Sie einfach die Ein-/Aus-Taste am Mac Studio gedrückt).
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
Tipp: Sie müssen sicherstellen, dass Sie das richtige WeChat-Programm mit der entsprechenden Version ausführen.
# 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
Tipp: Die Schlüsselleseaktion wird beim Anmelden ausgeführt. Sie müssen daher zuerst das Programm ausführen und sich dann anmelden.
Da wir die Speicheradresse, den geheimen Schlüssel, die Version usw. jeder Datenbank erhalten haben, können wir alle Daten programmgesteuert lesen.
pysqlcipher
verwendennode-sqlcipher
verwenden