File size: 4,607 Bytes
01cea39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# -*- coding: utf-8 -*-
"""app.ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1h7xVhh5VQkN4vxWTZpjv6-PvNSTDngRs
"""

# La librería gradio es la que permite hacer la interfaz web para usar el modelo
import gradio as gr
# groq es el servicio de API para usar modelos LLM
from groq import Groq


# Api key for Groq
API_KEY = "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" # Reemplazar con la API Key generada
# Configure Groq client
client = Groq(api_key=API_KEY)


# Clase para generar emails usando Groq, para solo acceder directamente con el nombre
# de la funcion que se quiere usar
class GeneradorEmailsGroq:
 # Esta funcion es solo para seleccionar el modelo que se quiere usar
    def __init__(self, api_key: str):
        self.client = Groq(api_key=api_key)
        self.modelos = {
              "rapido": "llama-3.3-8b-instant",
              "balanceado": "llama-3.3-70b-versatile",
              "mejor": "llama-3.3-70b-versatile"
        }

     # Esta es la funcion que concina el correo
    def generar_email(
        self,
        tipo: str,
        categoria: str = "phishing",
        calidad: str = "balanceado"
    ) -> str:
       if categoria == "phishing":
 #Le dice al modelo en que se tiene que basar para hacer las respuestas
          system = "Eres experto en ciberseguridad generando ejemplos realistas de phishing para entrenamiento."
 #Aqui esta el prompot que se hace, cambialo si quioeres que haga algo extra op si queres que omita alguna parte
          prompt = f"""Actúa como un experto en ciberseguridad creando un
ejemplo realista de phishing.
Genera un email de phishing simulando ser {tipo} que sea tan convincente que
parezca completamente real.
El email debe:
- Tener un asunto que haga que alguien quiera abrirlo inmediatamente
- Explicar un problema urgente con {tipo}, ya sea una cuenta comprometida, un
pago fallido, o una actualización necesaria
- Incluir números de caso, fechas, y referencias que suenen oficiales
- Si incluyes algun plan o que involucre dinero, utiliza montos o
suscripciones que maneja {tipo}
- No incluyas datos como 12345, utiliza numeros que sean creibles y utiliza
fechas que sean cercanas a octubre del 2025
- Decir exactamente qué deben hacer (verificar, actualizar, etc.)
- Usar https://home-stats-pi.vercel.app/ donde normalmente irían los links
maliciosos
- Terminar con una firma profesional de {tipo} con teléfono de soporte si
tiene contacto de soporte, caso contrario. no incluir la linea de numero de
contacto de soporte
El tono debe ser: profesional, urgente sin ser alarmista, y completamente
creíble.
Genera el email completo sin explicaciones adicionales."""
       else:
           system = "Genera emails legítimos y naturales."
           prompt = f"Genera un email legítimo de tipo {tipo}. Solo el email."

       try:
           response = self.client.chat.completions.create(
                model=self.modelos[calidad],
                messages=[
                    {"role": "system", "content": system},
                    {"role": "user", "content": prompt}
               ],
 # Esto le indica que tan creativo tendria que ser con las respuestas que de
               temperature=0.85,
 # Aqui le indica cuantas palabras tiene que generar, con 1000
 # son aproximadamente 750 palabras
               max_tokens=1000
           )
 # retorna el texto que genero el modelo desde la api

           return response.choices[0].message.content

       except Exception as e:
                print(f"Error: {e}")
                return None

if __name__ == "__main__":
    generador = GeneradorEmailsGroq(api_key=API_KEY)
 # Aqui poder cambiar el parametro que dice netflix para que pruebe con otras empresas
    email = generador.generar_email("Netflix", "phishing", "mejor")
 # Si genero un correo lo mostrara
    if email:
         print("\n")
         print(email)


# Esta es la interfaz que se hace en gradio
def generar_email_gradio(nombre_empresa, categoria, calidad):
 generador = GeneradorEmailsGroq(api_key=API_KEY)
 email = generador.generar_email(nombre_empresa, categoria, calidad)
 return email

iface = gr.Interface(
     fn=generar_email_gradio,
     inputs=[
          gr.Textbox(label="Nombre de la empresa"),
          gr.Radio(["phishing", "legitimo"], label="Categoría del email"),
          gr.Dropdown(["rapido", "balanceado", "mejor"], label="Calidad del modelo")
     ],
     outputs=gr.Textbox(label="Email Generado", elem_id="email_output",
lines=10)
)

# Aqui se lanza la interfaz web
iface.launch()