lunes, enero 18, 2016

Whatsapp en el escritorio de manera nativa

lunes, enero 18, 2016

Muchos os habréis sentido obligados a seguir utilizando esta plataforma de comunicaciones, y la verdad es que hay gente que no puede vivir sin esta plataforma de comunicaciones.


Llevo arrastrando Whatsapp desde hace años, y nunca me ha gustado este programa que está en contra de la privacidad; pero sobretodo, lo que menos me ha gustado es sentirte anclado al móvil con este programa tan inseguro.

Existen dos soluciones para arreglar este problema, una que es muy vieja y muy simple, es instalar Whatsapp en una máquina virtual de Android y ejecutarlo desde ahí. Al final es una mala idea porque descubre que Whatsapp te impide utilizar dos "sesiones" (realmente no son sesiones) a la vez y te bloquea siempre una de las dos instalaciones.

La otra opción es Whatsapp Web, nunca lo he probado y no lo quiero ni probar, pero se basa en generar desde el móvil sesiones (estas sí que son sesiones nuevas) centralizadas en tu móvil, quiere decir que quien habla es el móvil. Puede que te parezca una solución aceptable, pero la realidad es que no hay peor cosa. Requiere que el móvil autorice la sesión y que la instalación del móvil permanezca activa (sin hablar de los problemas de seguridad que plantea)

Entonces... ¿qué me queda? Instalar Whatsapp nativamente en el PC. ¿Pero eso se puede?

Por supuesto que sí. Whatsapp no es más que un Jabber, por lo que vamos a utilizar el cliente de Jabber más libre que hay, Pidgin, y la implementación libre de whatsapp-purple.

Instalamos Pidgin y después la extensión. Se pueden descargar los binarios listos para usar (extracto):

Official binary sources (provided by davidgfnet):

O se pueden compilar (ha sido mi caso):
yaourt -S purple-whatsapp-git

o (extracto):

Just run make (if you have to choose between 32 and 64 bit, run make ARCH=i686 or make ARCH=x86_64). Makefile.mingw is the Makefile for 32-bit Windows.


Pero, antes de nada, necesitaremos nuestros datos, ¿de donde los saco? Bien, como es comprensible porque nadie anda introduciendo sus datos en el cliente oficial de whatsapp cada vez que entra, whatsapp tiene un login y un password, y usa dos archivos (usa más pero estos son los que nos interesan) para identificarse. Uno es el archivo "me" que contiene nuestro número de teléfono junto a un timestamp, y el otro archivo, el que importa, es "pw", en el cual se encuentra todo lo necesario para descifrar nuestra contraseña.

Existe una opción para la gente que no quiera trastear llamada WART.


Esta pequeña app para Windows lo que hace es emular un cliente que solicita iniciar sesión por primera vez en Whatsapp (para generar los ficheros anteriormente mencionados), por lo que después de introducir tu número de teléfono realiza todo el proceso para extraer tu password.




Yo he optado por la segunda opción, porque para mí es más instructivo y me evita tener que recibir más mensajes (además de que lo he hecho sobre Linux).
Un Android rooteado con la instalación de Whatsapp. Si no dispones de root, sustituye estos pasos por hacer una nueva instalación de whatsapp en un emulador de Android y extrae los ficheros de la misma manera (al fin y al cabo es el mismo proceso).

El archivo pw se encuentra en:
 
/data/data/com.whatsapp/files/pw
 
La mejor manera es copiarlo a /sdcard y sacarlo al pc, para ello (teniendo ADB instalado correctamente y el móvil conectado):

adb shell
cp /data/data/com.whatsapp/files/pw /sdcard
exit
adb pull /sdcard/pw

Una vez en el pc necesitamos desencriptar el password, para ello que transformar y desencriptar los vectores:

dd if=pw bs=1 skip=29 count=4 > pw_salt

hexdump -e '2/1 "%02x"' pw_salt

dd if=pw bs=1 skip=33 count=16 > pw_iv

dd if=pw bs=1 skip=49 count=20 > pw_ekey

echo c2991ec29b1d0cc2b8c3b7556458c298c29203c28b45c2973e78c386c395 | xxd -r -p > pbkdf2_pass.bin

echo -n 14697063418 | hexdump -e '2/1 "%02x"' | xxd -r -p >> pbkdf2_pass.bin


Una vez llegados a este paso debemos ejecutar wa_pbkdf2 extraido de aquí y compilado de la siguiente manera:

gcc -o wa_pbkdf2 wa_pbkdf2.c -lcrypto

Y ejecutamos:

./wa_pbkdf2 pw_salt 16 < pbkdf2_pass.bin > pbkdf2_key.bin

Para terminar:

k=$(hexdump -e '2/1 "%02x"' pbkdf2_key.bin)

iv=$(hexdump -e '2/1 "%02x"' pw_iv)

iv=$(hexdump -e '2/1 "%02x"' pw_iv)

openssl enc -aes-128-ofb -d -nosalt -in pw_ekey -K $k -iv $iv -out wa_password.key

base64 wa_password.key

Y voila, nuestro password para nosotros. Ya sólo nos queda configurar pidgin (el usuario es el número de teléfono con el prefijo internacional sin los 00 o el '+'):


Cuentas -> Gestionar cuentas; "Añadir..." (introducimos el usuario y la contraseña que se ha mostrado en el anterior proceso). Vamos a la pestaña "Avanzadas", introducimos el servidor  "c3.whatsapp.net" y el puerto "5222", el nickname que queramos y muy importante, en "resource" introducir "S 40-2.12.11" en vez de "Android-2.12.176-443" que es el que debería de ser en mi caso. ¿Por qué? Los mensajes de vuelta aparecen como "[Ciphered message received]" y si nos identificamos como otro dispositivo (en este caso un Nokia S40) se soluciona el problema.

Si tenéis algún problema (como por ejemplo no encontráis "xxd" que se instala al instalar "vim", o "openssl") es porque alguna dependencia quedaba por instalar. Instalad los dos mentados y problema solucionado.

Espero que disfrutéis de la diferencia.
Bit
Hide Me!