From 3d6f389e54e80580809799ffad7bc16427aead63 Mon Sep 17 00:00:00 2001 From: 7ka1 <7ka1@noreply.localhost> Date: Fri, 6 Mar 2026 10:18:25 +0000 Subject: [PATCH] Actualiser 7lna.py --- 7lna.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/7lna.py b/7lna.py index ae102f8..8705f64 100644 --- a/7lna.py +++ b/7lna.py @@ -4,6 +4,7 @@ import os import threading import subprocess import urllib.request +import urllib.error import time import datetime import glob @@ -51,7 +52,7 @@ class RealTimeShieldHandler(FileSystemEventHandler): class Antivirus7LnA(ctk.CTk): def __init__(self): super().__init__() - self.title("7LnA Security Suite - V8.2 Enterprise Edition") + self.title("7LnA Security Suite - V9 Cyber-Sentinel") self.geometry("1250x850") self.minsize(1000, 700) @@ -95,7 +96,7 @@ class Antivirus7LnA(ctk.CTk): self.btn_history = self.create_nav_button("📜 Rapports", 8, "history") self.btn_update = self.create_nav_button("🔄 Mise Ă  jour", 9, "update") - self.version_label = ctk.CTkLabel(self.sidebar, text="v8.2 - Enterprise", text_color="#6B7280", font=ctk.CTkFont(weight="bold")) + self.version_label = ctk.CTkLabel(self.sidebar, text="v9.0 - Cyber-Sentinel", text_color="#6B7280", font=ctk.CTkFont(weight="bold")) self.version_label.grid(row=10, column=0, pady=20, sticky="s") self.views = {} @@ -206,11 +207,10 @@ class Antivirus7LnA(ctk.CTk): self.scan_console = ctk.CTkTextbox(frame, font=ctk.CTkFont(family="Consolas", size=13), fg_color="#111827", corner_radius=10) self.scan_console.grid(row=4, column=0, columnspan=3, pady=20, sticky="nsew") self.setup_console_tags(self.scan_console) - self.scan_console.insert("end", f"{self.get_time_prefix()}[*] Moteur de dĂ©tection V8.2 prĂȘt...\n", "info") + self.scan_console.insert("end", f"{self.get_time_prefix()}[*] Moteur de dĂ©tection V9 prĂȘt...\n", "info") # ----- CORRECTION ROOTKIT ET MAJ SIGNATURES (Authentification) ----- def get_sudo_password(self, callback_func, title="SĂ©curitĂ© Administrateur", msg="PrivilĂšges requis pour cette action.\nEntrez votre mot de passe session :"): - """Fonction gĂ©nĂ©rique pour demander le mot de passe sudo proprement""" dialog = ctk.CTkToplevel(self) dialog.title(title) dialog.geometry("400x230") @@ -400,22 +400,80 @@ class Antivirus7LnA(ctk.CTk): else: self.audit_console.insert("end", f"{self.get_time_prefix()}⚠ PARE-FEU INACTIF.\n") except: pass - # --- VUE : OUTILS AVANCÉS --- + # --- VUE : OUTILS AVANCÉS (V9 OSINT) --- def init_tools_view(self): frame = ctk.CTkScrollableFrame(self, fg_color="transparent") self.views["tools"] = frame ctk.CTkLabel(frame, text="BoĂźte Ă  Outils", font=ctk.CTkFont(size=34, weight="bold")).pack(anchor="w", pady=(0, 20)) + # NOUVEAU : VĂ©rificateur de Fuites de DonnĂ©es (OSINT) + breach_card = ctk.CTkFrame(frame, fg_color="#1F2937", corner_radius=10) + breach_card.pack(fill="x", pady=10, ipady=15) + ctk.CTkLabel(breach_card, text="🌐 VĂ©rificateur de Fuites (OSINT)", font=ctk.CTkFont(size=18, weight="bold"), text_color="#A855F7").pack(anchor="w", padx=20, pady=(10,0)) + ctk.CTkLabel(breach_card, text="VĂ©rifiez si votre adresse e-mail a Ă©tĂ© compromise dans une fuite de donnĂ©es (Dark Web).", text_color="#9CA3AF").pack(anchor="w", padx=20, pady=(5, 10)) + + input_frame = ctk.CTkFrame(breach_card, fg_color="transparent") + input_frame.pack(fill="x", padx=20, pady=5) + self.email_entry = ctk.CTkEntry(input_frame, placeholder_text="Entrez votre e-mail...", width=300) + self.email_entry.pack(side="left", padx=(0, 10)) + ctk.CTkButton(input_frame, text="VĂ©rifier l'e-mail", fg_color="#9333EA", hover_color="#7E22CE", command=self.run_breach_check).pack(side="left") + + self.breach_result_var = ctk.StringVar(value="") + self.breach_result_label = ctk.CTkLabel(breach_card, textvariable=self.breach_result_var, text_color="#D1D5DB", justify="left") + self.breach_result_label.pack(anchor="w", padx=20, pady=10) + + # Nettoyeur clean_card = ctk.CTkFrame(frame, fg_color="#1F2937", corner_radius=10) clean_card.pack(fill="x", pady=10, ipady=15) ctk.CTkLabel(clean_card, text="đŸ§č Nettoyeur SystĂšme", font=ctk.CTkFont(size=18, weight="bold"), text_color="#10B981").pack(anchor="w", padx=20, pady=(10,0)) ctk.CTkButton(clean_card, text="Vider le Cache et Corbeille", fg_color="#059669", hover_color="#047857", command=self.run_cleaner).pack(anchor="w", padx=20, pady=10) + # Destructeur shred_card = ctk.CTkFrame(frame, fg_color="#1F2937", corner_radius=10) shred_card.pack(fill="x", pady=10, ipady=15) ctk.CTkLabel(shred_card, text="đŸ”„ Destructeur de Fichiers", font=ctk.CTkFont(size=18, weight="bold"), text_color="#EF4444").pack(anchor="w", padx=20, pady=(10,0)) ctk.CTkButton(shred_card, text="DĂ©truire un fichier", fg_color="#DC2626", hover_color="#991B1B", command=self.run_shredder).pack(anchor="w", padx=20, pady=10) + # --- LOGIQUE OSINT --- + def run_breach_check(self): + email = self.email_entry.get().strip() + if not email or "@" not in email: + self.breach_result_var.set("❌ Veuillez entrer une adresse e-mail valide.") + self.breach_result_label.configure(text_color="#EF4444") + return + + self.breach_result_var.set("⏳ Interrogation des bases de donnĂ©es...") + self.breach_result_label.configure(text_color="#3B82F6") + threading.Thread(target=self._exec_breach_check, args=(email,), daemon=True).start() + + def _exec_breach_check(self, email): + try: + url = f"https://api.xposedornot.com/v1/check-email/{email}" + req = urllib.request.Request(url, headers={'User-Agent': '7LnA-Security-Suite'}) + try: + with urllib.request.urlopen(req) as response: + data = json.loads(response.read().decode()) + if "breaches" in data and data["breaches"]: + breaches = data["breaches"][0] + breach_count = len(breaches) + breach_names = ", ".join(breaches[:4]) + suffix = "..." if breach_count > 4 else "" + self.breach_result_var.set(f"🚹 DANGER : E-mail trouvĂ© dans {breach_count} fuite(s) !\nSources connues : {breach_names}{suffix}\nChangez vos mots de passe immĂ©diatement.") + self.breach_result_label.configure(text_color="#EF4444") + else: + self.breach_result_var.set("✅ Bonne nouvelle : Aucune fuite dĂ©tectĂ©e pour cet e-mail.") + self.breach_result_label.configure(text_color="#10B981") + except urllib.error.HTTPError as e: + if e.code == 404: + self.breach_result_var.set("✅ Bonne nouvelle : Aucune fuite dĂ©tectĂ©e pour cet e-mail.") + self.breach_result_label.configure(text_color="#10B981") + else: + self.breach_result_var.set(f"❌ Erreur serveur lors de la vĂ©rification ({e.code}).") + self.breach_result_label.configure(text_color="#F59E0B") + except Exception as e: + self.breach_result_var.set("❌ Impossible de contacter le serveur d'OSINT. VĂ©rifiez votre connexion.") + self.breach_result_label.configure(text_color="#F59E0B") + def run_cleaner(self): paths_to_clean = [os.path.expanduser("~/.local/share/Trash/files"), os.path.expanduser("~/.cache/thumbnails")] for path in paths_to_clean: