| |
| """app.ipynb |
| |
| Automatically generated by Colab. |
| |
| Original file is located at |
| https://colab.research.google.com/drive/1h7xVhh5VQkN4vxWTZpjv6-PvNSTDngRs |
| """ |
|
|
| |
| import gradio as gr |
| |
| from groq import Groq |
|
|
|
|
| |
| API_KEY = "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" |
| |
| client = Groq(api_key=API_KEY) |
|
|
|
|
| |
| |
| class GeneradorEmailsGroq: |
| |
| 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" |
| } |
|
|
| |
| def generar_email( |
| self, |
| tipo: str, |
| categoria: str = "phishing", |
| calidad: str = "balanceado" |
| ) -> str: |
| if categoria == "phishing": |
| |
| system = "Eres experto en ciberseguridad generando ejemplos realistas de phishing para entrenamiento." |
| |
| 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} |
| ], |
| |
| temperature=0.85, |
| |
| |
| max_tokens=1000 |
| ) |
| |
|
|
| 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) |
| |
| email = generador.generar_email("Netflix", "phishing", "mejor") |
| |
| if email: |
| print("\n") |
| print(email) |
|
|
|
|
| |
| 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) |
| ) |
|
|
| |
| iface.launch() |
|
|
|
|