Cracker la base de données WeChat d'un certain environnement hôte pour obtenir son historique de discussion
Si vous utilisez un bot WeChat tel que wechaty
, vous ne pouvez capter que chaque message en temps réel et ne pouvez pas obtenir des enregistrements historiques complets des discussions.
Cependant, si dans le cadre de wechaty
, plus l'API permettant d'obtenir des enregistrements de chat, cela peut être réalisable.
Étant donné que les enregistrements de discussion WeChat sont stockés dans la base de données, ils peuvent être obtenus du point de vue de la base de données.
Étant donné que les enregistrements de discussion WeChat sont stockés dans sqlcipher
, qui est une base de données sqlite
qui prend en charge le cryptage et nécessite une clé secrète pour s'ouvrir, nous devons donc d'abord obtenir la clé secrète de la base de données.
En prenant MacOS comme exemple, nous pouvons utiliser certaines méthodes inverses ( dtrace
) pour accrocher l'activité de base de données du programme. Puisque le programme ouvrant la base de données implique la lecture de la clé, nous pouvons analyser cette action de lecture pour obtenir la clé secrète en texte brut.
En théorie, il peut être implémenté sur n'importe quelle plate-forme, en particulier Android, Windows et d'autres plates-formes. Il existe davantage d'ingénierie inverse et il peut être moins difficile à déchiffrer. Cependant, mon ordinateur principal personnel est Mac/iOS, je n'ai donc pas pris en compte la compatibilité. avec l'écosystème Windows/Android pour le moment.
Deuxièmement, les capacités d'ingénierie du côté PC sont plus riches que celles du côté mobile. Par conséquent, donner la priorité aux avancées du côté PC est un choix rentable.
À l'heure actuelle, notre script dtrace et toute la logique du hook doivent garantir que la version du client MacOS WeChat est inférieure à 3.6 .
Adresse de téléchargement des versions précédentes de WeChat : Anciennes versions de WeChat (Mac) Uptodown |
Sous MacOS, un environnement capable de lire et d'écrire sqlcipher doit être configuré.
# 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
Vous devez maintenir cmd + shift + R pour passer en mode sans échec (appuyez simplement sur le bouton d'alimentation et maintenez-le enfoncé sur Mac Studio)
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
Astuce : Vous devez vous assurer que vous exécutez le bon programme WeChat avec la version correspondante.
# 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
Astuce : L'action de lecture de clé se produira lors de la connexion, vous devez donc d'abord exécuter le programme, puis vous connecter.
Puisque nous avons obtenu l'adresse de stockage, la clé secrète, la version, etc. de chaque base de données, nous pouvons lire toutes les données par programme.
pysqlcipher
node-sqlcipher