2026. június 15., hétfő

Vírusírtó Python nyelven (Szoftverfejlesztő)

Egy teljes értékű, ipari szintű vírusírtó motor fejlesztése összetett, alacsony szintű programozást (C/C++) és folyamatosan frissülő vírusadatbázist igényel. Grafikus felülettel (GUI) rendelkezik Python programozási nyelven írtam, amely képes kiválasztott mappákat átvizsgálni, és az ismert kártevőket azok fájl-aláírása (hash) alapján kiszűrni.
---------------
import tkinter as tk
from tkinter import filedialog, messagebox
import hashlib
import os

# Oktató jellegű vírusadatbázis (Fájl SHA-256 lenyomatok)
# Valódi vírusírtók sok millió aláírást tartalmaznak
VIIRUS_ADATBAZIS = {
    "d16c5232d67a99bb108253a6ec0407137f8f8b85b28de5d2753a479d479133a8": "EICAR-Test-File (Veszélytelen tesztvírus)",
    # Ide szúrhatsz be további ismert kártevő hash-eket
}

class VirusIrtoApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Python Antivirus - Alap verzió")
        self.root.geometry("500x400")
        self.root.config(bg="#f0f0f0")

        # Cím
        self.label = tk.Label(root, text="Grafikus Víruskereső", font=("Arial", 16), bg="#f0f0f0")
        self.label.pack(pady=15)

        # Gomb: Mappa kiválasztása
        self.btn_browse = tk.Button(root, text="Mappa kiválasztása", font=("Arial", 12), command=self.kivalaszt_mappa, bg="#4CAF50", fg="white", padx=10, pady=5)
        self.btn_browse.pack(pady=10)

        # Kijelölt mappa megjelenítése
        self.path_label = tk.Label(root, text="Nincs mappa kiválasztva", font=("Arial", 10), bg="#f0f0f0", wraplength=400)
        self.path_label.pack(pady=5)

        # Gomb: Vizsgálat indítása
        self.btn_scan = tk.Button(root, text="Vizsgálat indítása", font=("Arial", 12), command=self.indit_vizsgalat, bg="#2196F3", fg="white", padx=10, pady=5, state=tk.DISABLED)
        self.btn_scan.pack(pady=20)

        # Eredmény kijelző doboz
        self.log_text = tk.Text(root, height=10, width=55, state=tk.DISABLED, font=("Consolas", 9))
        self.log_text.pack(pady=10)

        self.kivalasztott_konyvtar = ""

    def kivalaszt_mappa(self):
        self.kivalasztott_konyvtar = filedialog.askdirectory()
        if self.kivalasztott_konyvtar:
            self.path_label.config(text=f"Kiválasztva: {self.kivalasztott_konyvtar}")
            self.btn_scan.config(state=tk.NORMAL)

    def log(self, uzenet):
        self.log_text.config(state=tk.NORMAL)
        self.log_text.insert(tk.END, uzenet + "\n")
        self.log_text.see(tk.END)
        self.log_text.config(state=tk.DISABLED)

    def fajl_hash_szamitas(self, fajl_utvonal):
        haszno = hashlib.sha256()
        try:
            with open(fajl_utvonal, "rb") as f:
                while darab := f.read(8192):
                    haszno.update(darab)
            return haszno.hexdigest()
        except Exception:
            return None

    def indit_vizsgalat(self):
        if not self.kivalasztott_konyvtar:
            return

        self.log_text.config(state=tk.NORMAL)
        self.log_text.delete(1.0, tk.END)
        self.log_text.config(state=tk.DISABLED)
        
        self.log("Vizsgálat megkezdve: " + self.kivalasztott_konyvtar)
        self.root.update()

        talalat_szam = 0

        # Mappa bejárása
        for root, dirs, files in os.walk(self.kivalasztott_konyvtar):
            for file in files:
                fajl_utvonal = os.path.join(root, file)
                self.log(f"Ellenőrzés: {file}")
                self.root.update()

                fajl_hash = self.fajl_hash_szamitas(fajl_utvonal)
                
                if fajl_hash and fajl_hash in VIIRUS_ADATBAZIS:
                    talalat_szam += 1
                    self.log(f"[!] FENYEGETÉS TALÁLVA: {talalat_szam}")
                    self.log(f"    Fájl: {fajl_utvonal}")
                    self.log(f"    Vírus: {VIIRUS_ADATBAZIS[fajl_hash]}")

        self.log("---- Vizsgálat véget ért ----")
        messagebox.showinfo("Kész", f"A vizsgálat befejeződött. Talált fenyegetések száma: {talalat_szam}")

if __name__ == "__main__":
    root = tk.Tk()
    app = VirusIrtoApp(root)
    root.mainloop()
----------------


Nincsenek megjegyzések:

Megjegyzés küldése