Actualiser 7lna.py

This commit is contained in:
2026-03-06 10:18:25 +00:00
parent a5f93cb06d
commit 3d6f389e54

68
7lna.py
View File

@@ -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: