securetest / main.py
nareauow's picture
Rename main (2).py to main.py
c03789c verified
#!/usr/bin/env python3
"""
SecureX Light - Version simplifiée du système de détection de fraude
"""
import tkinter as tk
from tkinter import scrolledtext, messagebox
import re
import sqlite3
import json
from datetime import datetime
class FraudDetector:
def __init__(self):
self.patterns = [
{
"name": "fake_advisor",
"keywords": ["conseiller", "banque", "urgent", "code"],
"weight": 0.9
},
{
"name": "fake_refund",
"keywords": ["remboursement", "argent", "code"],
"weight": 0.85
},
{
"name": "credential_theft",
"keywords": ["mot de passe", "identifiant", "code secret"],
"weight": 0.95
}
]
self.init_database()
def init_database(self):
"""Crée une base de données SQLite simple"""
self.conn = sqlite3.connect(":memory:")
self.cursor = self.conn.cursor()
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS calls (
id INTEGER PRIMARY KEY,
transcript TEXT,
score REAL,
timestamp DATETIME
)
""")
self.conn.commit()
def analyze_text(self, text):
"""Analyse le texte avec des motifs simples"""
if not text:
return 0.0
text_lower = text.lower()
total_score = 0.0
for pattern in self.patterns:
matches = sum(1 for word in pattern["keywords"] if word in text_lower)
if matches > 0:
total_score += (matches / len(pattern["keywords"])) * pattern["weight"]
# Détection d'urgence
urgency_words = ["urgent", "immédiat", "vite", "maintenant"]
if sum(1 for word in urgency_words if word in text_lower) >= 2:
total_score += 0.2
return min(total_score, 1.0)
def save_call(self, text, score):
"""Sauvegarde l'appel dans la base"""
self.cursor.execute("""
INSERT INTO calls (transcript, score, timestamp)
VALUES (?, ?, ?)
""", (text, score, datetime.now()))
self.conn.commit()
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("SecureX Light - Détection de Fraude")
self.geometry("700x500")
self.detector = FraudDetector()
self.create_widgets()
def create_widgets(self):
"""Crée l'interface utilisateur"""
# Zone de texte pour l'entrée
tk.Label(self, text="Transcript d'appel:").pack(pady=5)
self.text_input = scrolledtext.ScrolledText(self, height=10)
self.text_input.pack(fill=tk.X, padx=10, pady=5)
# Boutons
btn_frame = tk.Frame(self)
btn_frame.pack(pady=10)
tk.Button(btn_frame, text="Analyser", command=self.analyze).pack(side=tk.LEFT, padx=5)
tk.Button(btn_frame, text="Exemple Fraude", command=self.load_fraud_example).pack(side=tk.LEFT, padx=5)
tk.Button(btn_frame, text="Exemple Normal", command=self.load_normal_example).pack(side=tk.LEFT, padx=5)
# Résultats
tk.Label(self, text="Résultats:").pack(pady=5)
self.result_text = scrolledtext.ScrolledText(self, height=10)
self.result_text.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
def analyze(self):
"""Lance l'analyse"""
text = self.text_input.get("1.0", tk.END).strip()
if not text:
messagebox.showwarning("Attention", "Veuillez entrer un texte à analyser")
return
score = self.detector.analyze_text(text)
self.detector.save_call(text, score)
# Affichage des résultats
self.result_text.delete("1.0", tk.END)
if score > 0.7:
result = f"🚨 ALERTE FRAUDE (Score: {score:.0%})\n\n"
result += "Indicateurs détectés:\n"
result += "- Langage urgent ou pressant\n"
result += "- Demande d'informations sensibles\n"
result += "\nAction recommandée: Terminer l'appel et contacter votre banque"
elif score > 0.4:
result = f"⚠️ RISQUE MODÉRÉ (Score: {score:.0%})\n\n"
result += "Soyez prudent et ne donnez pas d'informations personnelles"
else:
result = f"✅ APPEL NORMAL (Score: {score:.0%})\n\n"
result += "Aucun indicateur de fraude détecté"
self.result_text.insert(tk.END, result)
def load_fraud_example(self):
"""Charge un exemple frauduleux"""
example = ("Bonjour, je suis votre conseiller bancaire. Nous avons détecté une activité "
"suspecte. Pour sécuriser votre compte, veuillez confirmer votre code secret IMMÉDIATEMENT.")
self.text_input.delete("1.0", tk.END)
self.text_input.insert("1.0", example)
def load_normal_example(self):
"""Charge un exemple normal"""
example = ("Bonjour, je vous appelle pour vous informer que votre carte bancaire "
"arrive à expiration. Souhaitez-vous recevoir la nouvelle par courrier ?")
self.text_input.delete("1.0", tk.END)
self.text_input.insert("1.0", example)
if __name__ == "__main__":
app = Application()
app.mainloop()