Foro de elhacker.net

Foros Generales => Dudas Generales => Mensaje iniciado por: rodarima en 18 Agosto 2011, 02:12 am



Título: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 18 Agosto 2011, 02:12 am
Veamos, soy bastante novato aquí, a si que disculpen si he colocado mal el post, o si es indebido.

Resulta que tras mucho pensar, no doy descubierto cual es la manera de autenticar el whats app, para que se conecte.

El whats utiliza el protocolo xmpp, pero cambiado, de forma que a todas las palabras clave se les asigna un número hexadecimal, y luego, se transforma como si fuese un diccionario.

La tabla: http://pastebin.com/EGmkazRj

El proceso de autentificacion es el mismo que xmpp con digest md5.
Primero se envia una peticion con los bytes:
Código:
0x57, 0x41, 0x01, 0x00
que son (W A 0x01 0x00)

A continuación, se envía otro paquete con los datos del telefono, y los métodos de autentificacion disponibles (DIGEST-MD5-1)

Código:
0000   00 19 f8 05 01 a0 8a 84 fc 11 69 50 68 6f 6e 65  ..........iPhone
0010   2d 32 2e 36 2e 34 2d 35 32 32 32 00 08 f8 02 96  -2.6.4-5222.....
0020   f8 01 f8 01 7e 00 07 f8 05 0f 5a 2a bd a7        ....~.....Z*..

Despues de esto, recibimos 3 paquetes.
 
El primero:

Código:
0000   00 05 f8 03 01 38 8a                             .....8.

El segundo:

Código:
0000   00 08 f8 02 96 f8 01 f8 01 7e                    .........~

El tercero:

Código:
0000   00 5b f8 04 1a bd a7 fc 54 62 6d 39 75 59 32 55  .[......Tbm9uY2U
0010   39 49 6a 4d 34 4d 44 63 78 4d 54 45 79 4d 44 45  9IjM4MDcxMTEyMDE
0020   69 4c 48 46 76 63 44 30 69 59 58 56 30 61 43 49  iLHFvcD0iYXV0aCI
0030   73 59 32 68 68 63 6e 4e 6c 64 44 31 31 64 47 59  sY2hhcnNldD11dGY
0040   74 4f 43 78 68 62 47 64 76 63 6d 6c 30 61 47 30  tOCxhbGdvcml0aG0
0050   39 62 57 51 31 4c 58 4e 6c 63 33 4d 3d           9bWQ1LXNlc3M=

En el ultimo paquete hay una cadena codificada en base64, que contiene los siguientes datos:

Código:
nonce="3807111201",qop="auth",charset=utf-8,algorithm=md5-sess

A partir de aquí, una función se encarga de elaborar una cadena de texto, que sera la que realice la autentificación. El proceso es muy similar al descrito aqui:
http://www.cyberhades.com/2011/07/20/solucion-al-reto-zeropwn-wgsbd2/ (http://www.cyberhades.com/2011/07/20/solucion-al-reto-zeropwn-wgsbd2/)
Pero hay un pequeño problema, que no encuentro la contraseña por ningún sitio. Aqui la función que se encarga de ello, en el whats:
http://pastebin.com/nKxX3vzc (http://pastebin.com/nKxX3vzc)

Llama a la variable password en Lwhatsapp/FunXMPP$Connection; Sin embargo, en esa clase, no se define por ninguna parte.

http://ifile.it/ifn396p (http://ifile.it/ifn396p)
http://www.gigasize.com/get/2vn56xdffsc (http://www.gigasize.com/get/2vn56xdffsc)

Las clases de encuentran en la carpeta classes/Whatsapp

La funcion de la página de cyberhades, que interesa es:

Código:
def sasl_md5_chall(uname, pass, realm, nonce, cnonce, nc, digest_uri, qop)

    hA1data = Digest::MD5.digest("#{uname}:#{realm}:#{pass}")
    hA1data = hA1data + ":#{nonce}:#{cnonce}".force_encoding("UTF-8")
    hA1 = Digest::MD5.hexdigest(hA1data)
    hA2 = Digest::MD5.hexdigest("AUTHENTICATE:#{digest_uri}")
    hash = Digest::MD5.hexdigest("#{hA1}:#{nonce}:#{nc}:#{cnonce}:#{qop}:#{hA2}")

    return hash

end


A continuacion se forma el paquete donde va el response, que es el dato que me falta por generar, y que va cifrado en base64:

Código:
dXNlcm5hbWU9IlhYWFhYWFhYWFhYIixyZWFsbT0icy53aGF0c2FwcC5uZXQiLG5vbmNlPSIzODA3MTExMjAxIixjbm9uY2U9IjVBNzU4OUI4LTk0MkItNDlBRi1CMDJCLTdCREZBNjEzMjA0OSIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LXVyaT0ieG1wcC9zLndoYXRzYXBwLm5ldCIscmVzcG9uc2U9NjhiMGYwMTQ2MjZhODBlYjcxN2FkYzE0M2I1NTdlMDksY2hhcnNldD11dGYtOA==

que si se descifra es:

Código:
username="XXXXXXXXXXX",realm="s.whatsapp.net",nonce="3807111201",cnonce="5A7589B8-942B-49AF-B02B-7BDFA6132049",nc=00000001,qop=auth,digest-uri="xmpp/s.whatsapp.net",response=68b0f014626a80eb717adc143b557e09,charset=utf-8

Donde obviamente en vez de XXXXXX pone tu número de teléfono.

Mi intención es hacer un programa que me permita enviar un mensaje a un móvil determinado usando el whatsapp.
Si alguien me puede ayudar en esto se lo agradecería



Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: el-brujo en 18 Agosto 2011, 18:26 pm
Recientemente analizaron la seguridad de WhatsApp en SecurityByDefault, pero creo que han hecho bastantes cambios, mira a ver si te sirve de todas maneras:

¿Penosa seguridad en WhatsApp?
http://foro.elhacker.net/seguridad/iquestpenosa_seguridad_en_whatsapp-t328951.0.html


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 18 Agosto 2011, 19:17 pm
Si, ya he estado leyendo ese post antes, pero todo lo que llega a decir del whatsapp ya lo había leido. Lo único que me falta saber es como se genera la contraseña en el paquete response. En ese post dice que le preguntaron a whatsapp pero que les dijeron que la contraseña era simplemente "password". Yo he probado con esa y algunas más, pero no soy capaz e generar el mismo md5.

Teniendo el código fuente decompilado no se si resultará más sencillo, pero el caso es que cuando trato de buscar la definicion de la cadena password, no la encuentro por ningún fichero. Simplemente se llama a password y eso devuelve un valor, pero la definición de password es simplemente del tipo:

String password;

En el buscador de windows 7, que busca en el texto de los archivos también busqué password, y hay una clase de apache, que esta en otra carpeta que si mal no recuerdo se llama NTCredentials, pero ahí no encontré nada que asignara un valor a password, simplemente usa el valor de password.

Por otra parte el cnonce, supongo que será un valor long aleatorio de 16 bytes, que se pasa a hexadecimal, sin embargo, tampoco me explico como en vez de aparecer como:

Código:
12345678123412341234123456789012

Aparece como:

Código:
12345678-1234-1234-1234-123456789012

Quizas en el código original hay una máscara en la funcion toString que al decompilarse no se muestra correctamente.

Sin embargo si es un número aleatorio, supongo que no importará que use el mismo cnonce en todas las conexiones.

A ver si hay alguien que me pueda ayudar en esto. Muchas gracias por adelantado.  :rolleyes:


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: lamaruja en 4 Septiembre 2011, 10:35 am
Una pregunta sobre android whatsapp:
Se podría usar whatsapp desde pc con algun emulador de android o algun programa compatible, y asi poder mandar mensajes a moviles con whatsapp?

Gracias


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: lag en 7 Diciembre 2011, 10:01 am
Buenas,

Llevo unos días con esto y veo que hace más de un par de meses que lo intentaste tú; ¿Descubriste algo más?

Dejando de lado el misterio de la password: ¿por que crees que la función del ejemplo del wargame es correcta? Yo he mirado en la wikipedia y para hacer el MD5 digest nos hace otra cosa muy diferente y, he econtrado otros post que trabajan sobre la misma prueba de el mismo wargame y también nos hacen otras cosas diferentes para generar el MD5 correcto del response.

http://en.wikipedia.org/wiki/Digest_access_authentication

http://fulapol.wordpress.com/2011/07/23/write-up-wgsbd2-zeropwn/

¿Avanzaste algo más desde entonces? Me estoy volviendo loco y será una pena tener que rendirse con esto.

Por cierto, también he valorado que "password" pueda ser el código de activación con el que el whatsapp te hace autentificar tu número, esto tendría sentido también en el aspecto de no permitir que todos entraran en tu buzón y suplantaran tu "telefono" no obstante es un código de 3 cifras así que si de eso se trata como mucho en 999 intentos lo tendríamos de todos...


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: lag en 7 Diciembre 2011, 10:07 am
Ah, por cierto, he hecho algunas pruebas que han dado resultados muy interesantes montando un "servidor" de whatsapp generando yo el base64 para esperar la respuesta y ver en función de qué varía el response.

Comentame un poco donde te has quedado y vemos de poner en común si te parece.


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 11 Diciembre 2011, 21:38 pm
He descubierto algo mas tambien. Resulta que al modificar el uuid del iphone, el whats app deja de funcionar. No se conecta. De modo que el uuid tiene que formar parte de la autentificación.
Lo que necesitaba era alguien que tuviera bastante conocimiento de java, y que me ayudase a decompilar el codigo fuente de la aplicacion para android. Yo lo he mirado por encima y parece que esta ofuscado.

La autentificacion esta sacada literalmente del codigo de la aplicacion. Supongo que seguira siendo asi.

Un saludo!  :D


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: kilburn en 2 Enero 2012, 14:39 pm
Buenas,

No se si todavía estáis con este temilla, pero a mi también me interesa.

He encontrado este post mientras hacia la "googleada" inicial para descubrir que había ya hecho y no perder más tiempo del necesario, así que de momento tampoco puedo aportar mucho.

Aun así, creo que sí que puedo contestar a esta parte:
Citar
Por otra parte el cnonce, supongo que será un valor long aleatorio de 16 bytes, que se pasa a hexadecimal, sin embargo, tampoco me explico como en vez de aparecer como:

Código:

12345678123412341234123456789012

Aparece como:

Código:

12345678-1234-1234-1234-123456789012


Quizas en el código original hay una máscara en la funcion toString que al decompilarse no se muestra correctamente.

Sin embargo si es un número aleatorio, supongo que no importará que use el mismo cnonce en todas las conexiones.

Por el formato en que aparece, cnonce corresponde a un UUID random (http://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29). Se trata de 16 bytes de los cuales 1,25 son fijos (para indicar que es UUID random) y el resto generados aleatoriamente.

La forma de mostrarlo es esa porque es el estándard de visualización de todos los UUIDs. De hecho, no creo que el darle ese formato sea cosa de WhatsApp sino de la librería que sea que utilizan para tratar con ellos.

Si descubrís algo más postead por aquí por favor!


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 2 Enero 2012, 17:06 pm
Ya consegui conectarme al servidor del whatsapp. Hace falta el imei del telefono para generar el hash de la contraseña que se usa en el digest.
Saludos


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: kilburn en 2 Enero 2012, 17:08 pm
Hay alguna posibilidad de que compartas el código q tienes? :P


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: djpeinado en 4 Enero 2012, 21:55 pm
Hola,
Yo también estoy interesado en este asunto.
Hay un hilo en xda-developers donde alguien dice tener un api:
http://forum.xda-developers.com/showthread.php?t=1344114

Yo personalmente al pasar muchas horas delante del pc echo en falta poder utilizar whatsapp desde el pc, ya sea de forma propia o sincronizada con el móvil.
Creo que lo más sencillo en este aspecto sería elaborar un plugin para libpurple (pidgin, ...) modificando los disponibles para xmpp. El problema sería si se quisiera que esas conversaciones también quedaran registradas en la aplicación móvil.
En el hilo de xda-developers están interesados también en portar la aplicación para webos y otros.

Yo estaría dispuesto a colaborar de alguna forma en algún desarrollo, preferiblemente de código abierto. Tengo conocimientos de Android y principalmente Java y entornos web, aunque no tendría problema en ponerme con cualquier otra cosa al ser ingeniero informático, por ejemplo con un plugin para libpurple.

Saludos


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: JaVi__ en 17 Enero 2012, 23:30 pm
Ya consegui conectarme al servidor del whatsapp. Hace falta el imei del telefono para generar el hash de la contraseña que se usa en el digest.
Saludos

Podrias explicar que algoritmo usa para generar el password?????

Graciass!!


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 22 Enero 2012, 05:04 am
Si alguien quiere colaborar para crear un chat para el whats app para ordenador me lo comunique por privado. Entonces comento mas detalles. Por ahora ya he creado un pequeño chat que permite tener una conversacion con una persona sabiendo su nº. Saludos!


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 22 Enero 2012, 05:20 am
Aqui teneis un analisis de un mensaje al telefono 666666666 con el texto "Da":

Código:
00[packet length]f8085da0fafc0b[cc][phone]8aa21b43fc[timestamp lenght][timestamp]2d[messaje index]f802f804babd4ff801f8018cf80216fc[body lenght][body] 

Código:

                    list binary 8
                    |                                     id                                           
                    |  length:11                          |                                           
     list binary 24 |  |                                  |  list binary 8                 index (7)   
     |              |  |       cc: phone:                 |  |                             |           
     |  8 items     |  |       +34 666666666              |  |  length:12              "-" |           
     |  |           |  |  ____________^_________          |  |  |                       |  |           
0037 f8 08 5d a0 fa fc 0b 3334363636363636363636 8a a2 1b 43 fc 0c 31333235313235383239 2d 37
|          |  |  |                               |  |  |           ----------v---------       
|          |  |  jid-pair                        |  |  chat        timestamp:1325125820       
|          |  |                                  |  |             Thu Dec 29 2011 03:30:20   
length:55  |  to                                 |  type                                     
           |                                     |                                           
           messaje                               s.whatsapp.net                               




         4 items                 server
         |                       |
         |  x                    |  list binary 24
         |  |  xmlns             |  |
         |  |  |                 |  |  items:2
         |  |  |  jabber:x:event |  |  |           
         |  |  |  |              |  |  |  body    message:
         |  |  |  |      1 item  |  |  |  |       "Da" 
         |  |  |  |           |  |  |  |  |        _^__
f8 02 f8 04 ba bd 4f f8 01 f8 01 8c f8 02 16 fc 02 4461
|  |  |              |  |  |                 |  |
|  |  list binary 24 |  |  list binary 24    |  |
|  |                 |  |                    |  |
|  2 items           |  1 item               |  lenght:2
|                    |                       |
list binary 24       list binary 24          list binary 8


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: JaVi__ en 23 Enero 2012, 23:13 pm
te he dejado un mensaje privado y un email.

Buen trabajo


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: rodarima en 27 Febrero 2012, 21:35 pm
Algo de informacion sobre los indices de los nodos. Al parecer la cabecera del mensaje siempre comienza con exactamente 2 bytes, que es la longitud de todo el paquete.
Luego estan las etiquetas F8 que es el comienzo de una lista binaria. Justo después hay un índice de exactamente 1 byte, que indica la longitud. Para longitudes mayores de listas binarias se usa F9.

Tambien se aplica a FC y FD, ambos para cadenas, con 1 y 3 bytes respectivamente.

F8: 1 byte, lista binaria corta
F9: 2 bytes, lista binaria larga

FC: 1 byte, cadena corta
FD: 3 bytes, cadena larga

F4: Es el indice del JID, y solo ocupa 1 byte.

Saludos!


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: dlucio en 21 Julio 2012, 03:34 am
Ya consegui conectarme al servidor del whatsapp. Hace falta el imei del telefono para generar el hash de la contraseña que se usa en el digest.
Saludos

okn entonces podrias resumir en algo puntual, digamos

jid: 999999920@whatsapp.net
pass: IMei
server: s.whatsup.net:443

me gustaria pudueras puntualizar esto, x favor


Título: Re: Ayuda en la conexion del WhatsApp
Publicado por: Yoker66666 en 27 Julio 2012, 04:05 am
Offtopic: ¿Cómo obtengo los historiales completos del whatsapp? Me salen de unas pocas líneas solo..
Gracias..