Android

Obteniendo key de WhatsApp (SIN ROOT)

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

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

      1. Hola gracias por la información! Entonces para Android 7 no hay ningún método parecido sin ser root ni tocar mucho el teléfono?

  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.

  2. Hola, tengo guardados un montón de msgstore.db.crypt12 en mi computadora provenientes de dos teléfonos distintos, pero ambos de la misma cuenta (la mia que sigo usando actualmente). es posible obtener la key para poder desencriptar esas databases con mis conversaciones viejas? no quiero combinarlas, solo poder verlas, pero como me robaron el teléfono antiguo pienso que ya no hay forma.. pero yo no se nada sobre el tema.. como podria solucionarlo?

  3. tengo dudas,, ya hice todo, y genero el legacy, donde coloco este archivo? de nuevo en el celular, y reinstalo este archivo apk, que pasa con el otro, el que ya esta instalado, se borra todo? el legacy parece grande, aqui en este archivo esta esta informacion?, para instalar el legacy desistalo el otro? que alguien me explique

    1. Hola José,

      Al instalar el otro apk tu actual whatsapp se desinstala, pero no te preocupes, más tarde se reinstalará y el estado de la aplicación en el smartphone quedará como estaba anteriormente, 100% funcional.

      No debes desinstalar nada, como se indica, el script lo hace todo automáticamente..

  4. hola alvaro, gran articulo. buena informacion y parte didactica tutorial de como hacerlo.
    yo use el extrector de key. consegui extraer la key del movil nuevo. que pasa que tengo unas bases de datos del mismo numero de telefono pero es un telefono anterior. y no me deja leerlas con la key del nuevo movil se puede hacer algo. saludo y muchas gracias

  5. Buen día,yo hice lo del script con el WhatsApp-Key-DB-Extractor pero cuando me sale la ventana de hacer copia de seguridad me sale que tengo que escribir la clave o sino no me habilita la copia y le ingreso de la clave de la huella digital que me mostró cuando le di depuración por usb y se queda ahí pero no hace nada no descarga la base ni la key,me podrías decir porque es eso? o que estoy haciendo mal? porque me pide esa clave obligatoriamente.Gracias

    1. Hola Jady,

      ¿Cuándo haces la copia de seguridad el dispositivo está desbloqueado? Si no es así, hazlo.

      Por otra parte, la clave que mencionas es simplemente como medida de seguridad para evitar que se esté haciendo por un programa de terceros sin tu autorización.

      Cuando algo falla tu propio terminal suele dar un error (éste dura unos pocos segundos), si es así, por favor dime que error te da para que te ayude de una forma más efectiva.

      Por último, ¿estás ejecutando el script como administrador?
      Un saludo.

    2. Hola,no pude ejecutar el adb porque al descargarlo en el zip de la página que recomiendas ni siquiera me muestra ningún archivo SDK Manager.exe.Se queda en el paso de hacer copia de seguridad cuando ejecuto el WhatsApp-Key-DB-Extractor y me pide obligatoriamente la contraseña o sino no me deja pasar,ademas creo que es Android 7,supongo que por eso no deja pasar,hay alguna manera de hacerlo en esa versión de Android?.Gracias

  6. Hola Alvaro. Gracias por compartir tu experiencia. Espero puedas ayudarme con lo siguiento porque estoy desesperado. Hace dos dias ya vengo probando todo lo que leo y nada me funciono. Te cuento un poco la historia para que estes en tema. Tengo un telefono que tenia una linea que la di de baja hace tiempo pero que segui usando porque me daba pereza pasar todas las conversaciones pasarlo a mi nuevo telefono con linea nueva. Lei que se podia hacer el cambio de telefono y linea manteniendo la cuenta y conversaciones. Lo trate de hacer pero evidentemente no me funciono ya que en el telefono nuevo (whatsapp) solo se pasaron los grupos a los que pertenecia pero sin las conversaciones de los grupos o de las personas. Pense que era porque todavia estaba el whatsapp abierto en el telefono viejo y lo borre. Despues me di cuenta que al borrar el whatsapp perdi la key. Solo tengo los db que tenia en google drive. Pero cuando quiero recuperarlo con el whatsapp del telefono nuevo no pasa nada. Mi pregunta es. Si vuelvo a instalar el whatsapp en el telefono viejo usando la linea del telefono nuevo recuperare la key vieja para recuperar los chats? Que se te ocurre. Desde ya mil gracias. Abrazo

  7. Hola:

    Me aparece esto:

    Exception in thread “main” java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
    Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Don’t know how to process version 5
    at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:420)
    at org.nick.abe.Main.main(Main.java:128)
    … 5 more
    Caused by: java.lang.IllegalArgumentException: Don’t know how to process version 5
    at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:282)
    … 6 more
    bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    bin\tar.exe: Error is not recoverable: exiting now
    bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    bin\tar.exe: Error is not recoverable: exiting now
    bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    bin\tar.exe: Error is not recoverable: exiting now
    bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    bin\tar.exe: Error is not recoverable: exiting now
    bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    bin\tar.exe: Error is not recoverable: exiting now

    ¿Cuál es el problema?

    Gracias.

  8. Hola, ¿sabes el por qué de esto?:

    Exception in thread “main” java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
    Caused by: java.lang.RuntimeException: java.lang.NumberFormatException: For input string: “”
    at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:420)
    at org.nick.abe.Main.main(Main.java:128)
    … 5 more
    Caused by: java.lang.NumberFormatException: For input string: “”
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at org.nick.abe.AndroidBackup.extractAsTar(AndroidBackup.java:280)
    … 6 more

    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Error is not recoverable: exiting now
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Error is not recoverable: exiting now
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Error is not recoverable: exiting now
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Error is not recoverable: exiting now
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Cannot open tmp\whatsapp.tar: No such file or directory
    C:\Users\Antonio\Desktop\WhatsApp-Key-DB-Extractor-master\bin\tar.exe: Error is not recoverable: exiting now

    Cleaning up temporary files …

    Saludos y gracias

Deja un comentario

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

Los datos introducidos se guardarán en nuestra base de datos como parte del comentario publicado, como se indica en la política de privacidad.