Get all messages from Whatsapp

前端 未结 8 1380
执念已碎
执念已碎 2020-11-27 11:33

I\'m trying to implement an app that will show in a textview all the messages received from Whatsapp. Is there any way to do it? Is it possible to extract all the messages f

相关标签:
8条回答
  • 2020-11-27 12:08

    If you really want something simple and know how to write/run Python, take a look at the 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()))
    

    Full run:

    (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 has mentioned an even simpler way:

    openssl aes-192-ecb -d -in msgstore.db.crypt -out msgstore.db -K 346a23652a46392b4d73257c67317e352e3372482177652c
    
    0 讨论(0)
  • 2020-11-27 12:14

    Working Android Code: (No root required)

    Once you have access to the dbcrypt5 file , here is the android code to decrypt it:

    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");
    
    0 讨论(0)
  • 2020-11-27 12:14

    I'm not sure if WhatsApp really stores it's stuff in a sqlite database stored in the private app space but it may be worth a try to do the same I suggested here. You will need root access for this.

    0 讨论(0)
  • 2020-11-27 12:17

    Whatsapp store all messages in an encrypted database (pyCrypt) which is very easy to decipher using Python.

    You can fetch this database easily on Android, iPhone, Blackberry and dump it into html file. Here are complete instructions: Read, Extract WhatsApp Messages backup on Android, iPhone, Blackberry

    Disclaimer: I researched and wrote this extensive guide.

    0 讨论(0)
  • 2020-11-27 12:19

    For rooted users :whats app store all message and contacts in msgstore.db and wa.db files in plain text.These files are available in /data/data/com.whatsapp/databases/. you can open these files using any sqlite browser like SQLite Database Browser.

    0 讨论(0)
  • 2020-11-27 12:20

    Yes, it must be ways to get msgs from WhatsApp, since there are some tools available on the market help WhatsApp users to backup WhatsApp chat history to their computer, I know this from here. Therefore, you must be able to implement such kind of app. Maybe you can find these tool on the market to see how they work.

    0 讨论(0)
提交回复
热议问题