#!/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()