📌 Автор: T.E.X.H.O Windows & Linux
📅 Дата: 16 февраля 2026
🎯 Уровень: Новичок
🖥️ ОС: Windows 10/11
ВСЁ ПРОВЕРЕНО ЛИЧНО, ВСЕ РАБОТАЕТ!!! ПОДДЕРЖИТЕ ЛАЙКОМ И ПОДПИСКОЙ...ПОДЕЛИСЬ С ДРУГОМ.
🌟 ВСТУПЛЕНИЕ: ЗАЧЕМ ЭТО НУЖНО?
В эпоху цифровых угроз и растущего числа вредоносного ПО особенно важно убедиться, что скачанные файлы безопасны и не повреждены. Сегодня мы создадим собственную программу для:
- 🧪 Вычисления хэш-сумм файлов (SHA256)
- 🛡️ Проверки этих хэшей через VirusTotal API
- 🖥️ Использования графического интерфейса (GUI) под Windows
- 🧠 Реализации всего с нуля на Python
✅ ПОДПИСКА - (это бесплатно и очень помогает алгоритму)
❤️ ЛАЙК- (это один клик, а нам очень важно)
🔄 РЕПОСТ друзьям - (которые играют в танки и жалуются на FPS)
💰 ДОНАТЫ - Даже 50 руб. - это топливо для новых гайдов и скриптов и пошаговых инструкций для Вас. Спасибо, что не проходите мимо🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по ССЫЛКЕ или QR-коду через СБП. Быстро, безопасно и без комиссии. ( Александр Г. ) "Т.Е.Х.Н.О Windows & Linux".
📚 ЧТО ТАКОЕ ХЭШ И ЗАЧЕМ ЕГО ПРОВЕРЯТЬ?
Хэш — это уникальная строка символов, которая является «отпечатком» файла. Если файл изменился — хэш тоже изменится. Это позволяет:
- ✅ Проверить целостность скачанных файлов
- 🔐 Обнаружить вредоносные программы
- 📊 Сравнить файлы без их загрузки
🧰 ШАГ 1: УСТАНОВКА PYTHON
🔹 Скачиваем Python
- Переходим на python.org
- Скачиваем Python 3.12+
- Устанавливаем с галочкой "Add Python to PATH"
🔹 Проверяем установку
Открываем PowerShell и вводим:
python --version
Если видим версию (например, Python 3.12.0) — всё работает! 🎉
🧱 ШАГ 2: СОЗДАНИЕ ПАПКИ ПРОЕКТА
🔹 Создаём структуру
Открываем PowerShell и выполняем:
cd C:\Users\T.E.X.H.O\EVIL
mkdir MASHINE
cd MASHINE
💡 Совет: Можешь создать папку в любом удобном месте, например, на диске D:
D:
mkdir Projects
cd Projects
mkdir MASHINE
cd MASHINE
🧮 ШАГ 3: СОЗДАНИЕ ВИРТУАЛЬНОГО ОКРУЖЕНИЯ
🔹 Создаём окружение
python -m venv MASHINE
🔹 Активируем окружение
.\MASHINE\Scripts\Activate.ps1
⚠️ Если ошибка: Запусти в PowerShell:powershellSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
📦 ШАГ 4: УСТАНОВКА ЗАВИСИМОСТЕЙ
Выполняем в активированном окружении:
pip install flet==0.80.5 httpx==0.28.1 python-dotenv==1.2.1
🔹 Что это за пакеты?
🧾 ШАГ 5: СОЗДАНИЕ ФАЙЛОВ ПРОЕКТА
🔹 Создаём scanner.py
Просто в обычном текстовом редакторе сохраняем в UTF-8
import hashlib
import os
from pathlib import Path
from typing import List, Tuple
import httpx
from dotenv import load_dotenv
load_dotenv()
VT_API_KEY = os.getenv("VIRUSTOTAL_API_KEY")
def compute_sha256(filepath: str) -> str:
"""Вычисляет SHA256 хэш файла"""
sha256 = hashlib.sha256()
try:
with open(filepath, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
sha256.update(chunk)
return sha256.hexdigest()
except Exception as e:
raise RuntimeError(f"Ошибка чтения файла {filepath}: {e}")
async def check_virustotal(hash_value: str) -> Tuple[int, int, str]:
"""Проверяет хэш через VirusTotal API"""
if not VT_API_KEY:
return -1, -1, "❌ API ключ не задан в .env"
url = "https://www.virustotal.com/vtapi/v2/file/report"
params = {"apikey": VT_API_KEY, "resource": hash_value}
try:
async with httpx.AsyncClient(timeout=10.0) as client:
response = await client.get(url, params=params)
data = response.json()
if data.get("response_code") == 1:
positives = data.get("positives", 0)
total = data.get("total", 0)
if positives > 0:
return positives, total, f"🚨 Вредоносный: {positives}/{total}"
else:
return positives, total, f"✅ Чистый: {positives}/{total}"
elif data.get("response_code") == 0:
return 0, 0, "🔍 Не найден в базе"
else:
return -1, -1, f"⚠️ Ошибка VT: {data.get('verbose_msg', 'неизвестно')}"
except Exception as e:
return -1, -1, f"❌ Ошибка API: {str(e)}"
def scan_directory(path: str, deep: bool = False) -> List[str]:
"""Возвращает список файлов для сканирования"""
files = []
try:
p = Path(path)
if p.is_file():
return [str(p)]
elif p.is_dir():
if deep:
for root, _, filenames in os.walk(p):
for fname in filenames:
files.append(str(Path(root) / fname))
else:
for item in p.iterdir():
if item.is_file():
files.append(str(item))
return files
except Exception as e:
raise RuntimeError(f"Ошибка сканирования пути: {e}")
"@ -Encoding utf8
🔹 Создаём app.py
Всё так же:
import asyncio
import flet as ft
from pathlib import Path
from scanner import compute_sha256, check_virustotal, scan_directory
class FileScannerApp:
def __init__(self):
self.is_scanning = False
self.file_picker = ft.FilePicker()
self.deep_scan = ft.Checkbox(label="Глубокое сканирование (папки)", value=False)
self.results = ft.ListView(expand=1, spacing=10, padding=20, auto_scroll=True)
self.progress = ft.ProgressBar(width=400, visible=False)
self.status = ft.Text("Готов к сканированию", size=14)
def build_ui(self, page: ft.Page):
page.title = "🔍 T.E.X.H.O — Deep File Scanner"
page.window.width = 800
page.window.height = 600
page.padding = 20
page.services.append(self.file_picker)
async def handle_pick_file(e: ft.Event[ft.Button]):
if self.is_scanning:
return
files = await self.file_picker.pick_files(
allow_multiple=False,
dialog_title="Выберите файл"
)
if files and files[0].path:
await self.on_path_selected(files[0].path, page, is_folder=False)
async def handle_pick_folder(e: ft.Event[ft.Button]):
if self.is_scanning:
return
folder_path = await self.file_picker.get_directory_path(
dialog_title="Выберите папку"
)
if folder_path:
await self.on_path_selected(folder_path, page, is_folder=True)
page.add(
ft.Row([ft.Text("T.E.X.H.O — Deep Scanner", size=24, weight=ft.FontWeight.BOLD)], alignment=ft.MainAxisAlignment.CENTER),
ft.Divider(),
ft.Row([
ft.FilledButton("📂 Выбрать файл", on_click=handle_pick_file),
ft.FilledButton("📁 Выбрать папку", on_click=handle_pick_folder),
], alignment=ft.MainAxisAlignment.CENTER),
ft.Row([self.deep_scan], alignment=ft.MainAxisAlignment.CENTER),
ft.Divider(),
ft.Row([ft.Text("Результаты сканирования:", weight=ft.FontWeight.BOLD)], alignment=ft.MainAxisAlignment.CENTER),
self.results,
ft.Row([self.progress], alignment=ft.MainAxisAlignment.CENTER),
ft.Row([self.status], alignment=ft.MainAxisAlignment.CENTER),
)
async def scan_single_file(self, filepath, page):
try:
hash_value = compute_sha256(filepath)
positives, total, verdict = await check_virustotal(hash_value)
color = ft.Colors.RED if positives > 0 else ft.Colors.GREEN if positives == 0 else ft.Colors.ORANGE
icon = "🚨" if positives > 0 else "✅" if positives == 0 else "🔍"
self.results.controls.append(
ft.Container(
content=ft.Column([
ft.Text(f"{icon} {Path(filepath).name}", weight=ft.FontWeight.BOLD),
ft.Text(f"Путь: {filepath}", size=12, color=ft.Colors.GREY),
ft.Text(f"Хэш: {hash_value[:16]}...", size=12),
ft.Text(verdict, color=color, weight=ft.FontWeight.BOLD),
]),
padding=10,
border=ft.border.all(1, ft.Colors.OUTLINE),
border_radius=5,
margin=ft.margin.only(bottom=10),
)
)
page.update()
except Exception as ex:
self.results.controls.append(
ft.Text(f"❌ {Path(filepath).name}: {str(ex)}", color=ft.Colors.RED)
)
page.update()
async def on_path_selected(self, path, page, is_folder=False):
if not path:
return
self.is_scanning = True
self.progress.visible = True
self.status.value = "Сканирование..."
self.results.controls.clear()
page.update()
try:
files = scan_directory(path, self.deep_scan.value if is_folder else False)
if not files:
self.results.controls.append(
ft.Text("⚠️ Нет файлов для сканирования", color=ft.Colors.ORANGE)
)
page.update()
else:
self.status.value = f"Найдено файлов: {len(files)}. Сканирую..."
page.update()
for i, filepath in enumerate(files):
try:
self.progress.value = (i + 1) / len(files)
self.status.value = f"Файл {i+1}/{len(files)}: {Path(filepath).name[:50]}..."
page.update()
await self.scan_single_file(filepath, page)
if i < len(files) - 1:
await asyncio.sleep(15)
except Exception as ex:
self.results.controls.append(
ft.Text(f"❌ {Path(filepath).name}: {str(ex)}", color=ft.Colors.RED)
)
page.update()
except Exception as ex:
self.results.controls.append(
ft.Text(f"❌ Критическая ошибка: {str(ex)}", color=ft.Colors.RED, weight=ft.FontWeight.BOLD)
)
page.update()
finally:
self.is_scanning = False
self.progress.visible = False
self.status.value = "Сканирование завершено"
page.update()
def main(page: ft.Page):
app = FileScannerApp()
app.build_ui(page)
if __name__ == "__main__":
ft.run(main)
🔑 ШАГ 6: ПОЛУЧЕНИЕ API КЛЮЧА VIRUSTOTAL
🔹 Регистрация
- Переходим на virustotal.com
- Регистрируемся или входим в аккаунт
- Переходим в Menu → My API Key
- Копируем ключ
🔹 Создаём .env файл
echo "VIRUSTOTAL_API_KEY=твой_реальный_ключ_здесь" > .env
⚠️ ВАЖНО: Замени твой_реальный_ключ_здесь на свой ключ!
▶️ ШАГ 7: ЗАПУСК ПРИЛОЖЕНИЯ
🔹 Активируем окружение (если ещё не активировано)
.\MASHINE\Scripts\Activate.ps1
🔹 Запускаем приложение
python app.py
🧪 ШАГ 8: КАК ПОЛЬЗОВАТЬСЯ
🔹 Проверка файла
- Нажимаем кнопку "📂 Выбрать файл"
- Выбираем любой файл (.exe, .txt, .jpg — любой формат)
- Программа вычисляет хэш и показывает результат
🔹 Проверка папки
- Нажимаем кнопку "📁 Выбрать папку"
- Выбираем папку
- Включаем "Глубокое сканирование" (если нужно проверить вложенные папки)
- Программа сканирует все файлы в папке
📊 ЧТО ПОКАЗЫВАЕТ ПРОГРАММА?
🚨Вредоносный файл (сработали антивирусы)
✅Чистый файл (нет срабатываний)
🔍Файл не найден в базе VirusTotal
🎯 ВОЗМОЖНЫЕ УЛУЧШЕНИЯ
- 🔄 Автоматическая проверка при перетаскивании файла в окно
- 📊 Экспорт отчётов в PDF/CSV
- 🌙 Темная тема интерфейса
- 🧩 Поддержка других хэшей (MD5, SHA1)
- 📁 Проверка папок рекурсивно
📚 ПОЛЕЗНЫЕ ССЫЛКИ
🎓 ЗАКЛЮЧЕНИЕ
Мы создали полноценный инструмент для проверки файлов, который:
- ✅ Работает в Windows 10/11
- ✅ Имеет современный графический интерфейс
- ✅ Считает хэш файлов (SHA256)
- ✅ Проверяет их через VirusTotal API
- ✅ Сообщает пользователю о результатах
Это отличное начало для изучения Python и автоматизации задач безопасности! 🚀
Подписывайтесь на канал "T.E.X.H.O Windows & Linux" — здесь мы создаём полезные инструменты и делимся знаниями! 💻
📝 Автор: Александр
🎯 Канал: T.E.X.H.O Windows & Linux
📧 Связь: @techautor
🌐 Сайт: (в разработке)
Ставь ❤️, если статья была полезной!
Делись с друзьями — пусть тоже научатся создавать полезные программы! 🚀
#Python #VirusTotal #Хэширование #SHA256 #Безопасность #GUI #Flet #Windows10 #Windows11 #Программирование #Автоматизация #Антивирус #ПроверкаФайлов #Разработка #Инструменты #TEXHO #УчебноеПособие #OpenSource #API #ХэшСумма #Мониторинг #Кибербезопасность #Сканирование #DeepScan #Malware #ThreatDetection #IT #DevOps #LearnPython #CyberSecurity