Ir al contenido principal

Whatsapp web, la seguridad que manejan y el adiós de tu batería.

¿Por que se tiene que dejar el móvil con conexión a internet para poder usar whatsapp web?

Armé este pequeño documento para explicar el como funciona este sistema, que realmente se me hace ingenioso, no funcional, pero ingenioso.

La actualización en móvil de whatsapp incluye una nueva tabla, la cual se llama sesiones, en esta hay campos como:

browser_id (23 caracteres aprox)
secret (88 caracteres aprox)
token (44 caractere saprox)

Solo por mencionar algunos.

Estos datos son los que se mostrarán al entrar al apartado whatsapp web de nuestros móviles, al principio se piensa que solo es para tener un "control" propio de los dispositivos conectados, pero mas adelante explicare el funcionamiento un poco mas extenso de esto.

Al abrir el menú de whatsapp web, nos da para escanear un código qr, si analizamos este código, tenemos algo como esto:

bjqPtTTbnhUvq1FWyLZmMh1RhesUcGU8eJMG2aUnrps4z2Z80XBiUVguqJ2Cb9YUyQY2t32apwXpP2qn4QAWbHXsNQV7ik7CT2PZbsfNEU+2ThPFhjRTVS7act+7irrQIbPSCHon8GCFXzM/ADHeA==,pbKOZCwnvdlYLFF8bmQePMKtNL7IoiJf7PQdH9XawD8=,/abc7sigtAjidMiWNCUOTw==

El código se genera cada 10 segundos aproximadamente, y es una mezcla del timestamp actual con el id del navegador, y alguna otra cosa más (que debe ser code generado en aleatorio por WA), lo que nunca cambia al generar el código desde un mismo navegador es la última parte (,pbKOZCwnvdlYLFF8bmQePMKtNL7IoiJf7PQdH9XawD8=,/abc7sigtAjidMiWNCUOTw==), esa parte siempre se mantendrá igual, por lo que se puede deducir que es el id del navegador, o en la DB el browser_id.

Ahora vamos con una parte de como trabaja la aplicación (al menos en android).

Al escanear el código con la aplicación de WA, está programada para que mande una petición a los servidores de WA, es decir y como ejemplo, podría ser un WS como el siguiente:

https://whatsapp.com/?añadirdispositivo=si&id_dispositivo=52155XXXXXXXX&token=YYYYY&browser_id=ZZZZZZZ&secret=AAAAAAA&imei_dispositivo=BBBBB

Al momento de que se manda esa petición al servidor de WA, este busca el browser_id asociado y refresca el contenido en el navegador web, algo así como funciona youtube remote y algunas aplicaciones por el estilo.

Listo, ya tenemos asociado nuestro WAWeb con WAMovil, ya todo funciona de manera perfecta y buena, ahora vamos con la parte como se gestionan los mensajes desde la aplicación web.

Al mandar un mensaje en el servidor web, lo que se hace es que se manda a una DB de WA en donde se almacena temporalmente, en ese momento aún NO es entregado a su destinatario, después de que se mandó correctamente, el servidor de WA procesa el mensaje y lo envía a nuestro dispositivo móvil, para que después nuestro dispositivo móvil mande el mensaje nuevamente al servidor de WA y el servidor de WA se encargue de entregarlo a su destinatario.

¿Raro no?

Si, la verdad es raro, pero funcional, no digo que la mejor solución, pero a ellos les funciona.

¿Por que se hace ese embrollo en la comunicación del sistema?

Al plantear un navegador WEB, whatsapp tenía el inconveniente de la DB en los móviles, es decir, como se podrían mostrar los historiales de conversación que se tuvieran en web para después mostrarlos en móvil, WA no fue diseñada para ser una aplicación como FBMessenger (que hubieran podido tomar el ejemplo y la funcionalidad de ahí para hacer WAWeb), a lo que me refiero, es que fue una aplicación completamente nativa en los dispositivos, no es una aplicación que primero haya sido web y después sea facil portarla a móvil de forma hibrida.

Uno de las cosas buenas de esto es lo siguiente:

La seguridad.


WAWeb está en comunicación constante con nuestro dispositivo móvil, es decir, si nuestro dispositivo llega a borrar o limpiar la tabla de sesiones, WAWeb se cierra yq dice que no está asociado ya con nuestro dispositivo.

Está bien, así estamos seguros de que si dejan la sesión abierta en la casa de Juan Perez, podríamos "cerrarla" de forma remota.

Esto nos garantiza que aunque obtengan nuestro secret y token, la comunicación no pueda ser tan fácilmente suplantada por alguna otra entidad maliciosa :P, ya que faltaría el id del móvil, más el IMEI que se hace constante revisión, y puede que algunas otras cosas más (eso, por el momento, sólo lo saben los desarrolladores de WAWeb).

Una de las cosas malas, muy malas en este mismo punto mencionado arriba:

Tu batería.


Si estás usando WAWeb durante tus 8 horas godinescas en la oficina, olvídate de que puedas subsistir con lo que tienes de batería, ya que el navegador estará en constante comunicación con el dispositivo, y por lo tanto el dispositivo en ningún momento estará en modo de espera o "standby", aunque la pantalla esté apagada, el wifi seguirá funcionando o en su caso, los datos móviles.

Otra de las cosas que te "podría" afectar.

Tus datos.


Si usas WAWeb de la misma forma menciono arriba, y por alguna casualidad se te olvida activar el WiFi, entonces despidete de tus datos de una forma rápida.

Si, se que hay algunos planes con WA ilimitado y demás, pero hasta ahorita no estamos seguros de que el webservice del que se hace llamada para verificar todos los datos del dispositivo sea desde un dominio llamado whatsapp.com, puede ser por amazon, o algún otro servicio en la nube que sea capaz de soportar tantas, pero tantas conexiones activas por tanto tiempo, por lo que si la petición se hace desde otro servidor, tu operador no sabrá que es de whatsapp y hará el cobro de la debida factura.

Bueno, creo que ya me extendí mucho, hay algunas otras cosas que se pueden colocar aquí, pero quiero investigar un poco más sobre la aplicación, para que pueda poner algunos datos muy concretos, al principio me emocioné por la forma que hacia la conexión y por eso investigué esto, pero veo que si es un poco difícil suplantar la identidad con esta forma fea, pero funcional de hacer la comunicación.




Saludos!

Komtec1

Comentarios

Entradas populares de este blog

Integrar API de Google Maps, archivos kml, kmz y otras fumarolas :D

Ya que andamos en eso de la posteada ahora les voy a dejar un pequeño manual sobre como integrar la API de maps (google) dentro de nuestro código, hay varia documentación en la página developers de google, pero realmente lo que uno busca cuando pone en google: "integrar api de maps" es ver un ejemplo claro y directo para que se pueda entender de mejor forma. Así que pues ya comentada la información de arriba les paso a dejar un ejemplo. Lo primero que tenemos que poner en nuestro código es la llamada a la API de maps: < script type = " text/javascript " src = " http://maps.googleapis.com/maps/api/js?sensor=false&language=es " > < / script > En este caso la variable sensor está en false, esto nos indica que no hay un dispositivo gps que pueda tomar la ubicación (se pone generalmente en true cuando es para aplicación movil, llámese celular o tableta) El lenguaje declaramos español, esto es para los menús que se van a most

Solución [fix] a hamachi Logging in .. failed, busy

Hola! Aquí con una pequeña entrada, pero que a más de uno le será útil. Tengo hamachi instalado en varias máquinas, pero en una precisamente al reiniciar, algunas veces me da este problema: usuarioserver@server:~$ sudo hamachi login [sudo] password for usuarioserver: Logging in .. failed, busy Lo busqué en internet y la "solución" que dan, es reinstalar hamachi, y para los que han instalado hamachi en ubuntu, saben que no es una opción, pues se tendrían que hacer estos pasos:  sudo apt-get remove logmein-hamachi sudo dpkg -i logmein-hamachixxx.deb sudo apt-get install -f Para lo cual (siempre) es molesto hacer esos pasos, y algunas veces la configuración se llega a perder.  Para solucionar ese problema, basta con hacer un:  sudo /etc/init.d/logmein-hamachi force-reload Esto forzará el reinicio de hamachi, y así después hacen:  sudo hamachi login Y listo, el problema de failed busy desaparece y los deja loguear bien en la red de hama

[Anotaciones] Importar DB MySQL con archivos frm/ibd

Primero, vamos a extraer las consultas para crear las tablas, lo podemos hacer con el siguiente comando> mysqlfrm --server=user:pass@localhost --port 3307 --diagnostic /ruta/de/los/archivos/data/nombredebase/*.frm Esto nos regresa todos los CREATE que tengamos para las tablas, guardar todo el resultado. Creamos la base de datos, con el mismo nombre que se tenía anteriormente. Ejecutamos la consulta que nos regresó el comando mysqlfrm, si nuestra versión de mysql es mayor a 5.6, es importante hacer este cambio:  ENGINE=InnoDB DEFAULT CHARSET=utf8; por  ENGINE=InnoDB ROW_FORMAT=compact CHARSET=utf8; Es decir, se remplaza DEFAULT por ROW_FORMAT=compact, realmente no se por qué, pero me llevó como una hora dar con el error, espero quien lea esto le sea más facil. Una vez que tengamos las tablas creadas, ejecutamos lo siguiente: ALTER TABLE nombredetabla1 DISCARD TABLESPACE; ALTER TABLE nombredetabla2 DISCARD TABLESPACE; ALTER TABLE nombredetabla3 DISCARD TABLESPAC