it-swarm.com.de

Holen Sie sich alle Nachrichten von WhatsApp

Ich versuche eine App zu implementieren, die in einer Textansicht alle von Whatsapp empfangenen Nachrichten anzeigt. Gibt es eine Möglichkeit, dies zu tun? Ist es möglich, alle Nachrichten von WhatsApp zu extrahieren?

35
user1141833

WhatsApp speichert alle Nachrichten in einer verschlüsselten Datenbank (pyCrypt), die mit Python sehr einfach zu entschlüsseln ist.

Sie können diese Datenbank einfach auf Android, iPhone, Blackberry abrufen und in einer HTML-Datei ablegen. Hier sind vollständige Anweisungen: Lesen, Extrahieren von WhatsApp-Nachrichten-Backup auf Android, iPhone, Blackberry

Haftungsausschluss: Ich habe diesen umfangreichen Leitfaden recherchiert und geschrieben.

27
Taranfx

Working Android Code: (Kein root erforderlich)

Sobald Sie Zugriff auf die Datei dbcrypt5 haben, finden Sie hier den Code Android zum Entschlüsseln:

private byte[] key = { (byte) 141, 75, 21, 92, (byte) 201, (byte) 255,
        (byte) 129, (byte) 229, (byte) 203, (byte) 246, (byte) 250, 120,
        25, 54, 106, 62, (byte) 198, 33, (byte) 166, 86, 65, 108,
        (byte) 215, (byte) 147 };

private final byte[] iv = { 0x1E, 0x39, (byte) 0xF3, 0x69, (byte) 0xE9, 0xD,
        (byte) 0xB3, 0x3A, (byte) 0xA7, 0x3B, 0x44, 0x2B, (byte) 0xBB,
        (byte) 0xB6, (byte) 0xB0, (byte) 0xB9 };
   long start = System.currentTimeMillis();

    // create paths
    backupPath = Environment.getExternalStorageDirectory()
            .getAbsolutePath() + "/WhatsApp/Databases/msgstore.db.crypt5";
    outputPath = Environment.getExternalStorageDirectory()
            .getAbsolutePath() + "/WhatsApp/Databases/msgstore.db.decrypt";

    File backup = new File(backupPath);

    // check if file exists / is accessible
    if (!backup.isFile()) {
        Log.e(TAG, "Backup file not found! Path: " + backupPath);
        return;
    }

    // acquire account name
    AccountManager manager = AccountManager.get(this);
    Account[] accounts = manager.getAccountsByType("com.google");

    if (accounts.length == 0) {
        Log.e(TAG, "Unable to fetch account!");
        return;
    }

    String account = accounts[0].name;

    try {
        // calculate md5 hash over account name
        MessageDigest message = MessageDigest.getInstance("MD5");
        message.update(account.getBytes());
        byte[] md5 = message.digest();

        // generate key for decryption
        for (int i = 0; i < 24; i++)
            key[i] ^= md5[i & 0xF];

        // read encrypted byte stream
        byte[] data = new byte[(int) backup.length()];
        DataInputStream reader = new DataInputStream(new FileInputStream(
                backup));
        reader.readFully(data);
        reader.close();

        // create output writer
        File output = new File(outputPath);
        DataOutputStream writer = new DataOutputStream(
                new FileOutputStream(output));

        // decrypt file
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secret = new SecretKeySpec(key, "AES");
        IvParameterSpec vector = new IvParameterSpec(iv);
        cipher.init(Cipher.DECRYPT_MODE, secret, vector);
        writer.write(cipher.update(data));
        writer.write(cipher.doFinal());
        writer.close();
    } catch (NoSuchAlgorithmException e) {
        Log.e(TAG, "Could not acquire hash algorithm!", e);
        return;
    } catch (IOException e) {
        Log.e(TAG, "Error accessing file!", e);
        return;
    } catch (Exception e) {
        Log.e(TAG, "Something went wrong during the encryption!", e);
        return;
    }

    long end = System.currentTimeMillis();

    Log.i(TAG, "Success! It took " + (end - start) + "ms");
17
amalBit

Bearbeiten

Da WhatsApp einige Anstrengungen unternimmt, um das Verschlüsselungssystem zu verbessern, ist das Abrufen der Daten nicht mehr so ​​einfach. Mit neueren Versionen von WhatsApp ist es nicht mehr möglich, adb backup Zu verwenden. Apps können Backups ablehnen, und der WhatsApp-Client tut dies. Wenn Sie ein Telefon mit Rootberechtigung haben, können Sie eine Root-Shell verwenden, um die unverschlüsselte Datenbankdatei abzurufen.

Wenn Sie nicht über root verfügen, können Sie die Daten auch mit einem alten WhatsApp-APK entschlüsseln. Suchen Sie eine Version, die noch Sicherungen zulässt. Anschließend können Sie eine Sicherungskopie des Datenordners der App erstellen, der einen Verschlüsselungsschlüssel mit dem Namen key enthält.

Jetzt benötigen Sie die verschlüsselte Datenbank. Verwenden Sie einen Datei-Explorer Ihrer Wahl oder, wenn Sie die Befehlszeile mehr mögen, verwenden Sie adb:

adb pull /sdcard/WhatsApp/Databases/msgstore.db.crypt12

Mit den beiden Dateien können Sie jetzt https://gitlab.com/digitalinternals/whatsapp-crypt12 verwenden, um die Nur-Text-Datenbank abzurufen. Es ist nicht mehr möglich, Linux-Board-Tools wie openssl zu verwenden, da WhatsApp anscheinend eine modifizierte Version der Spongy Castle API für Kryptografie verwendet, die openssl nicht versteht.

Originalantwort (nur für die alte Krypta7)

Da WhatsApp jetzt das Crypt7-Format verwendet, ist es nicht mehr so ​​einfach, die Datenbank abzurufen und zu entschlüsseln. Es gibt einen funktionierenden Ansatz, der ADB- und USB-Debugging verwendet.

Sie können entweder die Verschlüsselungsschlüssel über ADB beziehen und die auf/sdcard gespeicherte Nachrichtendatenbank entschlüsseln, oder Sie erhalten einfach die einfache Version der Datenbank über ADB-Backup, was die einfachere Option zu sein scheint.

Gehen Sie wie folgt vor, um die Datenbank abzurufen:

Verbinden Sie Ihr Android mit Ihrem Computer. Führen Sie nun

adb backup -f whatsapp_backup.ab -noapk com.whatsapp

um alle Dateien zu sichern, die WhatsApp in seinem privaten Ordner erstellt hat.
Sie erhalten eine zlib-komprimierte Datei im tar-Format mit einigen ADB-Headern. Diese Header müssen zuerst entfernt werden, da sie den Dekomprimierungsbefehl verwirren:

dd if=whatsapp_backup.ab ibs=1 skip=24 of=whatsapp_backup.ab.nohdr

Die Datei kann jetzt dekomprimiert werden:

cat whatsapp_backup.ab.nohdr | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" 1> whatsapp_backup.tar

Dieser Befehl führt Python aus und dekomprimiert die Datei mit zlib zu whatsapp_backup.tar
Nun können wir die Datei UNTARIEREN:

tar xf whatsapp_backup.tar

Das Archiv wird nun in Ihr aktuelles Arbeitsverzeichnis extrahiert und Sie finden die Datenbanken (msgstore.db und wa.db) in apps/com.whatsapp/db /

9
RenWal

Sie können nur als Root-Benutzer auf die WhatsApp-Datenbank zugreifen, die sich auf der SD-Karte befindet. Wenn Sie "\ data\data\com.whatsapp" öffnen, sehen Sie, dass "database" mit "\ firstboot\sqlite\com.whatsapp \" verknüpft ist.

6
Pedro Teran

Wenn Sie wirklich etwas Einfaches wollen und wissen, wie man Python schreibt/ausführt, schauen Sie sich das Skript Bas Bosschert an: sources

#!/usr/bin/env python

import sys
from Crypto.Cipher import AES

try:
    wafile=sys.argv[1]
except:
    print "Usage: %s <msgstore.db.crypt>" % __file__
    sys.exit(1)

key = "346a23652a46392b4d73257c67317e352e3372482177652c".decode('hex')
cipher = AES.new(key,1)
open('msgstore.db',"wb").write(cipher.decrypt(open(wafile,"rb").read()))

Voller Lauf:

(scratch)[email protected]:/tmp/whatsapp$ mkvirtualenv whatsapp_decrypt
New python executable in whatsapp_decrypt/bin/python
Installing setuptools, pip...done.
(whatsapp_decrypt)[email protected]:/tmp/whatsapp$ pip install pycrypto >/dev/null
(whatsapp_decrypt)[email protected]:/tmp/whatsapp$ wget https://Gist.githubusercontent.com/shurane/ffa15e959e2d134086c9/raw/bc99a9997123bea0ea0acde185e24c7e89133559/whatsapp_decrypt.py >/dev/null
(whatsapp_decrypt)[email protected]:/tmp/whatsapp$ ls
msgstore.db.crypt  whatsapp_decrypt.py
(whatsapp_decrypt)[email protected]:/tmp/whatsapp$ python whatsapp_decrypt.py msgstore.db.crypt
(whatsapp_decrypt)[email protected]:/tmp/whatsapp$ ls
msgstore.db.crypt  msgstore.db  whatsapp_decrypt.py
(whatsapp_decrypt)[email protected]:/tmp/whatsapp$ sqlite3 msgstore.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> PRAGMA table_info(messages);
0|_id|INTEGER|0||1
1|key_remote_jid|TEXT|1||0
2|key_from_me|INTEGER|0||0
3|key_id|TEXT|1||0
4|status|INTEGER|0||0
5|needs_Push|INTEGER|0||0
6|data|TEXT|0||0
7|timestamp|INTEGER|0||0
8|media_url|TEXT|0||0
9|media_mime_type|TEXT|0||0
10|media_wa_type|TEXT|0||0
11|media_size|INTEGER|0||0
12|media_name|TEXT|0||0
13|media_hash|TEXT|0||0
14|media_duration|INTEGER|0||0
15|Origin|INTEGER|0||0
16|latitude|REAL|0||0
17|longitude|REAL|0||0
18|thumb_image|TEXT|0||0
19|remote_resource|TEXT|0||0
20|received_timestamp|INTEGER|0||0
21|send_timestamp|INTEGER|0||0
22|receipt_server_timestamp|INTEGER|0||0
23|receipt_device_timestamp|INTEGER|0||0
24|raw_data|BLOB|0||0
25|recipient_count|INTEGER|0||0
sqlite>

Pritam Baral hat einen noch einfacheren Weg erwähnt:

openssl aes-192-ecb -d -in msgstore.db.crypt -out msgstore.db -K 346a23652a46392b4d73257c67317e352e3372482177652c
3

Für Stammbenutzer: Whats App speichert alle Nachrichten und Kontakte in den Dateien msgstore.db und wa.db im Nur-Text-Format. Diese Dateien sind in /data/data/com.whatsapp/databases/ verfügbar. Sie können diese Dateien mit jedem SQLite-Browser wie SQLite Database Browser öffnen.

3
user3160429

Ja, es muss möglich sein, Nachrichten von WhatsApp abzurufen, da es auf dem Markt einige Tools gibt, mit denen WhatsApp-Benutzer den WhatsApp-Chatverlauf auf ihrem Computer sichern können. Ich kenne das aus hier . Daher müssen Sie in der Lage sein, eine solche App zu implementieren. Vielleicht finden Sie diese Tools auf dem Markt, um zu sehen, wie sie funktionieren.

2
Willa Foster

Ich bin mir nicht sicher, ob WhatsApp seine Inhalte wirklich in einer SQLite-Datenbank speichert, die im privaten App-Bereich gespeichert ist, aber es kann einen Versuch wert sein, dasselbe zu tun, was ich vorgeschlagen habe hier . Sie benötigen dafür root-Zugriff.

1
Luminger