antivirus / app.py
Serg4451D's picture
Create app.py
2f848a4 verified
raw
history blame
3.9 kB
import hashlib
import requests
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
# Ссылка на файл с хешами MD5
MD5_HASHES_URL = "https://virusshare.com/hashfiles/VirusShare_00000.md5"
def calculate_file_hash(filepath, algorithm="md5"):
"""Вычисляет хеш файла (по умолчанию MD5)."""
hasher = hashlib.new(algorithm)
with open(filepath, 'rb') as file:
while True:
chunk = file.read(4096)
if not chunk:
break
hasher.update(chunk)
return hasher.hexdigest()
def load_virus_hashes_from_url(url):
"""Загружает хеши вирусов из файла по URL."""
try:
response = requests.get(url)
response.raise_for_status() # Проверка на ошибки HTTP
hashes = set()
for line in response.text.splitlines():
hashes.add(line.strip().split()[0].lower()) # Берем только MD5 хеш и приводим к нижнему регистру
return hashes
except requests.exceptions.RequestException as e:
messagebox.showerror("Ошибка", f"Ошибка при загрузке хешей: {e}")
return set()
def scan_file(filepath, virus_hashes):
"""Сканирует файл, сравнивая его хеш с хешами в базе данных."""
file_hash = calculate_file_hash(filepath).lower() # Приводим к нижнему регистру для сравнения
if file_hash in virus_hashes:
return f"Угроза обнаружена! Файл: {filepath}\nMD5 хеш совпадает с известным вирусом."
else:
return f"Файл чист: {filepath}"
def browse_file():
"""Открывает диалоговое окно выбора файла."""
filepath = filedialog.askopenfilename()
if filepath:
file_entry.delete(0, tk.END)
file_entry.insert(0, filepath)
def start_scan():
"""Запускает сканирование файла."""
filepath = file_entry.get()
if filepath:
result = scan_file(filepath, virus_hashes)
result_text.config(state=tk.NORMAL)
result_text.delete(1.0, tk.END)
result_text.insert(tk.END, result)
result_text.config(state=tk.DISABLED)
if "Угроза обнаружена" in result:
messagebox.showwarning("Внимание!", result)
else:
messagebox.showinfo("Результат сканирования", result)
else:
messagebox.showerror("Ошибка", "Выберите файл для сканирования.")
# Загрузка хешей вирусов
virus_hashes = load_virus_hashes_from_url(MD5_HASHES_URL)
if not virus_hashes:
messagebox.showerror("Ошибка", "Не удалось загрузить хеши вирусов. Программа будет закрыта.")
root.quit()
exit()
# Создание главного окна
root = tk.Tk()
root.title("Мини-антивирус")
# Элементы интерфейса
file_label = tk.Label(root, text="Выберите файл для сканирования:")
file_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")
file_entry = tk.Entry(root, width=50)
file_entry.grid(row=0, column=1, padx=5, pady=5)
browse_button = tk.Button(root, text="Обзор", command=browse_file)
browse_button.grid(row=0, column=2, padx=5, pady=5)
scan_button = tk.Button(root, text="Сканировать", command=start_scan)
scan_button.grid(row=1, column=0, columnspan=3, pady=10)
result_text = tk.Text(root, wrap=tk.WORD, width=60, height=10)
result_text.grid(row=2, column=0, columnspan=3, padx=5, pady=5)
result_text.config(state=tk.DISABLED)
# Запуск главного цикла
root.mainloop()