AVERTISSEMENT : Cet outil ne doit être utilisé UNIQUEMENT que pour pirater votre propre base de données. NE l’utilisez PAS dans AUCUNE circonstance illégale.
(Cet outil peut résoudre les problèmes répertoriés dans https://github.com/ppwwyyxx/wechat-dump/wiki, pysqlcipher.dbapi2.DatabaseError : le fichier est crypté ou n'est pas une base de données)
Avec certains appareils, vous pouvez recevoir le message d'erreur : "le fichier est crypté ou n'est pas une base de données", lorsque vous essayez de déchiffrer EnMicroMsg.db avec "md5(imei + uin)[:7]". Une raison possible est que WeChat utilise d'autres identifiants d'appareil au lieu de l'IMEI pour générer un mot de passe.
Nous avons de la chance que le mot de passe de 28 bits (16 ^ 7 combinaisons au total) ne soit pas assez fort pour résister aux attaques par force brute.
WeChat utilise sqlcipher v2 pour chiffrer la base de données. Certaines parties des fonctionnalités de sécurité sont répertoriées comme suit (à partir de https://www.zetetic.net/sqlcipher/design/) :
Ainsi, la camaraderie est notre stratégie : obtenir la première page ; obtenir IV des derniers 16B et sel des premiers 16B ; parcourir toutes les combinaisons de phrases secrètes possibles ; dériver la clé correspondante. Décryptez la base de données.
Nous savons que l'en-tête d'origine de la base de données sqlite est une chaîne de 16 B : "SQLite format 3 ", qui est remplacée par le sel dans le cas chiffré. Voici 2B pour décrire la taille de la page (0x04 0x00), 1B version en écriture ( 0x01 0x02) et version en lecture 1B ( 0x01 0x02). Nous disposons de 4 octets identiques pour tester si nous obtenons le bon texte brut. (12/04/2019) À partir de Wechat 7, Tencent utilise une nouvelle version en écriture/lecture (0x02), qui brisera notre ancienne détection. Nous allons maintenant utiliser les trois octets fixes suivants pour tester si nous obtenons le texte brut correct : 1. fraction de charge utile intégrée maximale (0x40) avec un décalage de 5 ; 2. fraction minimale de charge utile intégrée (0x20) avec décalage 6 ; 3. fraction de charge utile feuille (0x20) avec décalage 7. (Ici, nous pouvons simplement ignorer la collision. Si vous réussissez à obtenir le passage mais que vous ne parvenez toujours pas à ouvrir la base de données, ignorez simplement la "fausse alerte" et recommencez à partir du passage suivant.)
Il faut environ 5 ms pour réaliser un seul PBKDF2 avec 4000 itérations. Donc, dans le pire des cas, il faudra 16^7 * 0,005 /3600/24 = 15,5 jours pour craquer. Sur un PC à 8 cœurs, cela se réduit à 2 jours (cela semble raisonnable maintenant).
Avant de craquer, veuillez utiliser extract_key_from_cfg_files.py pour obtenir la clé si systemInfo.cfg et CompatibleInfo.cfg sont disponibles.
Il existe deux versions au choix : une version C et une version Python. Le premier devrait être un peu plus rapide (le noyau repose sur openssl. Aucune différence dans le calcul des 4000 itérations).
$ sudo apt-get install libssl-dev
$ gcc password_cracker.c -l crypto -o password_cracker.o
modifier les paramètres dans "crack_enmicromsg_db_(C_version)". process_no : nombre total de cœurs utilisés. Remarque : Si vous avez réussi à obtenir le pass mais que vous ne parvenez toujours pas à ouvrir la base de données, commencez à partir du prochain pass en modifiant "pass_start".
commencer:
$ python2 crack_enmicromsg_db_(C_version).py
Objectif de démonstration. Pas bien écrit.
Utilisez le merveilleux wechat-dump écrit par Yuxin Wu pour vider toute la base de données. Vous devez modifier quelques lignes dans "decrypt-db.py" pour utiliser la clé. Amusez-vous!
decrypt_db_with_password.py : lorsque vous connaissez déjà le mot de passe, utilisez ce script pour obtenir une base de données déchiffrée qui peut être visualisée/modifiée par DB Browser pour SQLite.
encrypt_db_again.py : chiffrer à nouveau la base de données. Remarque : (04 février 2018) n'a pas testé si WeChat peut l'ouvrir correctement.
extract_key_from_cfg_files.py : ce script peut extraire la clé de CompatibleInfo.cfg et systemInfo.cfg . Veuillez noter qu'il est écrit en Python 3 . Modifiez d'abord le search_path, puis exécutez le script avec
$ python3 extract_key_from_cfg_files.py
sqlcipher-tools/decrypt.c m'aide beaucoup à comprendre comment fonctionne sqlcipher.
wechat-dump/decrypt-db.py fournit les paramètres clés de la base de données WeChat.
Documentation sqlcipher : ses fonctionnalités de sécurité détaillées.
Correction du problème n°4 : ne compilera pas avec openssl 1.1 : merci @couling pour le patch openssl 1.1.