Tabla de Contenidos
Hay una librería en Python que nos permite utilizar la API de virustotal, pero primero tendremos que instalarla con el siguiente comando:
pip install virustotal-python pip install virustotal-api
ANALIZAR ARCHIVO NO EXISTENTE EN LA BASE DE DATOS DE VIRUSTOTAL
En caso de que el archivo no se encuentre subido a la base de datos de virustotal, primero debemos utilizar otra librería de python para realizar primero esa subida y luego poder analizarlo. Por tanto con este código podemos subir un archivo desde Python a virustotal:
import virustotal_python import os.path archivo = "prueba.py" # Crea un diccionario que contenga el archivo para enviarlo para la codificación de varias partes files = {"file": (os.path.basename(archivo), open(os.path.abspath(archivo), "rb"))} with virustotal_python.Virustotal("API") as vtotal: resp = vtotal.request("files", files=files, method="POST") print(resp.json())
Aunque también podemos hacer este mismo código mucho más simple de esta forma:
import virustotal_python archivo = "prueba.py" files = {"file": ((archivo), open((archivo), "rb"))} with virustotal_python.Virustotal("API") as vtotal: resp = vtotal.request("files", files=files, method="POST") print(resp.json())
Y ya está subido:
También podríamos analizar varios archivos que no se encuentren en la base de datos de virustotal a la vez:
from hashlib import md5 from virus_total_apis import PublicApi import os # AQUÍ SUBIMOS LOS ARCHIVOS archivos = os.listdir() # A PARTIR DE AQUÍ ES DONDE OBTENEMOS EL REPORTE API_KEY = "974ab16a5f23d3c9997954dd01f253e2752f4a7b092a82cc3d68ecf06ff336f6" # Reemplaza "TUI_API_KEY_AQUI" con tu clave API de VirusTotal. api = PublicApi(API_KEY) for archivo in archivos: with open(archivo, "rb") as f: file_content = f.read() file_hash = md5(file_content).hexdigest() response = api.get_file_report(file_hash) if response["response_code"] == 200: # Entramos en este if si el escaneo fue exitoso. if "positives" in response["results"] and response["results"]["positives"] > 0: print(f"El archivo {archivo} es malicioso.") else: print(f"El archivo {archivo} es seguro.") elif response["response_code"] == 0: # Entramos en este caso si el archivo no se encuentra en VirusTotal. print(f"El archivo {archivo} no se encuentra en la base de datos de VirusTotal.") else: print(f"No se pudo obtener el análisis del archivo {archivo}.")
Y este es el resultado:
ANALIZAR ARCHIVO EXISTENTE EN LA BASE DE DATOS DE VIRUSTOTAL
Si el archivo que queremos analizar ya se encuentra dentro de la base de datos de virustotal, podemos utilizar la librería virus_total_apis para hacer el análisis. Por tanto con este código podríamos conectarnos a virustotal y obtener el reporte de un archivo:
from hashlib import md5 from virus_total_apis import PublicApi API_KEY = "API" # Importamos la API de virustotal. api = PublicApi(API_KEY) with open("pruebas.py", "rb") as f: file_hash = md5(f.read()).hexdigest() # Convertimos en hash todo el contenido del archivo. response = api.get_file_report(file_hash) # Obtenemos la respuesta de virustotal print(response)
También podemos utilizar sentencias condicionales que evalúen los resultados en forma de diccionario que nos ofrece virustotal:
from hashlib import md5 from virus_total_apis import PublicApi # AQUÍ SUBIMOS LOS ARCHIVOS archivos = ["pass.txt", "users.txt"] # A PARTIR DE AQUÍ ES DONDE OBTENEMOS EL REPORTE API_KEY = "API" # Importamos la API de virustotal. api = PublicApi(API_KEY) for i in archivos: with open(i, "rb") as f: file_content = f.read() file_hash = md5(file_content).hexdigest() # Convertimos en hash todo el contenido del archivo. response = api.get_file_report(file_hash) # Obtenemos la respuesta de virustotal print(response) if response["response_code"] == 200: # Entramos en este if si el escaneo fue exito. if response["results"]["positives"] > 0: # Detecta que no haya ningún positivo, por lo que es malicioso. print("Archivo malicioso.") else: print("Archivo seguro.") # Si encuentra que es positivo se imprime esto. else: print("No ha podido obtenerse el análisis del archivo.")
DETECTAR LOS REPORTES QUE TIENE UN ARCHIVO
También podemos hacer que el script nos diga si un archivo tiene más de 10 o 15 reportes por ejemplo, simplemente accediendo al diccionario:
import hashlib from virus_total_apis import PublicApi API_KEY = "API" api = PublicApi(API_KEY) with open("pruebas.py", "rb") as f: file_hash = hashlib.md5(f.read()).hexdigest() response = api.get_file_report(file_hash) # Aquí evalúa los resultados del análisis. if response["response_code"] == 200: if response["results"]["positives"] >= 15: # Detecta que no haya ningún positivo, por lo que es malicioso. print("El archivo tiene 15 o más reportes.") else: print("El archivo tiene menos de 15 reportes.") else: print("No ha podido obtenerse el análisis del archivo.")
Ahora otro ejemplo con otro archivo que sí tiene más de 15 reportes:
import hashlib from virus_total_apis import PublicApi API_KEY = "API" # Importamos la API de virustotal. api = PublicApi(API_KEY) with open("virus.exe", "rb") as f: file_hash = hashlib.md5(f.read()).hexdigest() response = api.get_file_report(file_hash) # Aquí evalúa los resultados del análisis. if response["response_code"] == 200: if response["results"]["positives"] >= 15: # Detecta que no haya ningún positivo, por lo que es malicioso. print("El archivo tiene 15 o más reportes.") else: print("El archivo tiene menos de 15 reportes.") else: print("No ha podido obtenerse el análisis del archivo.")
ANALIZAR UN HASH VIRUSTOTAL PYTHON
Si quisiéramos analizar un hash, simplemente tendríamos que proporcionarlo de esta forma:
from virus_total_apis import PublicApi API_KEY = "API" # Importamos la API de virustotal. api = PublicApi(API_KEY) hash_to_check = "81dc9bdb52d04dc20036dbd8313ed055" # Este es el hash que queremos analizar response = api.get_file_report(hash_to_check) # Obtenemos la respuesta de virustotal print(response)
Y esta es la respuesta:





