从Whatsapp获取所有消息

use*_*833 37 sms android messages inbox

我正在尝试实现一个应用程序,它将在textview中显示从Whatsapp收到的所有消息.有什么办法吗?是否有可能从Whatsapp中提取所有消息?

Tar*_*nfx 27

Whatsapp将所有消息存储在加密数据库(pyCrypt)中,这很容易使用Python进行解密.

您可以在Android,iPhone,Blackberry上轻松获取此数据库并将其转储到html文件中.以下是完整说明:在Android,iPhone,Blackberry上阅读,提取WhatsApp消息备份

免责声明:我研究并撰写了这篇广泛的指南.

  • 现在它的 db.crypt5 (3认同)

ama*_*Bit 17

使用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");
Run Code Online (Sandbox Code Playgroud)


Ren*_*Wal 9

编辑

由于WhatsApp付出了一些努力来改进他们的加密系统,因此获取数据并不那么容易.随着WhatsApp的更新版本,它不再可能使用adb backup.应用程序可以拒绝备份,WhatsApp客户端可以做到这一点.如果您碰巧有root电话,可以使用root shell获取未加密的数据库文件.

如果你没有root,如果你有一个旧的WhatsApp APK,你仍然可以解密数据.找到仍允许备份的版本.然后,您可以备份应用程序的数据文件夹,其中包含一个名为的加密密钥key.

现在您需要加密的数据库.使用您选择的文件浏览器,或者,如果您更喜欢命令行,请使用adb:

adb pull /sdcard/WhatsApp/Databases/msgstore.db.crypt12
Run Code Online (Sandbox Code Playgroud)

使用这两个文件,您现在可以使用https://gitlab.com/digitalinternals/whatsapp-crypt12来获取纯文本数据库.不再可能使用Linux板工具,openssl因为WhatsApp似乎使用Spongy Castle API的修改版本进行openssl不理解的加密.

原始答案(仅适用于旧的crypt7)

由于whatsapp现在使用crypt7格式,因此不再容易获取和解密数据库.有一种使用ADB和USB调试的工作方法.

您可以通过ADB获取加密密钥并解密存储在/ sdcard上的消息数据库,或者只是通过ADB备份获得数据库的普通版本,这似乎是更容易的选择.

要获取数据库,请执行以下操作:

将Android手机连接到电脑.现在跑

adb backup -f whatsapp_backup.ab -noapk com.whatsapp
Run Code Online (Sandbox Code Playgroud)

备份WhatsApp在其私人文件夹中创建的所有文件.
您将使用带有一些ADB标头的tar格式获取zlib压缩文件.我们需要首先摆脱这些标题,因为它们混淆了解压缩命令:

dd if=whatsapp_backup.ab ibs=1 skip=24 of=whatsapp_backup.ab.nohdr
Run Code Online (Sandbox Code Playgroud)

该文件现在可以解压缩:

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

此命令运行Python并使用zlib将文件解压缩到whatsapp_backup.tar
现在我们可以解析该文件:

tar xf whatsapp_backup.tar
Run Code Online (Sandbox Code Playgroud)

存档现在被解压缩到您当前的工作目录,您可以在apps/com.whatsapp/db /中找到数据库(msgstore.db和wa.db).


Ped*_*ran 6

您只能以我认为的root用户身份访问位于SD卡上的WhatsApp数据库.如果你打开"\ data\data\com.whatsapp",你会看到"数据库"链接到"\ firstboot\sqlite\com.whatsapp \"