Share on Google+Share on FacebookTweet about this on Twitter

He aquí otro gran ejemplo de lo que la tecnología nos brinda: WhatsApp, y otro gran ejemplo del desconocimiento que se tiene de la tecnología. Nadie duda ya que la tecnología haya relanzado nuestro modo de vida, sin contar con los cambios profundos que ha sufrido nuestra sociedad actual debido a ella. Posiblemente uno de los grandes cambios que hemos sufrido en estos últimos años haya sido la manera de comunicarnos unos con otros. Desde las antiguas Cartas postales, pasando por el telégrafo, el teléfono fijo, el correo electrónico, el teléfono móvil, la mensajería instantánea, las redes sociales… la tecnología a día de hoy nos permite comunicarnos prácticamente con cualquier persona del mundo en tiempo real, ya sea por mensajes, por videollamadas… y esto realmente es increible y no seré yo quien diga que esto es algo dañino. Lo que es dañino es vivir en la ignorancia sin preguntarnos como funcionan las cosas o el peligro que puedan entrañar dichos sistemas de comunicación.

Son malas las redes sociales? No, lo que es malo es ceder tu alma a Facebook haciéndole dueño de toda tu vida personal. Es malo el uso de WhatsApp? No, lo que es malo es hacerse fotos/vídeos desnudos y enviarlos a cualquier persona desde redes públicas. Lo que quiero decir es que cualquier herramienta es buena siempre y cuando se sepa usar, o al menos que sepamos los pros y los contras que ellas acarrean, y así podemos decidir si nos compensa o no usarlos. Bien, pues como ya he dicho hoy le toca a esa gran aplicación que estoy seguro la gran mayoría de los lectores tienen o conocen (yo el primero): WhatsApp. ¿El por qué de esta publicación? Sinceramente por dos motivos. El primero por la gran cantidad de fallos de seguridad y privacidad que tiene desde mi punto de vista, y segundo porque como ya he dicho a día de hoy posiblemente sea una de las aplicaciones para dispositivos portátiles más usadas (sea cual sea la plataforma). Y por qué no, también he decir que me ha causado grandes momentos de risa floja gastando alguna que otra broma…

Por descontado, antes de comenzar quiero recordar como es costumbre que el interés particular es mostrar y enseñar las virtudes y defectos de esta aplicación, no enseñar a otros lammers o usuaurios malintencionados a aprovecharse de ellos! sino a proteger a los usuarios que puedan sufrirlos. Dicho esto, vamos a tocar algunos temas interesantes:

  • Apuntes generales sobre el funcionamiento de WhatsApp: Transmisión de datos, recepción, servidores de WhatsApp…
  • Historiales de conversaciones: Utilidad, peligro, Desencriptado de las copias de seguridad…
  • Aplicación práctica: Manipulación de los “metadatos” de los mensajes para la creación de miniaturas falsas en las imágenes transmitidas o el envío de imágenes gigantescas para agotar los datos de cualquiera

 

 

Funcionamiento

 Bueno, el funcionamiento de WhatsApp está muy bien pensado y aunque aquí deje algunos tirones de oreja no implica que no esté de acuerdo con la gran mayoría del sistema usado.

En realidad, WhatsApp no ha creado nada nuevo de cero (o muy poco), sino que ha cogido lo mejor de cada programa de mensajería que ya teníamos y lo ha puesto todo junto. Eso no quiere decir que sea el mejor programa de mensajería, o que sea imprescindible, e incluso personalmente considero mucho más imprescindible Google Talk. No obstante la gran ventaja que ha hecho de WhatsApp que su uso sea exponental no ha sido ni mucho menos el poder compartir fotos, vídeos o ser multiplataforma. Lo que ha hecho de WhatsApp tan extendido ha sido a su vez lo que yo considero el peor fallo que tiene: No hace falte añadir/aceptar a nadie.

Los usuarios que lo instalan tan solo tienen que acceder al programa y este les dice automáticamente no solo quienes lo usan!! sino también el mensaje personal de cada uno, si está en línea, cuando fue la última vez que se conectó… es decir que tan solo te hace falta el número de teléfono de una persona para saber todos esos datos, e incluso si quieres ponerte en contacto con él o aplicar alguna de las “técnicas” pernisiosas que veremos al final del todo. No necesitas que el conocido o desconocido te acepte, te conozca… si tiene WhatsApp, puedes hablar con él. Sí, muchos dirán que puedes bloquear a quien quiera por supuesto, pero para cuando llegue ese caso igual ya es tarde. ¿El lado positivo de todo ello? Fácil, que no tienes que agregar a nadie y lo que ello implica. Como vemos, ya desde el comienzo vemos el balance constante que hay que tener entre Comodidad Vs Seguridad y privacidad… en este caso el usuario prefiere Comodidad… (craso error en mi opinión)

 

Para entender el funcionamiento de WhatsApp por desgracia, tenemos que entender aunque solo sea por encima como funcionan las plataformas móviles que tenemos la inmensa mayoría a día de hoy, ya sean dispositivos Android o iOS. Podría citar también Windows Phone o BlackBerry, pero sinceramente solo Android copa casi el 70% del mercado, si a eso le sumamos la aportación de iOS… ¿Por qué es importante como funcionan nuestros dispositivos? porque para ser posible usar ciertos servicios, muchas veces la limitación o viene de la imaginación del de fuera, sino de nuestros dispositivos en sí mismos.

Enviar un mensaje desde un dispositivo a otro es fácil y no tiene complicación alguna, pero.. ¿que pasa si el otro dispositivo no está disponible? A fin de cuenta, de que sirve un programa de mensajería de este tipo si tan solo podemos ponernos en contacto con nuestros allegados cuando la otra persona tiene cobertura de datos o WIFI. Esta tontería implica automáticamente la necesidad de una infraestructura importante y una forma totalmente diferente de enfocar este tipo de programas. No sirve los métodos tradicionales de realizar comunicaciones directas Origen<>Destino, que aunque suelen ser mucho más rápidos y seguros no son viables a menos que Origen y Destino estén siempre 24 horas al día conectados. Eso hace necesario un servidor (o varios) de la compañía del programa (en este caso WhatsApp) que centraliza TODO. Dicho de otro modo, cada mensaje, imagen, contacto, vídeo… que se transmite (o creemos transmitir) a un contacto, dichos datos en realidad NO VAN a nuestro contacto, se envían siempre absolutamente todos a los servidores de WhatsApp. El servidor de WhatsApp está en contacto continuamente con cada dispositivo que está conectado a WhatsApp por medio de un canal (supuestamente seguro), que usa no solo para recibir datos del usuario, sino para enviarle (o avisarle) de que tiene un mensaje nuevo.

En realidad es diferente como funciona WhatsApp para iOS o para Android. En el caso de Android, los dispositivos son todos multitarea, lo que implica que WhatsApp se encuentra SIEMPRE ejecutándose y funcionando, si el servidor de WhatsApp recibe un mensaje para nosotros, nos envía el mensaje por medio de ese canal abierto que tiene con nosotros, y nos entrega el mensaje de inmediato. iOS no es así. iOS no es multitarea, lo que implica que cuando el usuario NO TIENE por delante la aplicación de WhatsApp abierta, WhatsApp NO ESTA funcionando. En este caso WhatsApp lo que hace es hacer uso de las notificaciones Push de iOS, envía una notificación Push al dispositivo del usuario para avisarle de que tiene un mensaje para él (NO LO ENTREGA), y hasta que el usuario no acepta la notificación o accede de nuevo a WhatsApp, el mensaje no es recibido por el teléfono. Este de echo es el motivo por el cual es muy sencillo saber si un usuario de iPhone está o no mirando WhatsApp. Ya no solo por que aparezca su estado “En línea”, sino porque WhatsApp nos notifica al emisor con el símbolo de la Aspa o la Doble Aspa si el mensaje lo ha recibido el contacto (Un Aspa implica mensaje recibido en los servidores de WhatsApp, dos Aspas implican que el usuario lo ha recibido). Dado que iOS tan solo puede recibir los mensajes una vez abre WhatsApp, podemos usar esa información. En caso de Android no es posible, ya que obtendremos el doble aspa normalmente en cuanto le enviemos el mensaje, da igual que el usuario lo lea o no lo lea, acceda a WhatsApp o no, porque el mensaje habrá sido recibido por su aplicación sin necesidad de que el usuario acceda a ella.

 

La transmisión de “objetos” (entendiendo por objetos audio, imágenes, geolocalización…) se hace de forma diferente. Cuando cualquier usuario manda un objeto a otro, el proceso es diferente:

  1. En caso de ser una imagen, WhatsApp la redimensiona a un máximo de 800*600
  2. Nuestro WhatsApp transmite primero el objeto a los servidores de WhatsApp en una ubicación a priori aleatoria dentro del servidor de WhatsApp
  3. Una vez que ha transmitido la imagen, envía un “mensaje” al contacto en cuestión, pero este mensaje aunque tiene la misma estructura interna que un mensaje de texto, no contiene texto, sino los datos del objeto que ha enviado, como la ubicación del objeto (la URL donde se encuentra), el tipo de objeto que es (imagen, audio…), nombre del archivo… y otros metadatos
  4. WhatsApp como si se tratase de un mensaje normal y corriente de texto, envía el mensaje (o la petición si es iOS) al destino
  5. El destino recibe un mensaje EXACTAMENTE igual que si fuese de texto, pero los metadatos del mensaje informan al dispositivo que hacer. Es decir, si el dispositivo recibe un mensaje con los metadatos de que tiene que descargar una imagen, accederá a la URL de la imagen (que será donde esté alojada la imagen que nos envío nuestro contacto) y la descargará.

 Esto que puede carecer de importancia, veremos como puede tener gran utilidad para un usuario “listo”.

Este sistema, deja abierta la incógnita sobre dos cuestiones principalmente. La primera, dado que los “objetos” no son enviados al otro usuario en una comunicación directa, si pueden ser accedidos desde otros dispositivos o si alguien puede tener acceso a ellos. La segunda, dado que nuestros “objetos” tienen que ser almacenados de forma temporal en los servidores de WhatsApp, ¿Por cuanto tiempo?

Respecto a la primera pregunta, siento decir que por absurdo que resulte CUALQUIER usuario puede acceder a CUALQUIER contenido enviado por CUALQUIER otro usuario, siempre que se den dos premisas: Conozca la ubicación de dicho archivo y no haya sido eliminado de los servidores de WhatsApp. Tampoco hay que ser alarmista, y resultaría bastante complicado poder acceder a dichos contenidos. Recientemente WhatsApp ha hecho cambios que impiden a priori a este contenido de forma directa (a través de un navegador), pero tan solo afecta a las nuevas versiones y para el contenido que se genera por estas, cualquier contenido que se genere por las versiones antiguas o que fue generado por estas, es totalmente accesible.

Respecto a la segunda pregunta, sinceramente desconozco el tiempo por el cual el contenido continua siendo almacenado en los servidores de WhatsApp y no es eliminado. La teoría podría decirnos que en cuanto el “objeto” es descargado por el usuario en cuestión, dicho contenido se elimina de los servidores de WhatsApp, pero esto no es así. Seguramente podrían excusarse con que si reenvías el mensaje no es necesario volver a enviar el archivo a los servidores de WhatsApp o ni siquiera tener dicho contenido en nuestro teléfono. Personalmente no me vale esa excusa, el único dueño de dicho contenido debe de ser el usuario, y por privacidad, el contenido debería de ser eliminado nada más enviarse. De forma fiable, puedo decir que durante más de un mes el contenido permanece disponible, pero a partir de ahí… puede ser un mes o un año.

 

 

Historial de conversaciones

Aunque no se ha citado en el punto anterior, WhatsApp guarda de forma automática una copia de seguridad de todas las conversaciones que tenemos abiertas en WhatsApp. La utilidad de esta copia de seguridad es la de conservarlas en caso de que actualicemos la aplicación, la desinstalemos y la volvamos a instalar… o simplemente restablezcamos nuestro dispositivo. Sin estas copias de seguridad, sería imposible que nuestro dispositivo pudiese restablecerlas.

Esta función a priori  esencial tiene dos problemas fundamentales. El primero y principal es que esta función no puede deshabilitarse, de nuevo el usuario no tiene capacidad de decidir si quiere esas copias de seguridad o no las quiere, para ser exactos quiera o no quiera su WhatsApp guardará una copia de seguridad (en Android) sistemáticamente a las 4.00 de la noche. Las copias de seguridad son acumulativas por otro lado, lo que quiere decir que lo que contiene una copia de seguridad en el momento de realizarse es una copia exacta de TODAS las conversaciones con todo su historial de mensajes en ese mismo instante. Además, estas copias de seguridad no se sobrescriben por la del siguiente día, sino que se guarda un período mínimo de 7 días, es decir, que se conservan siempre al menos 7 copias de seguridad diferentes, en las que como hemos dicho al ser acumulativas, la más actual contendrá siempre toda la información que puedan tener las otras, siempre y cuando (y aquí está la cuestión) no se haya eliminado ningún contenido.

¿Que pasaría si antes de las 04.00 elimino una conversación completa (o parte de ella) que mantuve dos días atrás con una persona? Que en la nueva copia de seguridad dicha conversación no existiría, pero si existiría en la copia de seguridad de 2 días atrás, y dependiendo de cuando se realizase esa conversación, incluso en las copias de seguridad de una semana atrás o incluso más. Esto es interesante desde el punto de vista de la privacidad, puesto que podríamos recuperar de forma legítima o ilegítima el contenido de conversaciones de WhatsApp que fueron borradas tiempo atrás.

 

El segundo problema fundamental al que me refería reside en la seguridad de dichas copias de seguridad. En el caso concreto de iPhone, dichas copias de seguridad se encuentran en la partición pública de este, con lo que bastaría cualquier aplicación que use el protocolo de trasferencia de Apple para acceder a tales archivos. En el caso concreto de Android estas se encuentran en el espacio designado como “SD”, lo cual implica que conectando simplemente el terminal a un PC tendríamos accedo a dichos archivos, o incluso simplemente retirando la SD (en caso de ser externa) y copiarla en otro equipo. Esto no es que suene muy seguro, puesto que sería tremendamente sencillo copiar en segundos todo los historiales de conversación (y lo mismo para imágenes, audios…) que se tenga en WhatsApp.

Ante esta segunda opción, WhatsApp hace unos meses ya implementó por fin un sistema de seguridad de cifrado, haciendo que estas copias de seguridad residiesen de forma cifrada en estos almacenamientos más accesibles por cualquiera. No obstante, el sistema optado por WhatsApp es totalmente inservible. Cifrar las copias de seguridad no es una mala idea, pero entonces tendrías que cifrar no solo las copias de seguridad, sino el historial que usa el propio WhatsApp de forma activa. Es decir, cuando abrimos WhatsApp y vemos todas nuestras conversaciones, estas no son las de las copias de seguridad, que son las que se cifran. Es cierto que los datos de la aplicación en sí están más protegidos y son de más difícil acceso que las copias de seguridad que se almacenan en espacios más sencillos, pero cualquier iPhone puede realizarse JailBreak para acceder al sistema de archivos íntegro, y en Android tres cuarto de lo mismo cuando se Rootea.

No obstante no digo que el sistema de cifrado de WhatsApp sea totalmente inservible por esto (que también), sino porque de forma totalmente inexplicable WhatsApp usó la misma Key de cifrado para absolutamente TODOS los dispositivos. No voy a entrar siquiera en las numerosas alternativas que tendrían a su alcance, pero sí a recordar lo absurdo que es cifrar absolutamente todas las copias de seguridad que WhatsApp hace con la misma clave. ¿Por qué? Porque eso quiere decir que está codificada en la misma aplicación cuanto menos, y que simplemente viendo el código de la aplicación se puede extraer dicha key. ¿A efectos prácticos?

Si conocemos el cifrado usado por WhatsApp y sabemos la clave de descifrado, tendremos desencriptadas las copias de seguridad que deseemos. En este caso, actualmente WhatsApp usa el estándar AES 192, con un esquema de codificación ECB (Electronic CodeBook). Quien quiera saber más de esto puede leer esta publicación de hace tiempo: Cifrado de datos. No tengo nada en contra de usar AES 192 como sistema de cifrado, aunque por otro lado nadie en su sano juicio a día de hoy usaría ECB. Sea como sea, teniendo en cuenta estos datos, solo nos quedaría conocer la clave escogida por WhatsApp para realizar la tarea de cifrado y descifrado (cifrado simétrico), que es:

“346a23652a46392b4d73257c67317e352e3372482177652c”

 

Si usamos por ejemplo OpenSSL para poner todo ello junto, con una simple línea de comando podríamos descifrar las copias de seguridad de cualquier usuario que queramos:

“openssl enc -d  -aes-192-ecb -in cifrado.db -out descifrado.db -K 346a23652a46392b4d73257c67317e352e3372482177652c”

Esto no es un secreto que digamos, y por tanto hace que el cifrado que hace WhatsApp sea totalmente carente de sentido, ya que cualquiera que pudiese tener interés especial en obtener dichas copias de seguridad puede seguir obteniéndolas.

 

 

Aplicaciones prácticas

Lo cierto es que podríamos aplicar todo lo anterior a bastantes aplicaciones prácticas bastante curiosas, ya se sabe que la imaginación es el único límite. Aquí solo voy a centrarme en dos en particular por lo “divertido” o lo “funestas” que pueden llegar a ser y lo simple de llevarlas a cabo.

  • Imágenes Falsas: Imágenes cuya miniatura es una foto y la foto real al verla es otra cosa
  • Imágenes interminables: Imágenes que pueden ocupar 100MB, 200MB… lo que se quiera, obligando a agotar los datos de cualquiera.

 

Hace ya algún tiempo, llegaba a mi terminal por WhatsApp una imagen en la que podía apreciarse en la miniatura de la conversación la foto de un chico “sexy”. Nada más lejos, era un joke, un hoax, ya que en realidad cuando procedías a verla/descargarla en su lugar lo que te encontrabas era con la foto de un mono sacando el dedo. Más exactamente, aquí podemos ver la minuatura que aparecería en la conversación (arriba a la izquierda) y la imagen una vez vista/descargada:

 

 

Esto es posible precisamente por algunas de las cosas explicadas anteriormente. Pero no hay que tomarse este tipo de cosas como simples “bromas” (que puede ser el ejemplo anterior), sino cuestiones a tomar bien en serio, recordemos que los dispositivos Android tienen la posibilidad (activada por defecto) de descargar de forma automática las imágenes. Dicho de otro modo, podríamos enviar todo tipo de bromas de muy mal gusto a cualquier usuario, y las imágenes “de mal gusto” se quedarían en su teléfono hasta que se eliminasen… imaginar que aquel que las está recibiendo no las revisa todas u olvida que están… cualquiera que acceda a su galería de imágenes podrá llevarse una sorpresa desagradable. Y aun cuando las imágenes no se descarguen de forma automática es lo mismo, puedes enviar una imagen a cualquier persona (aunque ella no te conozca) y…

 

Dejando a un lado las cuestiones de siempre y volviendo a esta publicación y al primer punto de las imágenes falsas, ¿como se pueden crear este tipo de imágenes? Las dos cosas que vamos a ver aquí en realidad están basadas en el mismo principio, la modificación de los metadatos de los mensajes que enviamos y recibimos, por lo que antes de seguir vamos a ver que son esos metadatos, como “verlos”, y lo demás vendrá de corrido.

 Vamos a asumir a partir de aquí que el usuario tiene un dispositivo Android con acceso de Root, no es obligatorio ni ser Root ni tener Android, pero por simplificar y facilitar las cosas es lo que vamos a tratar. Así como también para facilitar la lectura vamos a suponer que nuestro número de teléfono es el 666123123 y el de cualquier contacto será siempre 666123124:

 

Cuando WhatsApps se ejecuta tiene que cargar evidentemente nuestras conversaciones, luego eso está en algún lado, y ya hemos dicho que no son las copias de seguridad. Si sabemos buscar en nuestros dispositivos pronto encontraríamos que estos datos se encuentran en la ubicación de nuestro terminal:

/data/data/com.whatsapp/databases/

El archivo en cuestión es “msgstore.db”

Es un archivo de bases de datos, concretamente SQLite, así que el siguiente paso sería abrirlo para ver que es lo que realmente tendríamos dentro, lo cual al ser una base de datos SQLite el proceso sería trivial. Una vez abierto nos damos cuenta la gran información y posibilidades de este archivo:

 

En realidad no es necesario pasarse horas explicando el significado de cada tabla/columna de estas. En nuestro caso nos centraríamos en la tabla “messages” que contendría TODOS nuestras conversaciones tal y como las guarda y gestiona WhatsApp. Cada entrada en la tabla messages corresponde a un mensaje enviado o recibido, y recordemos una vez más que cualquier objeto que se manda o se recibe cuenta también como mensaje, no solo cuando se manda/recibe texto. Dentro de esta Tabla encontramos diferentes campos para cada una de las entradas (los mensajes enviados y recibidos) que podemos ver reflejado en la imagen anterior. El significado de cada campo varía fundamentalmente dependiendo del tipo de mensaje que sea, pero por lo general es fácil conocer cada uno de ellos:

 

_id:

Es el primary Key, el índice de los mensajes por así decirlo, el cual se incrementa en uno cada vez que se recibe o envía un mensaje. Por ejemplo, si tenemos 27176 entradas en la tabla messages y el valor de “_id” del último mensaje es 27455, significa que se han borrado 279 mensajes, lo cual ya de por sí puede ser útil para saber si un usuario es de esos desconfiados (o tiene algo que ocultar) y le gusta ir eliminando mensajes o conversaciones que pudiesen no ser del agrado de otros.

Key_remote_jid:

Designa la persona con la que se intercambió dicho mensaje, exceptuando los mensajes a los grupos o a más de una persona. Si el mensaje es enviado o recibido a un contacto en concreto, este campo comenzará con el número de teléfono de dicho contacto: “34666123124@s.whatsapp.net”. Si es un mensaje enviado a un grupo por el contrario, el formato será similar (no igual), en el que el número será el del creador del grupo y un ID, seguido del dominio @g.us. Ni que decir tiene que este campo sería el indicativo esencial para conocer para quien o de quien era ese mensaje

Key_from_me:

No hay que ser un lince para saber que significa. Es un campo que contendrá un “1” cuando el mensaje es enviado por nosotros y un “0” cuando el mensaje es enviado por otros. Es decir, es el campo que especifica si el mensaje es enviado o recibido.

 key_id:

Es un timestamp (una marca de tiempo) en formato UNIX que se añade a cada mensaje conteniendo el día y la hora de la última vez que se ha accedido a WhatsApp, con un contador adicional que se incrementa en uno por cada mensaje que es enviado durante ese día/sesión. Un ejemplo: “1350766259-45” (Que se traduciría como 20 de Octubre de 2012 a las 20.50. Mensaje 45)

status

Marca con un número que tipo de mensaje es en función de un código numérico de 0-6. Así por ejemplo, todos los mensajes de grupos tendrán en este campo un “0” si son enviados por otros contactos, “4” para los enviados por nosotros y “6” cuando son de control. Para los mensajes normales es similar, existen diferentes códigos para diferentes tipos de mensajes

 needs_push

 Imagino que este campo tan solo es usado en dispositivos como el iPhone, que al no ser multitarea como hemos dicho, accede a los mensajes mediante el sistema de notificación Push de Apple. Es decir que los mensajes no llegan al teléfono hasta que este abre la aplicación en cuestión. Posiblemente este campo marque cierto tipo de mensajes para poder acceder a ellos.

data

En los mensajes de texto, contiene el texto del mensaje propiamente dicho, en los mensajes de objetos este campo estará simplemente vacío

timestamp

Marca de tiempo en formato UNIX de cuando son enviados los mensajes

media_url

Ubicación Web en la cual se encuentra el recurso al que se está intentando tener acceso, por tanto este campo estará vacío en caso de ser un mensaje de texto, y contendrá la dirección a los servidores de WhatsApp de la imagen, el audio… del objeto transferido

media_mime_type

MIME hace referencia al tipo de archivo que se quiere transmitir, es un “código” por así decirlo usado universalmente para indicar a los navegadores web y otras aplicaciones el tipo de contenido al que se está accediendo. WhatsApp hace exactamente lo mismo. Por ejemplo, si se va a transmitir una imagen JPG, el tipo MIME será “image/jpeg”, si fuese un vídeo podría ser “video/3gp” ó “video/mp4”. Este campo no obstante no es a fin de cuentas necesario para WhatsApp, o al menos para todos los dispositivos, si lo eliminásemos veríamos que todo funcionaría igual. Evidentemente si se está transmitiendo texto, este campo estará vacío

media_wa_type

Este campo si es esencial, y es este y no el anterior el que dice a WhatsApp que tipo de contenido se está intentando abrir. Es decir, el que dice si lo que nos han mandado tiene previsualización porque es una imagen y lo tiene que abrir el visor de imágenes o si es un vídeo y tiene que abrirlo el reproductor de vídeo (por ejemplo). En este caso, el valor de este campo es de nuevo un entero de 0-5, cada uno de ellos indentifica un contenido diferente.

0 -> Texto, 1 -> Imágenes, 2 -> Audio, 3 -> Vídeos, 4 -> Contactos, 5 -> Geoposición

media_size

El tamaño del objeto que se transmite en Bytes.

media_name

El nombre del objeto tal y como estaría en nuestro dispositivo, por ejemplo si es una imagen sería el hash de esa imagen con la extensión suya. Evidentemente este campo está vacío para el texto

latitude y longitude

Cuando se transmite un objeto de tipo ubicación (tipo 5), estos campos contienen ni más ni menos que la geolocalización, la latitud y la longitud. En cualquier otro caso, estos campos están a “0”.

thumb_image

Contenido binario que almacena casi siempre la ubicación local (y nombre) del objeto en cuestión. Por ejemplo si es una imagen que ha llegado a nuestro dispositivo, contiene la ubicación dentro de nuestro dispositivo donde se encuentra.

remote_resource

Indica el origen de los mensajes que son enviados dentro de un grupo, el número de teléfono de quien los envía. El formato es el mismo que el usado en Key_remote_jid, de echo realiza la misma función que este, pero en los grupos. (recordemos que en los grupos key_remote_jid  identifica al creador del grupo siempre)

received_timestamp

Otra marca de tiempo, pero en este caso de cuando el mensaje fue recibido. Gracias a este campo y al anterior, podemos saber cuando se envió el mensaje y cuando fue recibido (siempre desde el punto de vista de nuestro dispositivo), que es lo que se usa de forma visual. Un aspa cuando se envía, un segundo aspa cuando se ha recibido (nada que ver si se ha leído o no)

send_timestamp

No se usa, su valor es “-1” siempre, supongo que simplemente porque el campo “timestamp” realiza la misma función

receipt_server_timestamp

Marca de tiempo que especifica cuando el servidor de WhatsApp recibió el mensaje

receipt_device_timestamp

Marca de tiempo que especifica cuando el destino recibe el mensaje. Las marcas de tiempo son todas diferentes aunque tengan nombres diferentes. Así por ejemplo, en cuanto enviamos un mensaje tendríamos la primera marca de tiempo. La segunda sería impuesta por el servidor de WhatsApp que es cuando ellos lo reciben. La tercera sería cuando el usuario recibe en su dispositivo el mensaje y la introduce el dispositivo del destinatario, y al final la cuarta es la que pone nuestro propio dispositivo cuando ha recibido la confirmación de que el mensaje le ha llegado al usuario en cuestión.

raw_data

Contenido binario que contiene una imagen en miniatura de la imagen que se está transmitiendo (cuando el objeto es una imagen)

media_hash

Hash en formato Base64 del objeto transmitido. En realidad no se usa/verifica, o al menos no es enteramente necesario.

 

Con todo esto, ya podemos empezar a ver las grandes posibilidades que tiene conocer este archivo, y es cuando podemos hacernos preguntas ciertamente interesantes, y es cuando podemos empezar a aplicar de forma práctica algunas cosas:

  • Si puedo ver la base de datos, puedo modificarla y volverla a colocar en su sitio? -> Por supuesto, igual que se extrajo se mete de nuevo
  • Que pasa si modifico el campo raw_data y meto otra miniatura? -> Que la miniatura es una imagen y la foto real es otra
  • Que pasa si especifico la URL de un objeto que no está en los servidores de WhatsApp? -> No pasa nada, el destino descargará el contenido desde el sitio remoto que se especifique igualmente
  • Que pasa si modifico el key_remote_jid en un grupo? podría acceder a un grupo ya creado sin invitación? -> Todo es probar a ver que pasa

 

Empecé diciendo que veríamos un par de aplicaciones prácticas sencillas. La primera como enviar imágenes “falsas” a otro contacto y la segunda como enviar imágenes de cientos de MB si queríamos. Visto todo esto es bien simple hacer esto

 

Como enviar imágenes falsas que ni siquiera están en WhatsApp

  1. Extraer la base de datos
  2. Disponer en el PC de la miniatura (por ejemplo en 100×100 pixeles) y de la imagen real
  3. Modificar el campo raw_data con la miniatura
  4. Modificar el campo media_url con la ubicación web en la cual se encuentra la imagen real a trasferir
  5. Modificar por seguridad el campo media_size con el tamaño de la imagen remota
  6. Guardar los cambios y volver a colocar la base de datos en el móvil
  7. Abrir la conversación en la que hemos modificado el mensaje y veremos que ya de por si la miniatura ha cambiado, dejar pulsado y reenviar al contacto que queramos

Al reenviar no estamos cargando de nuevo imágenes, estamos reenviado simplemente los metadatos de esta, con lo que a nuestro contacto les llegará una imagen para descargar con una miniatura que nada tiene que ver con la imagen real

 

Como enviar imágenes gigantescas con el fin de agotar los datos de cualquiera?

  1. Extraer la base de datos al PC
  2. Ubicar en inet alguna imagen gigantesca o cualquier otro contenido que se pueda acceder de forma directa
  3. Modificar el campo media_url con dicho contenido
  4. Modificar por seguridad media_size con el tamaño del nuevo objeto
  5. Guardar los cambios y volver a colocar la base de datos
  6. Abrir la conversación, buscar el mensaje y reenviar a quien queramos

De nuevo, el remitente tendrá dos problemas. Si tiene activada la descarga automática de fotos comenzará sin saberlo a descargar una imagen de 300MB si se quiere (incluso podemos poner la miniatura que queramos). Si no tiene activada la descarga automática basta con poner una miniatura suculenta para que le dé. Para cuando se de cuenta (si se da) ya han podido descargarse decenas de MB. Si el usuario está por WIFI no es un problema, si está por datos uno es capaz de hacerse idea de la “gracia”

Recordemos a todo esto que WhatsApp permite enviar mensajes a todo un grupo o mensajes en multidifusión. Imaginar que pasaría si mandásemos una imagen de 500MB a un grupo de 200 personas, eso sin olvidar que WhatsApp funciona sin necesidad de que otro usuario nos invite, con lo que podríamos directamente enviar una supuesta imagen sugerente (por la miniatura) a cualquier teléfono móvil que tenga WhatsApp instalado con el contenido que queramos, desde una imagen broma a una imagen de cientos de MB que posiblemente nunca podrá descargar del todo y que posiblemente podrá agotar la memoria incluso de muchos dispositivos.

Solo puedo recomendar algunas cosas… deshabilitar las descargas automáticas de imágenes, tener cuidado con que descargamos y en la medida de lo posible usar GTalk 😉

 

Un saludo a todos