ACHTUNG: Dieses Tool sollte NUR zum Knacken Ihrer eigenen Datenbank verwendet werden. Benutzen Sie es NICHT unter illegalen Umständen.
(Dieses Tool kann möglicherweise die unter https://github.com/ppwwyyxx/wechat-dump/wiki, pysqlcipher.dbapi2.DatabaseError: Datei ist verschlüsselt oder keine Datenbank aufgeführten Probleme lösen.)
Bei einigen Geräten erhalten Sie möglicherweise die Fehlermeldung: „Datei ist verschlüsselt oder keine Datenbank“, wenn Sie versuchen, EnMicroMsg.db mit „md5(imei + uin)[:7]“ zu entschlüsseln. Ein möglicher Grund ist, dass WeChat andere Geräte-IDs anstelle von IMEI verwendet, um ein Passwort zu generieren.
Zum Glück ist das 28-Bit-Passwort (insgesamt 16^7 Kombinationen) nicht stark genug, um Brute-Force-Angriffen zu widerstehen.
WeChat verwendet sqlcipher v2, um die Datenbank zu verschlüsseln. Teile der Sicherheitsfunktionen sind wie folgt aufgeführt (von https://www.zetetic.net/sqlcipher/design/):
Das Fellowing ist also unsere Strategie: Holen Sie sich die erste Seite; Erhalten Sie IV aus den letzten 16B und Salz aus den ersten 16B; alle Kombinationen der möglichen Passphrasen durchlaufen; Leiten Sie den entsprechenden Schlüssel ab. Entschlüsseln Sie die Datenbank.
Wir wissen, dass der ursprüngliche Header der SQLite-Datenbank eine 16B-Zeichenfolge ist: „SQLite-Format 3 “, die im verschlüsselten Fall durch das Salt ersetzt wird. Im Folgenden beschreiben 2B die Seitengröße (0x04 0x00) und 1B die Schreibversion ( 0x01 0x02) und 1B Leseversion ( 0x01 0x02). Wir haben 4 identische Bytes, um zu testen, ob wir den richtigen Klartext erhalten. (12.04.2019) Ab Wechat 7 verwendet Tencent die neue Schreib-/Leseversion (0x02), die unsere frühere Erkennung unterbricht. Jetzt werden wir die folgenden drei festen Bytes verwenden, um zu testen, ob wir den richtigen Klartext erhalten: 1. maximaler eingebetteter Nutzlastanteil (0x40) mit Offset 5; 2. minimaler eingebetteter Nutzlastanteil (0x20) mit Offset 6; 3. Blattnutzlastanteil (0x20) mit Offset 7. (Hier können wir Kollisionen einfach ignorieren. Wenn Sie den Durchlauf erfolgreich erhalten, die Datenbank aber immer noch nicht öffnen können, überspringen Sie einfach die „falsche Warnung“ und beginnen Sie mit dem nächsten Durchlauf.)
Die Ausführung eines einzelnen PBKDF2 mit 4000 Iterationen dauert etwa 5 ms. Im schlimmsten Fall dauert das Knacken also 16^7 * 0,005 /3600/24 = 15,5 Tage. Auf einem 8-Core-PC verkürzt sich die Zeit auf 2 Tage (klingt jetzt vernünftig).
Bevor Sie knacken, verwenden Sie bitte extract_key_from_cfg_files.py, um den Schlüssel zu erhalten, wenn systemInfo.cfg und CompatibleInfo.cfg verfügbar sind.
Es stehen zwei Versionen zur Auswahl: eine C-Version und eine Python-Version. Ersteres sollte etwas schneller sein (der Kern basiert auf OpenSSL. Kein Unterschied bei der Berechnung der 4000 Iterationen).
$ sudo apt-get install libssl-dev
$ gcc password_cracker.c -l crypto -o password_cracker.o
Parameter in „crack_enmicromsg_db_(C_version)“ ändern. Prozessnummer: Gesamtzahl der verwendeten Kerne. Hinweis: Wenn Sie den Pass erfolgreich erhalten haben, aber die Datenbank immer noch nicht öffnen können, beginnen Sie mit dem nächsten Pass, indem Sie „pass_start“ ändern.
Start:
$ python2 crack_enmicromsg_db_(C_version).py
Demozweck. Nicht gut geschrieben.
Verwenden Sie den wunderbaren Wechat-Dump von Yuxin Wu, um die gesamte Datenbank zu sichern. Sie müssen ein paar Zeilen in „decrypt-db.py“ anpassen, um den Schlüssel zu verwenden. Viel Spaß!
decrypt_db_with_password.py: Wenn Sie das Passwort bereits kennen, verwenden Sie dieses Skript, um eine entschlüsselte Datenbank zu erhalten, die vom DB Browser für SQLite angezeigt/bearbeitet werden kann.
encrypt_db_again.py: Die Datenbank erneut verschlüsseln. Hinweis: (04. Februar 2018) Es wurde nicht getestet, ob WeChat es korrekt öffnen kann.
extract_key_from_cfg_files.py: Dieses Skript kann Schlüssel aus CompatibleInfo.cfg und systemInfo.cfg extrahieren. Bitte beachten Sie, dass es in Python 3 geschrieben ist. Ändern Sie zuerst den Suchpfad und führen Sie dann das Skript aus
$ python3 extract_key_from_cfg_files.py
sqlcipher-tools/decrypt.c hilft mir sehr zu verstehen, wie sqlcipher funktioniert.
wechat-dump/decrypt-db.py stellt Schlüsselparameter der WeChat-Datenbank bereit.
sqlcipher-Dokumentation: seine detaillierten Sicherheitsfunktionen.
Problem Nr. 4 beheben: Lässt sich nicht mit OpenSSL 1.1 kompilieren: Danke @couling für den OpenSSL 1.1-Patch.