web-dev-qa-db-fra.com

Recevez tous les messages de Whatsapp

J'essaie d'implémenter une application qui affiche dans une vue en texte tous les messages reçus de Whatsapp. Y a-t-il un moyen de le faire? Est-il possible d'extraire tous les messages de Whatsapp?

35
user1141833

Whatsapp stocke tous les messages dans une base de données cryptée (pyCrypt) très facile à déchiffrer avec Python.

Vous pouvez récupérer facilement cette base de données sur Android, iPhone, Blackberry et la vider dans un fichier html. Voici des instructions complètes: Lire, extraire la sauvegarde des messages WhatsApp sur Android, iPhone, Blackberry

Déni de responsabilité: J'ai effectué des recherches et rédigé ce guide détaillé.

27
Taranfx

Fonctionnel Android Code: (aucune racine requise)

Une fois que vous avez accès au fichier dbcrypt5, voici le code Android pour le déchiffrer:

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

Modifier

Alors que WhatsApp s’efforçait d’améliorer son système de cryptage, obtenir les données n’était plus aussi facile. Avec les nouvelles versions de WhatsApp, il n’est plus possible d’utiliser adb backup. Les applications peuvent refuser les sauvegardes et le client WhatsApp le fait. Si vous possédez un téléphone rooté, vous pouvez utiliser un shell root pour obtenir le fichier de base de données non crypté.

Si vous n'avez pas de racine, vous pouvez toujours déchiffrer les données si vous avez un ancien APK de WhatsApp. Recherchez une version qui autorise toujours les sauvegardes. Vous pouvez ensuite effectuer une sauvegarde du dossier de données de l'application, qui contiendra une clé de cryptage nommée, ainsi, key.

Maintenant, vous aurez besoin de la base de données cryptée. Utilisez un explorateur de fichier de votre choix ou, si vous aimez plus la ligne de commande, utilisez adb:

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

En utilisant les deux fichiers, vous pouvez maintenant utiliser https://gitlab.com/digitalinternals/whatsapp-crypt12 pour obtenir la base de données en texte brut. Il n’est plus possible d’utiliser des outils de conseil Linux comme openssl, car WhatsApp semble utiliser une version modifiée de API de Spongy Castle pour une cryptographie que openssl ne comprend pas.

Réponse originale (uniquement pour l'ancien crypt7)

Comme WhatsApp utilise maintenant le format crypt7, il n’est plus aussi simple d’obtenir et de déchiffrer la base de données. Il existe une approche de travail utilisant le débogage ADB et USB.

Vous pouvez obtenir les clés de cryptage via ADB et décrypter la base de données de messages stockée sur/sdcard, ou vous obtenez simplement la version brute de la base de données via la sauvegarde ADB, ce qui semble être l'option la plus simple.

Pour obtenir la base de données, procédez comme suit:

Connectez votre téléphone Android à votre ordinateur. Maintenant, lancez

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

sauvegarder tous les fichiers créés par WhatsApp dans son dossier privé.
Vous obtiendrez un fichier compressé zlib utilisant le format tar avec certains en-têtes ADB. Nous devons d'abord supprimer ces en-têtes car ils confondent la commande de décompression:

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

Le fichier peut maintenant être décompressé:

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

Cette commande exécute Python) et décompresse le fichier à l'aide de zlib en whatsapp_backup.tar.
Nous pouvons maintenant décompresser le fichier:

tar xf whatsapp_backup.tar

L’archive est maintenant extraite dans votre répertoire de travail actuel et vous pouvez trouver les bases de données (msgstore.db et wa.db) dans apps/com.whatsapp/db /

9
RenWal

Vous pouvez accéder à la base de données WhatsApp située sur la carte SD uniquement en tant qu'utilisateur root, je pense. si vous ouvrez "\ data\data\com.whatsapp", vous verrez que "bases de données" est lié à "\ firstboot\sqlite\com.whatsapp \"

6
Pedro Teran

Si vous voulez vraiment quelque chose de simple et que vous savez écrire/exécuter Python, jetez un coup d'œil au script Bas Bosschert: 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()))

Course complète:

(scratch)ehtesh@ackee:/tmp/whatsapp$ mkvirtualenv whatsapp_decrypt
New python executable in whatsapp_decrypt/bin/python
Installing setuptools, pip...done.
(whatsapp_decrypt)ehtesh@ackee:/tmp/whatsapp$ pip install pycrypto >/dev/null
(whatsapp_decrypt)ehtesh@ackee:/tmp/whatsapp$ wget https://Gist.githubusercontent.com/shurane/ffa15e959e2d134086c9/raw/bc99a9997123bea0ea0acde185e24c7e89133559/whatsapp_decrypt.py >/dev/null
(whatsapp_decrypt)ehtesh@ackee:/tmp/whatsapp$ ls
msgstore.db.crypt  whatsapp_decrypt.py
(whatsapp_decrypt)ehtesh@ackee:/tmp/whatsapp$ python whatsapp_decrypt.py msgstore.db.crypt
(whatsapp_decrypt)ehtesh@ackee:/tmp/whatsapp$ ls
msgstore.db.crypt  msgstore.db  whatsapp_decrypt.py
(whatsapp_decrypt)ehtesh@ackee:/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 a mentionné un moyen encore plus simple:

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

Pour les utilisateurs rootés: ce qui est app store tous les messages et contacts dans les fichiers msgstore.db et wa.db en texte brut. Ces fichiers sont disponibles dans /data/data/com.whatsapp/databases/. vous pouvez ouvrir ces fichiers en utilisant n’importe quel navigateur sqlite tel que SQLite Database Browser.

3
user3160429

Oui, il doit y avoir des moyens d'obtenir des messages de WhatsApp, car certains outils disponibles sur le marché aident les utilisateurs de WhatsApp à sauvegarder l'historique des discussions WhatsApp sur leur ordinateur. Je le sais depuis ici . Par conséquent, vous devez être capable de mettre en œuvre ce type d'application. Peut-être que vous pouvez trouver ces outils sur le marché pour voir comment ils fonctionnent.

2
Willa Foster

Je ne sais pas si WhatsApp stocke vraiment ces éléments dans une base de données sqlite stockée dans l'espace réservé aux applications privées, mais cela vaut peut-être la peine d'essayer de faire la même chose que j'ai suggérée ici . Vous aurez besoin d'un accès root pour cela.

1
Luminger