Actualiser 7lna.py
This commit is contained in:
68
7lna.py
68
7lna.py
@@ -4,6 +4,7 @@ import os
|
|||||||
import threading
|
import threading
|
||||||
import subprocess
|
import subprocess
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
import urllib.error
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
import glob
|
import glob
|
||||||
@@ -51,7 +52,7 @@ class RealTimeShieldHandler(FileSystemEventHandler):
|
|||||||
class Antivirus7LnA(ctk.CTk):
|
class Antivirus7LnA(ctk.CTk):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.title("7LnA Security Suite - V8.2 Enterprise Edition")
|
self.title("7LnA Security Suite - V9 Cyber-Sentinel")
|
||||||
self.geometry("1250x850")
|
self.geometry("1250x850")
|
||||||
self.minsize(1000, 700)
|
self.minsize(1000, 700)
|
||||||
|
|
||||||
@@ -95,7 +96,7 @@ class Antivirus7LnA(ctk.CTk):
|
|||||||
self.btn_history = self.create_nav_button("📜 Rapports", 8, "history")
|
self.btn_history = self.create_nav_button("📜 Rapports", 8, "history")
|
||||||
self.btn_update = self.create_nav_button("🔄 Mise à jour", 9, "update")
|
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.version_label.grid(row=10, column=0, pady=20, sticky="s")
|
||||||
|
|
||||||
self.views = {}
|
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 = 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.scan_console.grid(row=4, column=0, columnspan=3, pady=20, sticky="nsew")
|
||||||
self.setup_console_tags(self.scan_console)
|
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) -----
|
# ----- 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 :"):
|
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 = ctk.CTkToplevel(self)
|
||||||
dialog.title(title)
|
dialog.title(title)
|
||||||
dialog.geometry("400x230")
|
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")
|
else: self.audit_console.insert("end", f"{self.get_time_prefix()}⚠️ PARE-FEU INACTIF.\n")
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
# --- VUE : OUTILS AVANCÉS ---
|
# --- VUE : OUTILS AVANCÉS (V9 OSINT) ---
|
||||||
def init_tools_view(self):
|
def init_tools_view(self):
|
||||||
frame = ctk.CTkScrollableFrame(self, fg_color="transparent")
|
frame = ctk.CTkScrollableFrame(self, fg_color="transparent")
|
||||||
self.views["tools"] = frame
|
self.views["tools"] = frame
|
||||||
ctk.CTkLabel(frame, text="Boîte à Outils", font=ctk.CTkFont(size=34, weight="bold")).pack(anchor="w", pady=(0, 20))
|
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 = ctk.CTkFrame(frame, fg_color="#1F2937", corner_radius=10)
|
||||||
clean_card.pack(fill="x", pady=10, ipady=15)
|
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.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)
|
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 = ctk.CTkFrame(frame, fg_color="#1F2937", corner_radius=10)
|
||||||
shred_card.pack(fill="x", pady=10, ipady=15)
|
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.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)
|
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):
|
def run_cleaner(self):
|
||||||
paths_to_clean = [os.path.expanduser("~/.local/share/Trash/files"), os.path.expanduser("~/.cache/thumbnails")]
|
paths_to_clean = [os.path.expanduser("~/.local/share/Trash/files"), os.path.expanduser("~/.cache/thumbnails")]
|
||||||
for path in paths_to_clean:
|
for path in paths_to_clean:
|
||||||
|
|||||||
Reference in New Issue
Block a user