android - muchos - cuales son las principales funciones de whatsapp
Obtener todos los mensajes de Whatsapp (9)
Estoy intentando implementar una aplicación que mostrará en una vista de texto todos los mensajes recibidos de Whatsapp. ¿Hay alguna forma de hacerlo? ¿Es posible extraer todos los mensajes de Whatsapp?
Código de Android que funciona: (No se requiere root)
Una vez que tenga acceso al archivo dbcrypt5, aquí está el código de Android para descifrarlo:
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");
Editar
Como WhatsApp se esforzó por mejorar su sistema de encriptación, obtener los datos ya no es tan fácil. Con las versiones más nuevas de WhatsApp, ya no es posible usar la adb backup
. Las aplicaciones pueden denegar copias de seguridad y el cliente de WhatsApp hace eso. Si tiene un teléfono rooteado, puede usar un shell raíz para obtener el archivo de base de datos no encriptado.
Si no tiene root, aún puede descifrar los datos si tiene un antiguo APK de WhatsApp. Encuentre una versión que aún permita copias de seguridad. Luego puede hacer una copia de seguridad de la carpeta de datos de la aplicación, que contendrá una clave de cifrado llamada, bueno, key
.
Ahora necesitarás la base de datos encriptada. Utilice un explorador de archivos de su elección o, si le gusta más la línea de comando, use adb:
adb pull /sdcard/WhatsApp/Databases/msgstore.db.crypt12
Con los dos archivos, ahora puede usar https://gitlab.com/digitalinternals/whatsapp-crypt12 para obtener la base de datos de texto sin formato. Ya no es posible usar herramientas de la placa Linux como openssl
porque WhatsApp parece usar una versión modificada de la API de Spongy Castle para la criptografía que openssl no comprende.
Respuesta original (solo para la antigua crypt7)
Como WhatsApp ahora usa el formato crypt7, ya no es tan fácil obtener y descifrar la base de datos. Hay un enfoque de trabajo que utiliza ADB y depuración de USB.
Puede obtener las claves de cifrado a través de ADB y descifrar la base de datos de mensajes almacenada en / sdcard, o simplemente obtiene la versión simple de la base de datos a través de la copia de seguridad de ADB, lo que parece ser la opción más fácil.
Para obtener la base de datos, haga lo siguiente:
Conecte su teléfono Android a su computadora. Ahora corre
adb backup -f whatsapp_backup.ab -noapk com.whatsapp
hacer una copia de seguridad de todos los archivos que WhatsApp ha creado en su carpeta privada.
Obtendrá un archivo zlib comprimido utilizando el formato tar con algunos encabezados ADB. Necesitamos deshacernos de esos encabezados primero ya que confunden el comando de descompresión:
dd if=whatsapp_backup.ab ibs=1 skip=24 of=whatsapp_backup.ab.nohdr
El archivo ahora se puede descomprimir:
cat whatsapp_backup.ab.nohdr | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" 1> whatsapp_backup.tar
Este comando ejecuta Python y descomprime el archivo usando zlib para whatsapp_backup.tar
Ahora podemos deshacer el archivo:
tar xf whatsapp_backup.tar
El archivo ahora se extrae a su directorio de trabajo actual y puede encontrar las bases de datos (msgstore.db y wa.db) en apps / com.whatsapp / db /
No estoy seguro si WhatsApp realmente almacena sus cosas en una base de datos sqlite almacenada en el espacio de aplicaciones privadas, pero puede valer la pena intentar hacer lo mismo que sugerí here . Necesitará acceso de root para esto.
Para usuarios rooteados: cuál es la aplicación que almacena todos los mensajes y contactos en los archivos msgstore.db y wa.db en texto plano. Estos archivos están disponibles en /data/data/com.whatsapp/databases/. puede abrir estos archivos usando cualquier navegador sqlite como el navegador de bases de datos SQLite.
Puede tener acceso a la base de datos de WhatsApp que se encuentra en la tarjeta SD, creo que es un usuario root. si abre "/ data / data / com.whatsapp", verá que "databases" está vinculado a "/ firstboot / sqlite / com.whatsapp /"
Sí, deben ser formas de recibir mensajes de WhatsApp, ya que hay algunas herramientas disponibles en el mercado que ayudan a los usuarios de WhatsApp a hacer una copia de seguridad del historial de chat de WhatsApp en su computadora. Lo sé desde here . Por lo tanto, debe poder implementar ese tipo de aplicación. Tal vez puedas encontrar estas herramientas en el mercado para ver cómo funcionan.
Si realmente quiere algo simple y sabe cómo escribir / ejecutar Python, eche un vistazo al guión de 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()))
Ejecución completa:
(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 ha mencionado una forma aún más simple:
openssl aes-192-ecb -d -in msgstore.db.crypt -out msgstore.db -K 346a23652a46392b4d73257c67317e352e3372482177652c
WhatsApp Xtract, mira los siguientes enlaces:
Whatsapp almacena todos los mensajes en una base de datos encriptada (pyCrypt) que es muy fácil de descifrar usando Python.
Puede buscar esta base de datos fácilmente en Android, iPhone, Blackberry y volcarla en un archivo html. Aquí hay instrucciones completas: Lea, extraiga la copia de seguridad de los mensajes de WhatsApp en Android, iPhone, Blackberry
Descargo de responsabilidad: Investigué y escribí esta extensa guía.