Подтвердить что ты не робот

Получить все сообщения от Whatsapp

Я пытаюсь реализовать приложение, которое будет отображать в текстовом виде все сообщения, полученные от Whatsapp. Есть ли способ сделать это? Можно ли извлечь все сообщения из Whatsapp?

4b9b3361

Ответ 1

Whatsapp хранит все сообщения в зашифрованной базе данных (pyCrypt), которые очень легко расшифровывать с помощью Python.

Вы можете легко загрузить эту базу данных на Android, iPhone, Blackberry и выгрузить ее в html файл. Ниже приведены полные инструкции: Чтение, извлечение резервных копий WhatsApp Messages на Android, iPhone, Blackberry

Отказ от ответственности: я исследовал и написал это обширное руководство.

Ответ 2

Рабочий код для Android: (не требуется root)

Как только у вас есть доступ к файлу dbcrypt5, вот код Android для его расшифровки:

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");

Ответ 3

Изменить

Как WhatsApp прилагает некоторые усилия для улучшения своей системы шифрования, получение данных не так просто. С более новыми версиями WhatsApp больше нельзя использовать adb backup. Приложения могут отказать в резервном копировании, и клиент WhatsApp делает это. Если у вас есть корневой телефон, вы можете использовать корневую оболочку для получения файла незашифрованной базы данных.

Если у вас нет root, вы можете расшифровать данные, если у вас старый APC WhatsApp. Найдите версию, которая по-прежнему позволяет создавать резервные копии. Затем вы можете сделать резервную копию папки данных приложения, которая будет содержать ключ шифрования, ну, key.

Теперь вам понадобится зашифрованная база данных. Используйте проводник файлов по вашему выбору или, если вам больше нравится командная строка, используйте adb:

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

Используя два файла, вы можете теперь использовать https://gitlab.com/digitalinternals/whatsapp-crypt12, чтобы получить базу данных обычного текста. Больше не возможно использовать инструменты платформы Linux, такие как openssl, потому что WhatsApp, похоже, использует модифицированную версию Spongy Castle API для криптографии, которая openssl не понимает.

Оригинальный ответ (только для старого crypt7)

Поскольку whatsapp теперь использует формат crypt7, получить и расшифровать базу данных не так просто. Существует рабочий подход с использованием ADB и USB-отладки.

Вы можете получить ключи шифрования через ADB и дешифровать базу данных сообщений, хранящуюся на /sdcard, или просто получить обычную версию базы данных через резервное копирование АБР, что кажется более простым вариантом.

Чтобы получить базу данных, сделайте следующее:

Подключите телефон Android к компьютеру. Теперь запустите

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

для резервного копирования всех файлов WhatsApp, созданных в его частной папке.
Вы получите сжатый файл zlib с использованием формата tar с некоторыми заголовками ADB. Нам нужно сначала избавиться от этих заголовков, поскольку они путают команду декомпрессии:

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

Теперь файл можно распаковать:

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

Эта команда запускает Python и распаковывает файл с помощью zlib в whatsapp_backup.tar
Теперь мы можем отключить файл:

tar xf whatsapp_backup.tar

Теперь архив извлекается в ваш текущий рабочий каталог, и вы можете найти базы данных (msgstore.db и wa.db) в приложениях/com.whatsapp/db/

Ответ 4

Вы можете получить доступ к базе данных WhatsApp, расположенной на SD-карте, только как пользователь root. если вы откроете "\ data\data\com.whatsapp", вы увидите, что "базы данных" связаны с "\ firstboot\sqlite\com.whatsapp \"

Ответ 5

Для корневых пользователей: whats app хранит все сообщения и контакты в файлах msgstore.db и wa.db в текстовом формате. Эти файлы доступны в /data/data/com.whatsapp/databases/. вы можете открыть эти файлы с помощью любого SQL-браузера, такого как SQLite Database Browser.

Ответ 6

Если вы действительно хотите что-то простое и знаете, как писать/запускать Python, посмотрите на script Bas Bosschert: источники

#!/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()))

Полный запуск:

(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>

Притам Барал упомянул еще более простой способ:

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

Ответ 7

Я не уверен, действительно ли WhatsApp хранит его в базе данных sqlite, хранящейся в закрытом пространстве приложения, но, возможно, стоит попытаться сделать то же самое, что я предложил здесь. Для этого вам понадобится root-доступ.

Ответ 9

Да, это должны быть способы получить msgs из WhatsApp, так как есть некоторые доступные на рынке инструменты, помогающие пользователям WhatsApp создавать резервные копии истории чатов WhatsApp на своем компьютере, я знаю это из здесь. Поэтому вы должны иметь возможность реализовать такое приложение. Возможно, вы можете найти этот инструмент на рынке, чтобы посмотреть, как они работают.