martes, 6 de noviembre de 2012

Know your WhatsApp password on Windows Phone


Everybody knows WhatsApi and derivatives thereof to use WhatsApp without a smartphone. The password which is used for Android is based on the device IMEI and the WiFi MAC address for iPhone. I wondered how it works on Windows Phone and here I expose my results.

The first was obtain the libraries WhatsApp.dll and WhatsAppCommon.dll from the phone just as I did with the database in my previous post (in spanish). 

With the DLLs in the PC I launched a .Net decompiler to take a look at the code. There are several such applications as ILSpyCCI Explorer.Net Reflector...

Inside WhatsApp.dll we find a method called CheckCode(string) of the EnterCode class in the WhatsApp.verify namespace.


We can watch that one of the WebRequest parameters (text) is the password we're looking for. We see that it's made by obtaining the DeviceUniqueId to send it later to the ToPassword method found in WhatsAppCommon.dll.


From ToPassword it calls the GetHashString method of the MD5Core class based on Silverlight MD5Core.





To go faster I decided to make an application to generate the password through importing the libraries. To use these DLLs in Visual Studio you must unblock them before. How to: Use an Assembly from the Web in Visual Studio. How to: Use an Assembly from the Web in Visual Studio.


The following code was enough to get the password and try:

txtPass.Text = ((byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId")).ToPassword();

Also I added a button that would allow me to copy the key for further testing.

And now we make a request to the Whatsapp server to verify if it's correct or not ...


¡Jackpot! status="ok"

Let's try from WhatsApi but before we must modify the encryptPassword function of the whatsprot.class.php file to avoid a password change after introduce ours in whatsapp.php.


Correct.

I hope it will be helpful.

Conoce tu contraseña de Whatsapp en Windows Phone

Todo el mundo conoce WhatsApi y derivados de éste para poder hacer uso de Whatsapp sin tener que emplear el teléfono móvil. La contraseña que se emplea para Android se basa en el IMEI del dispositivo y para iPhone la dirección MAC de la antena WiFi. Quería descubrir cómo funciona en Windows Phone y aquí os expongo mis resultados.

Lo primero fue extraer las librerías WhatsApp.dll y WhatsAppCommon.dll del teléfono del mismo modo que lo hice con la base de datos en mi anterior post

Con las DLLs en el PC empleé un decompilador de .Net para poder echar un vistazo al código. Existen varias aplicaciones de este tipo como son ILSpy, CCI Explorer, .Net Reflector...

Dentro de WhatsApp.dll encontramos un método llamado CheckCode(string) de la clase EnterCode del espacio de nombres WhatsApp.verify.


Podemos observar que uno de los parámetros (text) del WebRequest es la contraseña que estamos buscando. Vemos que la crea obteniendo el DeviceUniqueId del dispositivo para luego mandarlo al método ToPassword que se encuentra en WhatsAppCommon.dll.


Desde ToPassword llama al método GetHashString de la clase MD5Core basada en la de MD5Core de Silverlight.





Para ir más deprisa decidí hacer una aplicación que me generase la contraseña importando las librerías. Para poder hacer uso de estas DLLs en Visual Studio hay que desbloquearlas antes. How to: Use an Assembly from the Web in Visual Studio.


Con el siguiente código bastaba para obtener la contraseña y probar:

txtPass.Text = ((byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId")).ToPassword();

También le agregué un botón que me permitiese copiar la clave para su posterior prueba.

Y ahora hagamos una petición a los servidores de Whatsapp para verificar si es correcta o no...


¡Premio! status="ok"

Probemos desde WhatsApi pero antes modifiquemos la función encryptPassword del fichero whatsprot.class.php para que al introducir nuestra contraseña en whatsapp.php no le aplique ningún cambio.


Correcto.

Espero os sea útil.