elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Tutorial] Bloqueador de pantalla al estilo Anonymous
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Tutorial] Bloqueador de pantalla al estilo Anonymous  (Leído 2,192 veces)
MarteagaM

Desconectado Desconectado

Mensajes: 1


Ver Perfil
[Tutorial] Bloqueador de pantalla al estilo Anonymous
« en: 6 Agosto 2013, 19:22 pm »

 


Weno aproche que recién termine mi proyecto en java con ayuda netbeans para mostrar como hacer de manera sencilla un bloqueador de pantalla , e visto que muchos personas se preguntan  como hacer para bloquear la pantalla mostrando un imagen o algo al estilo cibercafe. Pero claro asta aqui seria tan facil como crear un jframe sin bordes  agregar un jlabel que contenga la imagen y iniciar siempre la ventana a pantalla completa pero claro ahora nos preguntamos que pasa si el usuario presiona alguna combinación de teclas como Alt+F4,Ctrl+Alt+Supr....etc.
 
Mi proyecto tiene 7 clases las principales son  3 :
 
La clase jFrameBlocked// esto es nuestro jframe  ya creado con netbeans
La clase jBlocked // esta es la que nos permite evitar cerrar nuestra ventana por cualquier metodo
La clase Fondo  // nos permite colocar un fondo a nuestro jframe
Las demás son solamente para darle un toque a lo Anonymous jeje.
 
1.- Crearemos un nuevo proyecto en netbeans llamado blocked, y a continuación un jframe llamado jFrameBlocked que tendra en siguiente diseño.(Aqui nose ven los jlabel porque estan en blanco)
 
 
 
 2.- Ahora crearemos una clase llamada Fondo para poner un imagen de fondo a nuestro jframe y copiamos es siguiente codigo.
 
Nota: Tener en cuenta que yo puse mi imagen en una carpeta llamada imágenes
Código
  1.  
  2. import java.awt.Graphics;
  3.  
  4. import javax.swing.ImageIcon;
  5.  
  6.  
  7.  
  8. /**
  9.  
  10.  * http://jc-mouse.blogspot.com/
  11.  
  12.  * @author Mouse
  13.  
  14.  */
  15.  
  16. public class Fondo extends javax.swing.JPanel {
  17.  
  18.    String imagen;
  19.  
  20.    public Fondo(int w,int h,String foto){    
  21.  
  22.        this.setSize(w,h);
  23.  
  24.        imagen = foto;
  25.  
  26.    }
  27.  
  28.  
  29.  
  30.    @Override
  31.  
  32.    public void paint(Graphics g){
  33.  
  34.        Dimension tamanio = getSize();
  35.  
  36.        ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/imagenes/"+imagen));        
  37.  
  38.        g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);        
  39.  
  40.        setOpaque(false);
  41.  
  42.        super.paintComponent(g);
  43.  
  44.    }
  45.  
  46. }
  47.  
  48.  

 
3.-Para que la imagen ocupe toda la pantalla independientemente del monitor crearemos un clase llamada Resolución.
 
Copiamos el siguiente código:
Código
  1.  
  2. import java.awt.Dimension;
  3.  
  4. import java.awt.Toolkit;
  5.  
  6. /**
  7.  
  8.  * @web http://jc-mouse.blogspot.com/
  9.  
  10.  * @author Mouse
  11.  
  12.  */
  13.  
  14. public class Resolucion {
  15.  
  16.  
  17.  
  18.    public void tamaño() {
  19.  
  20.        // TODO code application logic here
  21.  
  22.        //Obtiene el tamaño de la pantalla
  23.  
  24.        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  25.  
  26.        //obtiene la resolucion de la pantalla en PPP (Puntos por pulgada)
  27.  
  28.        int sr = Toolkit.getDefaultToolkit().getScreenResolution();
  29.  
  30.        //muestra la informacion por la consola de java
  31.  
  32.       // System.out.println("Tamaño de pantalla: " + d.width + "x" + d.height + ", definición: " + sr + " ppp");
  33.  
  34.       jFrameBlocked.ancho = d.width ;
  35.  
  36.        jFrameBlocked.alto = d.height;
  37.  
  38.    }
  39.  
  40. }
  41.  
  42.  
  43.  

 
Y agregamos las siguiente líneas a nuestra clase jFrameBlocked que son las variables a las que se podrá acceder desde la clase fondo para modificarlas con la resolución de la pantalla.
 
 
Código
  1. public class jFrameBlocked extends javax.swing.JFrame {// esta es la clase de nuestro frame
  2.  
  3.    /**
  4.  
  5.      * Creates new form jFrameBlocked
  6.  
  7.      */
  8.  
  9.    public static int alto; //copiamos
  10.  
  11.    public static int ancho;; //copiamos
  12.  
  13.  
  14.  
  15.    Resolucion resolucion = new Resolucion();; //copiamos

4.- También agregamos un método dentro de la clase de nuestro frame para llamar a la clase fondo para mas comodidad.
 
 
Código
  1. public void ColocarImagen(String img) {
  2.  
  3.        Fondo p = new Fondo(ancho,alto,img);
  4.  
  5.        this.add( p , BorderLayout.CENTER);
  6.  
  7.        p.repaint();
  8.  
  9.      }

5.- Luego añadimos otra clases mas llamada  jBlocked que sera la encargada de enviar nuestro jframe al frente cada n milisegundos y asi no dara tiempo para usar alt+f4.. etc .
 
Copiamos el siguiente codigo.

Código
  1. import java.util.concurrent.Executors;
  2.  
  3. import java.util.concurrent.ScheduledExecutorService;
  4.  
  5. import java.util.concurrent.TimeUnit;
  6.  
  7. import javax.swing.JFrame;
  8.  
  9. /**
  10.  
  11.  * @web http://www.jc-mouse.net/
  12.  
  13.  * @author Mouse
  14.  
  15.  */
  16.  
  17. public class jBlocked {
  18.  
  19.  
  20.  
  21.    private JFrame jframe=null;
  22.  
  23.  
  24.  
  25.    /**
  26.  
  27.      * Constructor de clase
  28.  
  29.      */
  30.  
  31.    public jBlocked( JFrame f )
  32.  
  33.    {
  34.  
  35.        this.jframe = f;
  36.  
  37.    }
  38.  
  39.  
  40.  
  41.    /**
  42.  
  43.      * ejecuta una tarea cada "n" tiempo
  44.  
  45.      * Para evitar que el usuario utilice las teclas (WINDOWS + D)(TAB) y asi perder el foco
  46.  
  47.      * de la aplicación, cada 50 milisegundos se envia el JFrame al frente y se cambia su propiedad a maximizado
  48.  
  49.      */
  50.  
  51.    public void block()
  52.  
  53.    {
  54.  
  55.        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
  56.  
  57.        scheduler.scheduleAtFixedRate(
  58.  
  59.            new Runnable()
  60.  
  61.            {
  62.  
  63.                @Override
  64.  
  65.                public void run() {                  
  66.  
  67.                    front();
  68.  
  69.                }
  70.  
  71.              }, 500, 50 , TimeUnit.MILLISECONDS ); //comienza dentro de 1/2 segundo y luego se repite cada N segundos
  72.  
  73.    }
  74.  
  75.    public void front()
  76.  
  77.    {
  78.  
  79.        jframe.setExtendedState( JFrame.MAXIMIZED_BOTH );//maximizado
  80.  
  81.        jframe.toFront();
  82.  
  83.    }
  84. }
  85.  
  86.  
  87.  
  88.  

6.- Una vez que tenemos creado la clase jBlocked , Fondo y todo lo demas, debemos hacer lo siguiente
- Modificaremos el constructor de jFrameBlocked de la siguiente manera:
 
Nota: Mi imagen que voy a poner se llamada foto.jpg cambiar esto si su imagen tiene otro nombre
 
Código
  1.  
  2. public jFrameBlocked() {
  3.  
  4.  
  5.  
  6.        this.setUndecorated(true);//quita bordes a jframe
  7.  
  8.  
  9.  
  10.        initComponents();
  11.  
  12.  
  13.  
  14.        resolucion.tamaño();// obtenemos el tamaño de la pantalla
  15.  
  16.        ColocarImagen("foto.jpg"); // colocamos nuestro fondo al frame
  17.  
  18.  
  19.  
  20.        this.setDefaultCloseOperation( DO_NOTHING_ON_CLOSE  );//evita cerra jframe con ALT+C
  21.  
  22.        this.setExtendedState( MAXIMIZED_BOTH );//maximizado
  23.  
  24.        this.setAlwaysOnTop(true);//siempre al frente      
  25.  
  26.        //nueva instancia de jBlocked pasando como parametros e este JFrame
  27.  
  28.        new jBlocked( this ).block();
  29.  
  30.    }
  31.  
  32.  

Weno hasta aquí estaría todo lo principal echo pero como quiero darle un toque mas de estilo le voy a agregar sonidos y una alarma que suene el tercer intento fallido para los intrusos(osea mi hermana XD), primero creo otra clases llamada Alarma y copiamos este código que será el encargado de reproducir el sonido.
 
Antes crearemos un nueva carpeta dentro de un proyecto llamada sonido y colocaremos los archivos de sonido (en este caso yo tengo 6 archivo WAV )

Código
  1. import java.net.URL;
  2.  
  3. import javax.sound.sampled.AudioInputStream;
  4.  
  5. import javax.sound.sampled.AudioSystem;
  6.  
  7. import javax.sound.sampled.Clip;
  8.  
  9. public class Alarma {
  10.  
  11.        public static Clip sonido;
  12.  
  13.  
  14.  
  15.        public void Reproducir(String archivo,int bd,int duracion){
  16.  
  17.             URL path = Alarma.class.getResource("/sonido/"+archivo);
  18.  
  19.            try {
  20.  
  21.                sonido = AudioSystem.getClip();
  22.  
  23.                AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(path);
  24.  
  25.                sonido.open(audioInputStream);
  26.  
  27.                sonido.start();
  28.  
  29.                if(bd == 0){ // si la bd(bandera)  es 0 entonces reproduce la alarma una y otra ves
  30.  
  31.                    sonido.loop(Clip.LOOP_CONTINUOUSLY);// reproduce el fichero de sonido una y otra vez sin parar.
  32.  
  33.                }else{ //sino esperamos a que es archivo termine para cerrarlo
  34.  
  35.                    while (sonido.isRunning()){ // verifica si el archivo todavía se esta reproduciendo
  36.  
  37.  
  38.  
  39.                        // Se cierra el clip. Significa que acabo el archivo y tendremos que cerrarlo
  40.  
  41.                        sonido.close();
  42.  
  43.  
  44.  
  45.                    }
  46.  
  47.  
  48.  
  49.                }
  50.  
  51.                //Thread.sleep(60000); // 1000 milisegundos (10 segundos)
  52.  
  53.                //sonido.close();
  54.  
  55.            }
  56.  
  57.                catch (Exception tipoerror) {
  58.  
  59.                System.out.println("" + tipoerror);
  60.  
  61.        }
  62.  
  63.  
  64.  
  65.    }    
  66.  
  67. }

Quiero aclarar que este código funciona muy bien cuando tengamos nuestro JAR
Ya que hay muchos códigos que he probado y solo reproduce el sonido cuando lo ejecutamos desde el netbeans, asi que aprovechen jeje.
 
Ya con todo listo solo nos queda colocar el código de los botón Aceptar y Cancelar este ultimo no es necesario solamente lo vamos a utilizar para cerrar nuestra aplicación en las etapas de prueba .
 
En el botón aceptar damos doble click y nos llevara al método del botón ay copiamos lo siguiente:

Nota: para que esto funcione deben tener los archivos que yo tengo sino solamente borren toda las líneas que usan la clase Alarma.

Código
  1. int cont = 0  ; // nuestro contador para saber cuantas veces a fallado
  2.  
  3. private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt) {
  4.  
  5.  // este es el metodo de nuestro boton                                
  6.  
  7.  
  8.  
  9.        // TODO add your handling code here:
  10.  
  11.        if(this.user.getText().equals("") || this.pass.getText().equals("")){
  12.  
  13.             Alarma alarma1 =  new Alarma();
  14.  
  15.              alarma1.Reproducir("Error-lockendo2.wav",1,3);
  16.  
  17.              JOptionPane.showMessageDialog( this, "Intruso alejate del computadora",".::ERROR::.",JOptionPane.ERROR_MESSAGE);
  18.  
  19.  
  20.  
  21.        }else{
  22.  
  23.  
  24.  
  25.           // String clavemd5 = TestEncriptarMD5.encriptaEnMD5(this.pass.getText());
  26.  
  27.  
  28.  
  29.  
  30.  
  31.            if( this.user.getText().equals("user") && this.pass.getText().equals("12345") )
  32.  
  33.            {
  34.  
  35.  
  36.  
  37.                Alarma permitido =  new Alarma();
  38.  
  39.                permitido.Reproducir("acceso_permitido.wav",1,3);
  40.  
  41.                try {
  42.  
  43.                    Thread.sleep(1000);
  44.  
  45.                    this.dispose();
  46.  
  47.                    Thread.sleep(1000);
  48.  
  49.                     System.exit(0);
  50.  
  51.                } catch (InterruptedException ex) {
  52.  
  53.  
  54.  
  55.     Logger.getLogger(jFrameBlocked.class.getName()).log(Level.SEVERE, null, ex);
  56.  
  57.                }
  58.  
  59.  
  60.  
  61.  
  62.  
  63.            }else{  
  64.  
  65.                cont = cont+1 ;
  66.  
  67.                if(cont < 3){
  68.  
  69.  
  70.  
  71.                Alarma alarma2 =  new Alarma();
  72.  
  73.                alarma2.Reproducir("Error-lockendo.wav",1,3);
  74.  
  75.  
  76.  
  77.                JOptionPane.showMessageDialog( this, "Usuario o contraseña invalida!",".::ERROR::.",JOptionPane.ERROR_MESSAGE);
  78.  
  79.                }
  80.  
  81.  
  82.  
  83.                 if(cont == 2){
  84.  
  85.                    try {
  86.  
  87.                        Thread.sleep(1000);  
  88.  
  89.                        Alarma alarma3 =  new Alarma();
  90.  
  91.                         alarma3.Reproducir("Error-lockendo3.wav",1,3);
  92.  
  93.                    } catch (InterruptedException ex) {
  94.  
  95.      Logger.getLogger(jFrameBlocked.class.getName()).log(Level.SEVERE, null, ex);
  96.  
  97.                    }
  98.  
  99.  
  100.  
  101.  
  102.  
  103.                }
  104.  
  105.                if(cont == 3){
  106.  
  107.                    //System.out.println(cont);
  108.  
  109.                     Alarma alarma4 =  new Alarma();
  110.  
  111.                     alarma4.Reproducir("Error-lockendo4.wav",1,3);
  112.  
  113.  
  114.  
  115.                   //JOptionPane.showMessageDialog( this, "Te lo adverti!",".::ERROR::.",JOptionPane.ERROR_MESSAGE);
  116.  
  117.                   Alarma alarma =  new Alarma();
  118.  
  119.                   alarma.Reproducir("alarma.wav",0,0);
  120.  
  121.  
  122.  
  123.                   cont = 0;// reiniciamos nuestro contador a 0 de nuevo
  124.  
  125.                }
  126.  
  127.             }
  128.  
  129.        }
  130.  
  131.    }              

 
Para mayor seguridad yo había puesto la comparación de la contraseña en md5 pero para no complicar las cosas lo hice así directo, para los que le interese la clase llamada TestEncriptarMD5 para convertir string a md5 esta es:
 
 
Código
  1. **
  2.  
  3. *
  4.  
  5. * @author Administrador
  6.  
  7. */
  8.  
  9. /**
  10.  
  11.  *      Instituto Tecnologico de Zacatepec
  12.  
  13.  * Descripcion:   Encriptacion de paswords en MD5
  14.  
  15.  * @author Gonzalo Silverio
  16.  
  17.  * Fecha: 03-12-2011
  18.  
  19.  * Archivo:  TestEncriptarMD5.java
  20.  
  21.  */
  22.  
  23.  
  24.  
  25. import java.security.MessageDigest;
  26.  
  27. import java.security.NoSuchAlgorithmException;
  28.  
  29.  
  30.  
  31. public class TestEncriptarMD5
  32.  
  33. {
  34.  
  35.    private static final char[] CONSTS_HEX = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
  36.  
  37.    public static String encriptaEnMD5(String stringAEncriptar)
  38.  
  39.    {
  40.  
  41.        try
  42.  
  43.        {
  44.  
  45.           MessageDigest msgd = MessageDigest.getInstance("MD5");
  46.  
  47.           byte[] bytes = msgd.digest(stringAEncriptar.getBytes());
  48.  
  49.           StringBuilder strbCadenaMD5 = new StringBuilder(2 * bytes.length);
  50.  
  51.           for (int i = 0; i < bytes.length; i++)
  52.  
  53.           {
  54.  
  55.               int bajo = (int)(bytes[i] & 0x0f);
  56.  
  57.               int alto = (int)((bytes[i] & 0xf0) >> 4);
  58.  
  59.               strbCadenaMD5.append(CONSTS_HEX[alto]);
  60.  
  61.               strbCadenaMD5.append(CONSTS_HEX[bajo]);
  62.  
  63.           }
  64.  
  65.           return strbCadenaMD5.toString();
  66.  
  67.        } catch (NoSuchAlgorithmException e) {
  68.  
  69.           return null;
  70.  
  71.        }
  72.  
  73.    }
  74.  
  75.  
  76.  
  77.     public static void main(String args[])
  78.  
  79.      {
  80.  
  81.     System.out.println("\n\nEncriptacion en MD5 : '"+encriptaEnMD5("123")+"'");
  82.  
  83.   System.out.println("Encriptacion en MD5 de hola: '"+encriptaEnMD5("hola")+"'");
  84.  
  85.  
  86.  
  87.      }
  88.  
  89. }

 
Y en el botón cancelar solo ponemos   System.exit(0); (este ultimo no es necesario solamente lo vamos a utilizar para cerrar nuestra aplicación en las etapas de prueba .)
 
Y  terminamos ! ! ! Espero que les haya gustado ,cualquier sugerencia, error o critica constructiva comente . Y siendo sinceros me a costado escribir tanto porque me cuesta explicarme.
 
Para los que quieran descargar este proyecto completo y original :
 http://espacio-hacker.blogspot.com/2013/07/java-bloqueador-de-pantalla-al-estilo.html


Paginas que me han ayudado al desarrollo de este proyecto y que son autoras de las mayorías de las clases que he puesto :
http://www.jc-mouse.net/



« Última modificación: 6 Agosto 2013, 20:17 pm por MarteagaM » En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: [Tutorial] Bloqueador de pantalla al estilo Anonymous
« Respuesta #1 en: 6 Agosto 2013, 19:57 pm »

Gracias.

Lo probaré más tarde a ver qué tal.

Saludos.


« Última modificación: 6 Agosto 2013, 21:18 pm por Darhius » En línea

abc
moi_realine

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: [Tutorial] Bloqueador de pantalla al estilo Anonymous
« Respuesta #2 en: 7 Agosto 2013, 23:08 pm »

Lo necesitaba!
Gracias


-----   REGUN MUSIC   -----
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Tutorial] Bloqueador de pantalla al estilo Anonymous
« Respuesta #3 en: 17 Agosto 2013, 15:30 pm »

Muchas gracias por tu código.
Una forma limpia y elegante de decidir el intervalo de ejecución de una tarea de un thread. Me ha gustado!

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tutorial [Estilo Gargola]
Diseño Gráfico
+ enrique ZP 7 4,611 Último mensaje 15 Junio 2005, 06:03 am
por ericsolid
Tutorial: estilo XP en VB6 y VB.net
Programación Visual Basic
karmany 5 4,514 Último mensaje 1 Septiembre 2006, 03:06 am
por Nakp
Es posible dividir pantalla en un mismo pc? al estilo De, las consolas?
Juegos y Consolas
XXXXXX 3 1,955 Último mensaje 26 Diciembre 2008, 03:29 am
por XXXXXX
No puedo enlazar la estilo-gener.css i la index.html i lo pongo como la Tutorial
Desarrollo Web
4r3s 5 3,438 Último mensaje 14 Enero 2011, 19:07 pm
por RyogiShiki
[Tutorial] Programar un patcher/crack con estilo « 1 2 »
Ingeniería Inversa
Mad Antrax 18 10,409 Último mensaje 23 Mayo 2013, 02:16 am
por apuromafo CLS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines