Obteniendo key de WhatsApp (SIN ROOT)

Publicada en Publicada en Android

Hola a todos!

En la entrada de hoy explicaré como conseguir la key de whatsapp sin necesidad de ser root, tuve que hacerlo hace un par de días, así que aprovecho y os comparto todo lo aprendido 🙂

Es importante saber que este método deja de funcionar a partir de Android 7

 

Introducción

La base de datos de WhatsApp (y sus backups) son accesibles por cualquier usuario de Android (cada aplicación corre en una máquina virtual, funcionando ésta como sandbox siendo cada una de ellas un usuario diferente).

O lo que gráficamente viene siendo:

 

Resultado de imagen de android sandbox app

 

Los archivos de muchas aplicaciones, donde WhatsApp está incluida, son públicos, esto es porque se encuentran en un directorio común para todo el sistema, llamado storage (puede cambiar dependiendo del dispositivo), dicho directorio se utiliza para alojar contenido de cualquier aplicación.

El objetivo de hacerlo ahí y no en su propia sandbox, es que, haciéndolo en ese lugar, los ficheros son accesibles por otras aplicaciones, como por ejemplo imágenes. En caso de Whatsapp se alojan aparte de la DB,imágenes, vídeos, documentos...

Además, en dicho directorio también se encuentran carpetas del sistema como “Downloads”,“Documents”, etc... Tal y como se puede comprobar en la siguiente captura:

La ruta de la carpeta WhatsApp alojada en storage puede variar dependiendo del dispositivo, pero, por lo general, suele estar ahí, tal y como se puede comprobar en el siguiente casos:

 

 

Llegados a este punto, es trivial conseguir la base de datos de WhatsApp, el problema reside en que dicha base de datos está cifrada y que la clave de cifrado se aloja en el directorio de la aplicación WhatsApp (en su propia sandbox), por tanto, esta clave deja de ser accesible a otros usuarios (salvo para root).

 

Preparando el entorno

Antes de nada, se necesario acceder vía ADB (Android Debug Bridge) al teléfono, esto nos permitirá interactuar con el Smartphone desde el ordenador (ejecutar comandos, transferir ficheros...). Para poder acceder vía ADB debemos activar el modo debug de nuestro
Smartphone, para ello nos dirigimos a Opciones de desarrollo --> Depuración por USB

 

 

NOTA: Es importante haber realizado la instalación de los drivers correspondientes, ya que ADB es parte de Android Studio (software para desarrollar aplicaciones en Android). Para instalar ADB no es necesario instalar Android Studio al completo, pero si parcialmente.

Más información sobre ADB en: https://www.androidpit.es/que-es-adb-comandos-mas-importantes#adbfastboot

Una vez tengamos ADB, podemos utilizar el comando adb devices para listar los dispositivos conectados:

Si aparece como "Unauthorized" debemos aceptar desde el propio Smartphone la conexión en modo depuración.

 

Una vez aparezca con el estado "device" podemos conectarnos a éste utilizando el comando: adb shell

 

Obteniendo la Base de Datos

Conectados vía ADB, nos dirigimos al directorio de WhatsApp para descargarnos la base de datos:

Alojada como su propio nombre indica en "Databases":

Como se puede observar en la imagen anterior la base de datos está cifrada.
Para descargarnos el directorio completo basta con ejecutar el siguiente comando:

adb pull --> Indicamos que queremos bajarnos un fichero/directorio
/storage/self/primary/WhatsApp/Databases --> Directorio a descargar
C:\WhatsApp\nexus5 --> Directorio donde guardaremos los datos descargados

 

Obteniendo la Key

Teniendo la BBDD solo hace falta la key alojada en /data/data/files/com.whatsapp/key o /data/data/com.whatsapp (depende del dispositivo). Pero puesto a que la shell no se ejecuta con el usuario WhatsApp no tenemos privilegios para obtenerla (ya que no somos root):

 

Una posible alternativa sería intentar “iniciar sesión” como el usuario WhatsApp mediante el comando run-as:

adb exec-out run-as debuggable.app.package.name

Pero WhatsApp no tiene el modo debug activado.

Para este caso concreto existe un script llamado WhatsApp-Key-DB-Extractor que permite extraer la key sin tener privilegios para ello. Dicho script se puede descargar desde la siguiente página http://whatcrypt.com/ o desde el enlace directo
https://codeload.github.com/EliteAndroidApps/WhatsApp-Key-DB-Extractor/zip/master

El fichero comprimido contiene los siguientes directorios:

  • Directorio bin, donde se encuentran los binarios necesarios para lanzar el script (adb,
    curl etc…)
  • Directorio extracted, donde se guardará la base de datos y la key de whatsapp.
  • Y el directorio tmp que como su propio nombre indica utiliza para almacenar ficheros
    temporales.

Por otra parte, contiene el script para diferentes plataformas (Windows/Linux).

Recomendándose utilizar el script en powershell para Windows.

 

Ejecutando el script

El script comienza descargando la versión de WhatsApp 2.11.431, acto seguido, elimina (previo backup) el whatsapp instalado actualmente en el sistema.

Dicho WhatsApp instalado es una versión antigua que permite realizar un backup completo del sistema* (ver el final del post), tal y como nos solicita en la siguiente imagen:

 

Al realizar el backup puede extraer la clave de cifrado.

Al finalizar este proceso, elimina de nuevo la aplicación de WhatsApp y restaura la que teníamos instalada originalmente.

Llegados a este punto el script ya ha extraído tanto la clave de cifrado como la base de datos (ya descifrada) al directorio "extracted":

Por último, para visualizar las conversaciones utilizamos la aplicación WhatsApp-Viewer, que puede ser descargada de su página oficial: http://andreas-mausch.de/whatsapp-viewer/

Para ello, basta con seleccionar el fichero "msgstore.db" en dicha tool:

Obteniendo las conversaciones completas:

Incluido ficheros multimedia:

 

Analizando el script

Este apartado se centrará en analizar el funcionamiento del script paso por paso:

Podemos observar que para verificar que la versión de WhatsApp que instala sea la esperada (2.11.431) comprueba la longitud del apk descargado, de lo contrario, se descarga de su propio mirror.

Acto seguido, lo guarda en el directorio tmp del script con el nombre "LegacyWhatsApp.apk"

Una vez realizado esto, detiene el proceso de whatsapp en ejecución y realiza un backup.

Una vez realizado, desinstala la versión de WhatsApp e instala la descargada anteriormente:

 

En este momento se lanza un backup global de la aplicación:

El siguiente paso que realiza es extraer los ficheros que necesitamos del backup realizado anteriormente:

Por último, vuelve a instalar la versión que poseíamos de WhatsApp, quedando el dispositivo totalmente funcional:

 

Conclusiones

Se infiere que pese a que la versión de WhatsApp descargada es antigua y no funcional, al poseer las mismas firmas que la que teníamos previamente instalada en el sistema puede acceder a la sandbox de la aplicación. Por consiguiente, al poder acceder a dicha sandbox tiene
acceso a la key.

Se deduce también, que dicha versión no posee restricciones a la hora de realizar un backup,por tanto, mediante este método es posible acceder a la key de cifrado.

Para poder afirmar esta conclusión se procede a analizar la versión obsoleta que se instala de WhatsApp, confirmando las sospechas.

En ningún momento existe el flag que habilita o no el poder realizar el backup, por tanto, es permitido ya que es la opción marcada por defecto

5 comentarios en “Obteniendo key de WhatsApp (SIN ROOT)

  1. Muy buen post. Tengo unas preguntas. Es un método seguro? Es decir, la app de WhatsApp queda funcionando normalmente como estaba antes del procedimiento y las conversaciones quedan intactas?
    Si yo ya bajé las base de datos encriptadas a la pc, debo empezar con el procedimiento a partir de "Obteniendo la Key", verdad?
    Muchas gracias.

    1. Hola Sebastian,

      Si, es un método seguro, después de realizar todo el proceso la aplicación de WhatsApp queda 100% funcional y sin ningún tipo de problemas.

      De hecho, si lo haces en Android 7, fallará el proceso y tu dispositivo se quedará sin la aplicación instalada, no hay ningún tipo de problema, hasta así, si la reinstalas, seguirá siendo funcional (sin insertar el código de verificación del número, ni restaurar la DB de mensajes).

      Y así es, debes realizar el proceso desde ese punto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *