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.

miércoles, 31 de octubre de 2012

Obtener historial de Whatsapp en Windows Phone

La aplicación Whatsapp de Windows Phone no permite enviar una copia de la conversación por email como sí pasa con la versión de Android. Tampoco es posible acceder a los ficheros del teléfono y poder obtener una copia de la base de datos de las conversaciones, ¿o quizás sí?

No hay opción que permita enviar una copia de la conversación.


La respuesta es que sí es posible pero requiere ciertas modificaciones en el dispositivo. Debemos tener instalado el SDK de Windows Phone, hechos el DeveloperUnlock y el InteropUnlock para después instalar la aplicación "WP Root Tools". Por si necesitáis saber como realizar estos cambios en el teléfono dejo una guía del foro  XDA-Developers.

Instalamos WP Root Tools desde la herramienta Application Deployment del SDK de Windows Phone.

Si nunca lo habéis utilizado, es tan sencillo como seleccionar el dispositivo, la ruta de la aplicación en cuestión (.xap) y pulsar el botón Deploy.


Una vez desplegada en nuestro dispositivo seguimos las instrucciones de instalación de WP Root Tools que requerirá algún que otro reinicio. Después podemos utilizar la herramienta y continuar con nuestro propósito.



Desde la vista de "Explorer" podemos recorrer los directorios del teléfono. Ahora tenemos que acceder a la carpeta que contiene la base de datos pero nos encontramos un pequeño obstáculo ya que las aplicaciones instaladas no vienen listadas por sus nombres sino por su GUID. Pero no supone un gran problema ya que mediante la web www.windowsphone.com podemos encontrar el GUID correspondiente buscando la aplicación y la misma URL de la aplicación nos dará el chivatazo:

218a0ebb-1585-4c7e-a9ec-054cf4569a79

Ya conocemos el susodicho número por el que se identifica Whatsapp así que a buscar la base de datos. La ruta es la siguiente:

Applications
    |__ Data
        |__ GUID Whatsapp
            |__ Data
                |__ IsolatedStore
                    |__ 
messages.sdf

WP Root Tools nos permite copiar y pegar ficheros siéndonos muy útil para poder duplicar la base de datos en una carpeta a la que podamos "acceder" mediante una aplicación que nos permita enviar ficheros por correo electrónico por ejemplo. Me explico: copiamos messages.sdf a la carpeta "My Documents" que se encuentra en  la raíz. Una vez copiado, tenemos que renombrarlo a .txt para lo que ya os estaréis imaginando... Sí, desde la aplicación de Office exploraremos los documentos del teléfono y allí se encontrará nuestro messages.txt. La abrimos y como si de un documento de texto legítimo procedemos a Compartir vía correo electrónico. Fácil, ¿verdad?

Ahora desde nuestro PC descargamos el fichero con extensión .txt y lo guardamos con su extensión correspondiente que es .sdf .

Al tratarse de una base de datos SQL Server Compact no vamos a encontrar problemas para poder abrirla desde SQL Management Studio. Tan solo seleccionamos SQL Server Compact como el tipo de servidor y la ruta donde guardamos el fichero. 

Password en blanco.

Nos encontramos con las tablas  "__VERSION", "Conversation" y "Message".




Todo en texto plano para que podamos echar un vistazo sin problemas. Ahora es tiempo de lanzar consultas para obtener las conversaciones que nos convengan. En la tabla Message encontramos las columnas necesarias:

KeyFromMe nos indica si el mensaje lo hemos escrito nosotros siendo 1.
Data contiene el mensaje.
KeyRemoteJid es el usuario con el que has tenido el mensaje. NúmeroTeléfono@s.whatsapp.net
MessageID el identificador del mensaje.

He empleado la siguiente sentencia para obtener una conversación y poder ponerle nombre a tu contacto.

SELECT 
  CAST(
     CASE WHEN KeyFromMe = 1
        THEN 'Yo'
     ELSE 'Contacto'
     END AS nvarchar) AS "Usuario", Data AS "Mensaje"
FROM Message
WHERE KeyRemoteJid='346XXXXXXXX@s.whatsapp.net'
ORDER BY MessageID

Obteniendo lo siguiente:

Cada cuál que lo exporte como quiera.


Espero que os sea útil.


Actualización (Diciembre-2012):
Ha salido la versión 2.8.8. que permite enviarse el historial por e-mail. Pero no adjunta un fichero .txt con la conversación sino el texto en el cuerpo del mensaje. Y no incluye toda la conversación ya que te lo acompaña de un mensaje como el siguiente: "(Este email sólo incluye los mensajes más recientes 498; truncados por Windows Phone.)". Así que si la conversación es más larga, habrá que seguir extrayendo la base de datos. 

martes, 11 de septiembre de 2012

SOMBRA for SQL Servers

Voy a presentaros una aplicación que empecé a desarrollar hace ya algún tiempo pero por un motivo u otro no lo terminé en su día. Ahora que el INEM ha fichado por mí, estoy más ocioso y he podido terminarla.

Su nombre es SOMBRA y sirve para probar accesos a Servidores de Microsoft SQL Server mediante fuerza bruta. Con ella podemos obtener un listado de todos los servidores que podamos ver en la red y luego realizar diferentes pruebas de acceso. Puede servirnos como herramienta de pentesting o para probar si continuamos utilizando usuarios y contraseñas que deberíamos haber cambiado, configuraciones por defecto... tan solo tendremos que elegir que credenciales emplear ya que permite varias opciones como el uso de diccionarios.

Lo he desarrollado en C# (.Net Framework 3.5) intentado diseñar una interfaz lo más sencilla y amigable posible. Es como un asistente en el que no puedes avanzar si algo no está correcto.

Algunas capturas para que veáis su funcionamiento:

Primero listamos los servidores y seleccionamos aquellos que nos interese poner a prueba.

Elegimos como nos vamos a conectar. En este caso elegimos que el usuario siempre sea "sa" y un fichero de texto con un listado de contraseñas.

SOMBRA realizará las conexiones a los servidores elegidos anteriormente empleando la configuración indicada; un usuario fijo y alternando la contraseña.

Si tenemos suerte nos aparecerán listados los servidores con los que hayamos conseguido acceso.


Agradecer desde aquí la traducción en alemán a mi amiguete RooLop.

Sin más dilación os dejo el enlace:

Descargar SOMBRA
MD5: a3371d4d4d4db8a9fa1af0ae94ab2d58
SHA1: cda8a35e44aa47c1bbd851d48c816e8ba5a8b4c2

Espero que os sea útil y me comentéis que tal os ha ido.