WhatsApp es un servicio de mensajera SMS muy popular para los teléfonos inteligentes, pero lamentablemente sólo está disponible para smartphones por ahora. Si desea utilizar otras herramientas o escribir aplicaciones web que envíen o reciban mensajes de WhatsApp (e.g. WhatsAPI), usted tiene que encontrar una manera de detectar la contraseña WhatsApp desde su poprio smartphone.
Hasta hace poco, esta contraseña era sólo un hash MD5 de tu IMEI (o dirección MAC), pero eso cambió cuando fue descubierto. Desde entonces, el servidor de WhatsApp asigna una contraseña a cada cuenta del dispositivo cuando registra por primera vez.
Este tutorial muestra cómo captar el WhatsApp contraseña de tu cuenta de WhatsApp usando el mitmproxy proxy SSL/TLS. Una vez que usted tiene esta contraseña, lo puede utilizar para comunicarse con los servidores de WhatsApp directamente o a través de un marco (esa es la primera parte ).
Una vez que usted ha adquirido su contraseña de la cuenta de WhatsApp , es relativamente fácil de enviar y recibir mensajes de WhatsApp mediante PHP. Utilizando el framework PHP-based WhatsAPI, un simple script notificador de WhatsApp que tiene sólo una docena de líneas de código.
Este pequeño tutorial muestra cómo usar las dos funciones muy básicas de WhatsAPI, es decir para enviar los mensajes salientes simples a cualquier número y a los nuevos mensajes entrantes desde su propia cuenta de WhatsApp ,mediante PHP.
PRIMERA PARTE
1. Introducción
1.1. Nota: tutorial sólo Linux!
Por favor, tenga en cuenta que este es un tutorial para usuarios de Linux. Utiliza el TLS/SSL proxy mitmproxy para capturar la conexión segura entre el teléfono y los servidores de WhatsApp. Si es un usuario de Windows, consulte MissVenom, una herramienta hecha para husmear en contraseñas de WhatsApp. Todas las cosas que ha hecho con mitmproxy en este tutorial están básicamente lo que hace MissVenom para usuarios de Windows.
1.2. Cómo funciona
Este tutorial utiliza un ataque man-in-the-middle para interceptar la comunicación entre el teléfono y los servidores de WhatsApp. Para ello, tiene que redirigir todo el tráfico desde su teléfono a su máquina Linux ejecutando mitmproxy (cambio de puerta de enlace predeterminada del teléfono). Mitmproxy, una aplicación proxy man-in-the-middle mostrará toda HTTP (S) solicitud/respuesta su teléfono. Mientras se ejecuta mitmproxy, entonces debes borrar todos sus datos de usuario de WhatsApp desde su teléfono y configurarlo como si fueras un usuario nuevo, así que usted puede oler en la conversación de teléfono y los servidores de WhatsApp mientras se intercambia la contraseña de la cuenta de WhatsApp.
No se preocupe,suena más complicado de lo que es y su WhatsApp sólo verá lo mismo después. Aquí está un paso a paso:
- Configurar y ejecutar mitmproxy y preparar su teléfono (como se describe en este tutorial)
- Deja de WhatsApp y borrar los datos de usuario de WhatsApp
- Abra WhatsApp y re-configuración de tu cuenta
- Olfatear la contraseña mediante la supervisión del tráfico HTTP (S)
1.3. Más acerca de mitmproxy
El tutorial no incluye mucha información acerca de cómo configurar mitmproxy y lo que hace. Si quieres leer más vaya a a la página web mitmproxy y lea el manual.
2. Vamos a hacerlo!
Los siguientes pasos se corresponden con el corto paso a paso por encima de la versión de Android, pero debería funcionar igualmente en un iPhone.
2.1. Configurar y ejecutar mitmproxy y preparar su teléfono
Primero tiene que configurar mitmproxy como se describe en el capítulo 2 del howto de mitmproxy. En pocas palabras, este tutorial muestra cómo habilitar el reenvío de IP, configurar iptables para redirigir todo el tráfico del puerto 80 y 443 a 8080 así como instalar y ejecutar mitmproxy.
Observe por favor: Las explicaciones de este paso se mantienen al mínimo. Mira el post sobre mitmproxy para leer más.
Shell sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 443 -j REDIRECT –to-port 8080
apt-get install python-pyasn1 python-flask python-urwid
pip install mitmproxy
mitmproxy -T –host
1 2 3 4 5 6 sysctl -w net.ipv4.ip_forward=1 iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080 iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 443 -j REDIRECT –to-port 8080 apt-get install python-pyasn1 python-flask python-urwid pip install mitmproxy mitmproxy -T –host
En tu teléfono, necesita instalar el certificado de CA mitmproxy:
Y luego cambiar su entrada estándar:
Si ha hecho todo correctamente, usted debe ser capaz de ver todo el tráfico que envía su teléfono, así:
2.2. Cerrar WhatsApp y datos de usuario claro
WhatsApp sólo negocia una nueva contraseña en el servidor cuando primero se comunica con él. Si ya tienes WhatsApp y funcionando en tu iPhone o dispositivo Android, tiene que borrar los datos del usuario, así que WhatsApp puede negociar una nueva contraseña — que entonces usted puede oler usando mitmproxy.
Limpiar los datos de usuario existentes es muy simplemente. Simplemente vaya a ajustes, gestor de aplicaciones y desplácese hacia abajo para WhatsApp. En la pantalla de WhatsApp, haga clic en “Fuerza stop” y luego “Datos claros”.
Tenga en cuenta que según comentario de Adtc, WhatsApp no respalda los mensajes en sus servidores, pero en el dispositivo local en 4 cada noche.
2.3 Oler contraseña WhatsApp y restaurar datos de usuario
Después de limpiar todos sus datos de usuario de WhatsApp, es como que sólo compró un teléfono nuevo o reiniciar el sistema operativo del teléfono inteligente. La próxima vez que abra WhatsApp, tiene que conectarse a su cuenta de WhatsApp e intercambiar una nueva contraseña. Dado que ahora cuentan con un “sniffer” y puede capturar todas las de la comunicación de su teléfono, simplemente puedes leer la contraseña fuera del aire.
Asegúrese de que está ejecutando mitmproxy. Luego simplemente Abre WhatsApp y siga las pantallas:
2.4. Examinar los resultados de mitmproxy
Si todo salió según lo planeado, ahora debería ver un par de peticiones para el dominio v.whatsapp.net — particularmente algo como esto:
- https://v.WhatsApp.net:443/v2/existen? cc = 49 & en = << tu login >> &…
- https://v.WhatsApp.net:443/v2/código? cc = 49 & en = << tu login >> &…
- https://v.WhatsApp.net:443/v2/registrarse? cc = 49 & en = << tu login >> &…
Mitmproxy debería mostrar una pantalla que parece muy similar a esto:
Usted puede encontrar la contraseña de tu cuenta de WhatsApp en el último de esos tres solicitudes (https://v.whatsapp.net:443/v2/registro?…). Utilice las teclas de flecha para navegar a esta entrada y presione la tecla de retorno . Luego golpeó TAB para cambiar a la descripción de ‘Respuesta’. Y ahí está — una respuesta JSON del servidor WhatsApp como respuesta a la solicitud de registro. Su nombre de usuario de WhatsApp se indica mediante la tecla de “iniciar sesión”, tu contraseña presionando la tecla “pw”.
Copie la contraseña y guardar la conversación con el servidor de WhatsApp mediante función save de mitmproxy: volver a la pantalla principal pulsando q, entonces golpeó s y escriba un nombre de archivo (e.g. /home/user/WhatsApp-password.mitmproxy). Más tarde puede cargar esta conversación con L.
2.5. Uso de la contraseña en secuencias de comandos
¿Para qué sirve la contraseña? Puede utilizar esta contraseña en scripts o aplicaciones web para enviar y recibir mensajes de WhatsApp. Uso del framework PHP WhatsAPI para recibir las notificaciones de mi servidor y HTPC. A partir de ahora, sólo lo uso para recibir alertas y advertencias de mi servicio de monitoreo (Nagios) y para obtener las notificaciones de mi podcast descargar secuencias de comandos.
Si está interesado en ver cómo funciona esto, por favor revise el post acerca de Cómo enviar y recibir mensajes de WhatsApp usando PHP.
3. Lo que no puedes hacer esto
Un comentario adicional a lo que este método no alcanza: Lamentablemente, el anterior descrito método no permite leer o modificar WhatsApp mensajes enviados desde su teléfono o recibidos por teléfono. La aplicación WhatsApp sólo realiza tareas administrativas sobre HTTPS (por ejemplo, cambios en el estado o el inicio de sesión). No lo hace, sin embargo, enviar o recibir mensajes sobre HTTPS.
En cambio, WhatsApp utiliza un derivado del protocolo Jabber/XMPP para comunicarse usando su propio protocolo propietario para intercambiar y cifrar mensajes. Eso hace husmeando en la conexión un poco más engorrosa, porque simplemente escuchando la toma no es suficiente. Mientras que los mensajes de WhatsApp individuales (“nodos”) pueden ser extraídos utilizando tcpdump (probar: tcpdump -X - vv -i eth0 'Puerto 5222'), los resultados son bastante decepcionantes al principio:
Outgoing WhatsApp message, captured using tcpdump 20:03:46.645026
IP (tos 0x0, ttl 50, id 42975, offset 0, flags [DF], proto TCP (6),
length 267)
50.22.231.44-static.reverse.softlayer.com.xmpp-client >
pbox.fritz.box.38975: Flags [P.], cksum 0xc9a7 (correct), seq 143:358,
ack 124, win 514, options [nop,nop,TS val 924424164 ecr 631853177],
length 215
0x0000: 4500 010b a7df 4000 3206 1406 3216 e72c E…..@.2…2..,
0x0010: c0a8 b21c 1466 983f ae43 0976 fdc2 b59d …..f.?.C.v….
0x0020: 8018 0202 c9a7 0000 0101 080a 3719 97e4 …………7…
0x0030: 25a9 5079 8000 5e54 18d1 a86c 8e70 cf13 %.Py..^T…l.p..
0x0040: 290f 3a28 6add b8f6 f8e3 10d7 7bc5 f965 ).:(j…….{..e
0x0050: b672 fe25 fdb8 4730 ce3a dcbe b040 0df4 .r.%..G0.:…@..
0x0060: 84c4 581d d8df 996e 50d5 7f12 b6bf 24f7 ..X….nP…..$.
0x0070: 0d72 f46d 704d cb21 7a56 2032 bc1a e15c .r.mpM.!zV.2…
0x0080: 88db d754 e3a3 4aa7 e7dc a2ad d2f4 2841 …T..J…….(A
0x0090: f3b8 d52c 6180 005e 524b 1573 757d 2095 …,a..^RK.su}..
0x00a0: 5f64 28da 3518 1e37 1a07 0f41 265a 867c _d(.5..7…A&Z.|
0x00b0: f016 6e0e 114b 73f2 329f d1b2 b17b dc6f ..n..Ks.2….{.o
0x00c0: 1d16 0b62 194e 9d26 b5cd d5d1 321e b033 …b.N.&….2..3
0x00d0: ce40 8afe e6c6 79bf 4ada 5149 f29a be13 .@….y.J.QI….
0x00e0: 291c 503d 4661 5cb5 047b 2dfe 41f9 5db9 ).P=Fa..{-.A.].
0x00f0: 6442 0eac 0a8d 8000 1222 6248 7dc9 b7a5 dB…….”bH}…
0x0100: 563d 4a9a cafe 42f8 011f ee V=J…B….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20:03:46.645026 IP (tos 0x0, ttl 50, id 42975, offset 0, flags [DF], proto TCP (6), length 267) 50.22.231.44-static.reverse.softlayer.com.xmpp-client > pbox.fritz.box.38975: Flags [P.], cksum 0xc9a7 (correct), seq 143:358, ack 124, win 514, options [nop,nop,TS val 924424164 ecr 631853177], length 215 0x0000: 4500 010b a7df 4000 3206 1406 3216 e72c E…..@.2…2.., 0x0010: c0a8 b21c 1466 983f ae43 0976 fdc2 b59d …..f.?.C.v…. 0x0020: 8018 0202 c9a7 0000 0101 080a 3719 97e4 …………7… 0x0030: 25a9 5079 8000 5e54 18d1 a86c 8e70 cf13 %.Py..^T…l.p.. 0x0040: 290f 3a28 6add b8f6 f8e3 10d7 7bc5 f965 ).:(j…….{..e 0x0050: b672 fe25 fdb8 4730 ce3a dcbe b040 0df4 .r.%..G0.:…@.. 0x0060: 84c4 581d d8df 996e 50d5 7f12 b6bf 24f7 ..X….nP…..$. 0x0070: 0d72 f46d 704d cb21 7a56 2032 bc1a e15c .r.mpM.!zV.2… 0x0080: 88db d754 e3a3 4aa7 e7dc a2ad d2f4 2841 …T..J…….(A 0x0090: f3b8 d52c 6180 005e 524b 1573 757d 2095 …,a..^RK.su}.. 0x00a0: 5f64 28da 3518 1e37 1a07 0f41 265a 867c _d(.5..7…A&Z.| 0x00b0: f016 6e0e 114b 73f2 329f d1b2 b17b dc6f ..n..Ks.2….{.o 0x00c0: 1d16 0b62 194e 9d26 b5cd d5d1 321e b033 …b.N.&….2..3 0x00d0: ce40 8afe e6c6 79bf 4ada 5149 f29a be13 .@….y.J.QI…. 0x00e0: 291c 503d 4661 5cb5 047b 2dfe 41f9 5db9 ).P=Fa..{-.A.]. 0x00f0: 6442 0eac 0a8d 8000 1222 6248 7dc9 b7a5 dB…….”bH}… 0x0100: 563d 4a9a cafe 42f8 011f ee V=J…B….
El mensaje real comienza justo después de la cabecera TCP, así que en este ejemplo después de 52 bytes (8000 5e54 18d 1 a86c 8e70…). Cada mensaje puede contener múltiples nodos, cada uno de los cuales tiene un nombre de etiqueta, y puede tener atributos y contenido (datos) — tanto como en XML. Sin embargo, dado que XML es conversador, WhatsApp codifica nombres de etiqueta un atributos con un diccionario, para que ciertos números corresponden a determinadas etiquetas. El fragmento de código anterior es una representación encriptada y codificada de las siguientes etiquetas XML:
XHTML from=”49xxxxxxxx@s.whatsapp.net” id=”1375004720-28″ type=”chat” t=”1375034628″>
xmlns=”urn:xmpp:whatsapp” name=”Philipp Heckel”>
xmlns=”urn:xmpp:receipts”>
Hi there!
<offline></offline>
</message>
1 2 3 4 5 6 from=”49xxxxxxxx@s.whatsapp.net” id=”1375004720-28″ type=”chat” t=”1375034628″> xmlns=”urn:xmpp:whatsapp” name=”Philipp Heckel”> xmlns=”urn:xmpp:receipts”> Hi there! <offline></offline> </message>
Nodos pueden ser codificados o sin cifrar: en una inicial “apretón de manos” con el servidor de WhatsApp, se autentica al cliente usando su nombre de usuario y contraseña (ver arriba). Después de eso, el servidor proporciona un desafío que — en combinación con la contraseña — se utiliza para cifrar el resto de la comunicación. La encriptación real se basa en un cifrado RC4 con tamaño de clave de 256 bits, y la clave se deriva de la contraseña y el desafío (como una sal) usando PBKDF2.
Todas estas cosas hacen más complejas para detectar mensajes de alambre. Sin embargo, los chicos de WhatsAPI ya implantado con éxito este protocolo, así que mucho de su código puede ser reutilizado para leer mensajes de WhatsApp en la interfaz de red.
Fuente aqui