2 votos

¿Cómo convertir/encriptar WhatsApp .sqlite a .db.crypt8?

Tengo un archivo WhatsApp ChatStorage.sqlite que fue tomado de una copia de seguridad de iPhone, y no entiendo exactamente la estructura de los datos dentro de la base de datos, pero claramente no está encriptado. Quiero usar este archivo para "restaurar" los mensajes que contiene en un teléfono Android más nuevo. Según lo que sé, el formato actual que WhatsApp utiliza para almacenar bases de datos de mensajes es .db.crypt8, que supongo es la misma base de datos SQLite, solo que encriptada (pero podría estar equivocado). WhatsApp (2.12.317) en Android (5.0) no parece "reconocer" el archivo .sqlite sin cifrar como una copia de seguridad de base de datos en la configuración inicial. ¿Hay alguna forma de hacer que acepte el archivo como una copia de seguridad de mensajes? ¿Puedo de alguna manera encriptar el archivo de base de datos en el formato que espera recibir?

3voto

Gezim Puntos 101

Ok... en casa ahora.

No sé si ejecutas una variante de unix u otra cosa... Eso realmente no importa pero todos estos scripts se han ejecutado en Linux.

crear copia de seguridad de iphone (http://libimobiledevice.org)

idevicebackup2 backup

Extrayendo la copia de seguridad

git clone https://github.com/PicciMario/iPhone-Backup-Analyzer-2
make build

luego modificar main.py en la línea 1449

-database = sqlite3.connect(':memory:') # Crear un archivo de base de datos en memoria
+database = sqlite3.connect('/tmp/md.db') # Crear un archivo de base de datos en memoria

luego simplemente inicie el programa y déjelo analizar Manifest.mbdb de la copia de seguridad del iphone

python2.7 main.py

analizar /tmp/md.db y extraer nombres de archivos y medios de whatsapp

sqlite3 /tmp/md.db
SQLite versión 3.8.10.2 2015-05-20 18:17:19
Ingrese ".help" para obtener indicaciones de uso.
sqlite> .mode csv
sqlite> .separator | \n
sqlite> .output files2.csv
sqlite> .headers on
sqlite> select fileid,domain_type,domain,file_path,file_name from indice where domain = "net.whatsapp.WhatsApp" AND domain_type = "AppDomain";
sqlite> .out stdout
sqlite> .quit

copiar archivos y corregir sus nombres (simplemente reemplace con su UUID):

foreach i (cat files2.csv | grep Library/Media/ | grep '""' | sed "s/|\"\".\+$//g" | cut -d "|" -f 2- | sed "s/|/\//g");do;mkdir -p /tmp/extracted/$i;done

foreach i (cat files2.csv | grep Library/Media/ | grep -v '""' | sed "s/|/\//g" | sed "s/\/AppDomain/|AppDomain/");do;src=echo $i | cut -d "|" -f 1;dst=echo $i | cut -d "|" -f 2 | sed "s/.$//g" ; cp -v /Path/to/iphone/backup/UUID/0ef862e6faede9b72c75b948f8b5c9663921e796/$src /tmp/extraído/$dst;done

cp 0ef862e6faede9b72c75b948f8b5c9663921e796/ec50dd986a0f35953e40f6ca9602ad78173e254f /tmp/extracted/Contacts.sqlite

cp 0ef862e6faede9b72c75b948f8b5c9663921e796/7c7fba66680ef796b916b067077cc246adacf01d /tmp/extracted/ChatStorage.sqlite

Ahora tienes tus medios de whatsapp y ChatStorage.sqlite

instalar adb (desde Android-sdk-update-manager) http://developer.android.com/sdk/

En android instalar WhatsApp, activar el modo depuración USB. Configurar WhatsApp y enviar al menos un mensaje y hacer clic en hacer una copia de seguridad en whatsapp. Descargar WhatsApp Legacy y posiblemente también la versión actual:

enlaces https://github.com/AbinashBishoyi/WhatsApp-Key-DB-Extractor-UnOfficial/
wget 'http://www.whatsapp.com/android/current/WhatsApp.apk'

adb install -r -d LegacyWhatsApp.apk

hacer copia de seguridad de whatsapp (http://www.digitalinternals.com/security/).

Esta es la única fase en la que la versión legacy necesita estar instalada:

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

Extraer clave (http://www.digitalinternals.com/security/decrypt-whatsapp-crypt8-database-messages/419/):

dd if=whatsapp.ab bs=4096 skip=24 iflag=skip_bytes | openssl zlib -d > whatsapp.tar
tar xvf whatsapp.tar apps/com.whatsapp/db/msgstore.db apps/com.whatsapp/f/key k=$(hexdump -ve '2/1 "%02x"' apps/com.whatsapp/f/key | cut -b 253-316)

Obtener copia de mensajes de whatsapp

adb pull /sdcard/WhatsApp/Database/msgstore.db.crypt8 msgstore.db.crypt8

descifrar:

iv=$(hexdump -n 67 -ve '2/1 "%02x"' msgstore.db.crypt8 | cut -b 103-134);dd if=msgstore.db.crypt8 bs=4096 skip=67 iflag=skip_bytes | openssl enc -aes-256-cbc -d -nosalt -bufsize 16384 -K $k -iv $iv | gunzip > msgstore.db

combinar bases de datos (https://gist.github.com/paracycle/6107205). El script proporcionado aquí no está completo y, tras leer múltiples páginas de investigación forense, ahora sé cómo modificarlo para obtener también tus medios... pero eso es trabajo en progreso

De todos modos:

sqlite3 -init ../convert.sql ../merged.db

cifrar:

dd if=msgstore.db.crypt8 iflag=count_bytes count=67 of=msgstore.db.crypt8; cat merged.db | gzip -5 |openssl enc -aes-256-cbc -e -nosalt -bufsize 16384 -K $k -iv $iv | dd of=msgstore.db.crypt8 bs=4096 seek=67 oflag=seek_bytes conv=notrunc

Copiar la nueva copia de seguridad:

adb push msgstore.db.crypt8 /sdcard/WhatsApp/Databases/

Volver a colocar la versión actual en android y ejecutar whatsapp para leer la copia de seguridad:

adb install -r -d WhatsApp.apk

0 votos

Seguiré trabajando en este tema. Estoy pensando en escribir un pequeño backend en C para automatizar este trabajo... Pero probablemente no tenga tiempo para hacerlo.

0 votos

Vaya, esto parece muy prometedor, lo probaré cuando llegue a casa.

0voto

Will Sheppard Puntos 522

Bueno, he estado haciendo lo mismo durante 2 días. Fue relativamente simple. Aún no he descubierto cómo incluir medios.

Software necesario:

Openssl Adb (puente de depuración de Android) Sqlite3 versión antigua de WhatsApp +herramientas comunes de Unix

El flujo de trabajo es el siguiente:

Extraer todos los medios de la copia de seguridad de iPhone. Los nombres de archivo están hasheados y los índices están en Manifest.mbdb y pueden ser simplemente copiados a las ubicaciones correctas. Con adb instalar la versión antigua de WhatsApp y recuperar la clave de Android con adb backup. Desinstalar WhatsApp antiguo. Con adb descargar msgstore.db.crypt8 de Android. Quitar encabezado y iv y desencriptar con clave y iv usando openssl. Luego descomprimir con gunzip y obtendrás el msgstore.db

Combinar msgstore.db con chatstorage.sqlite con comandos SQL estándar.

Comprimir con gzip y cifrar msgstore.db usando la misma clave y cualquier iv. Almacenar el encabezado + el iv y los datos cifrados en un archivo concatenado y nombrado msgstore.db.crypt8. Mover el archivo a Android /sdcard/WhatsApp/Database/ con adb e instalar WhatsApp.

Puedo darte las fuentes pero no estoy en casa en este momento.. Así que lo haré más tarde...

1 votos

Esto suena bien. ¿Podrías tal vez enlazar a las herramientas necesarias? Principalmente al APK antiguo de WhatsApp.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X