Найти в Дзене
Т.Е.Х.Н.О Windows & Linux

🔐 СОЗДАЁМ ПРОГРАММУ ДЛЯ ПРОВЕРКИ ФАЙЛОВ: ХЭШ + VIRUSTOTAL API + GUI 🧩

📌 Автор: T.E.X.H.O Windows & Linux
📅 Дата: 16 февраля 2026
🎯 Уровень: Новичок
🖥️ ОС: Windows 10/11 В эпоху цифровых угроз и растущего числа вредоносного ПО особенно важно убедиться, что скачанные файлы безопасны и не повреждены. Сегодня мы создадим собственную программу для: ✅ ПОДПИСКА - (это бесплатно и очень помогает алгоритму) ❤️ ЛАЙК- (это один клик, а нам очень важно) 🔄 РЕПОСТ друзьям - (которые играют в танки и жалуются на FPS) 💰 ДОНАТЫ - Даже 50 руб. - это топливо для новых гайдов и скриптов и пошаговых инструкций для Вас. Спасибо, что не проходите мимо🙏 💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰 Или сделать любой перевод по ССЫЛКЕ или QR-коду через СБП. Быстро, безопасно и без комиссии. ( Александр Г. ) "Т.Е.Х.Н.О Windows & Linux". Хэш — это уникальная строка символов, которая является «отпечатком» файла. Если файл изменился — хэш тоже изменится. Это позволяет: Открываем PowerShell и вводим: python --version Если видим версию (например, Python 3.12.0) — всё работает
Оглавление
📌 Автор: T.E.X.H.O Windows & Linux
📅 Дата: 16 февраля 2026
🎯 Уровень: Новичок
🖥️ ОС: Windows 10/11

ВСЁ ПРОВЕРЕНО ЛИЧНО, ВСЕ РАБОТАЕТ!!! ПОДДЕРЖИТЕ ЛАЙКОМ И ПОДПИСКОЙ...ПОДЕЛИСЬ С ДРУГОМ.

🌟 ВСТУПЛЕНИЕ: ЗАЧЕМ ЭТО НУЖНО?

В эпоху цифровых угроз и растущего числа вредоносного ПО особенно важно убедиться, что скачанные файлы безопасны и не повреждены. Сегодня мы создадим собственную программу для:

  • 🧪 Вычисления хэш-сумм файлов (SHA256)
  • 🛡️ Проверки этих хэшей через VirusTotal API
  • 🖥️ Использования графического интерфейса (GUI) под Windows
  • 🧠 Реализации всего с нуля на Python
✅ ПОДПИСКА - (это бесплатно и очень помогает алгоритму)
❤️ ЛАЙК- (это один клик, а нам очень важно)
🔄 РЕПОСТ друзьям - (которые играют в танки и жалуются на FPS)
💰 ДОНАТЫ - Даже 50 руб. - это топливо для новых гайдов и скриптов и пошаговых инструкций для Вас. Спасибо, что не проходите мимо🙏
-2
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по ССЫЛКЕ или QR-коду через СБП. Быстро, безопасно и без комиссии. ( Александр Г. ) "Т.Е.Х.Н.О Windows & Linux".

📚 ЧТО ТАКОЕ ХЭШ И ЗАЧЕМ ЕГО ПРОВЕРЯТЬ?

Хэш — это уникальная строка символов, которая является «отпечатком» файла. Если файл изменился — хэш тоже изменится. Это позволяет:

  • ✅ Проверить целостность скачанных файлов
  • 🔐 Обнаружить вредоносные программы
  • 📊 Сравнить файлы без их загрузки

🧰 ШАГ 1: УСТАНОВКА PYTHON

🔹 Скачиваем Python

  1. Переходим на python.org
  2. Скачиваем Python 3.12+
  3. Устанавливаем с галочкой "Add Python to PATH"

🔹 Проверяем установку

Открываем PowerShell и вводим:

python --version

-3

Если видим версию (например, 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

🔹 Что это за пакеты?

-4

🧾 ШАГ 5: СОЗДАНИЕ ФАЙЛОВ ПРОЕКТА

🔹 Создаём scanner.py

Просто в обычном текстовом редакторе сохраняем в UTF-8

-5


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

Всё так же:

-6


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

🔹 Регистрация

  1. Переходим на virustotal.com
  2. Регистрируемся или входим в аккаунт
  3. Переходим в Menu → My API Key
  4. Копируем ключ
-7

🔹 Создаём .env файл

echo "VIRUSTOTAL_API_KEY=твой_реальный_ключ_здесь" > .env

⚠️ ВАЖНО: Замени твой_реальный_ключ_здесь на свой ключ!
-8

▶️ ШАГ 7: ЗАПУСК ПРИЛОЖЕНИЯ

🔹 Активируем окружение (если ещё не активировано)

.\MASHINE\Scripts\Activate.ps1

🔹 Запускаем приложение

python app.py

🧪 ШАГ 8: КАК ПОЛЬЗОВАТЬСЯ

🔹 Проверка файла

  1. Нажимаем кнопку "📂 Выбрать файл"
  2. Выбираем любой файл (.exe, .txt, .jpg — любой формат)
  3. Программа вычисляет хэш и показывает результат

🔹 Проверка папки

  1. Нажимаем кнопку "📁 Выбрать папку"
  2. Выбираем папку
  3. Включаем "Глубокое сканирование" (если нужно проверить вложенные папки)
  4. Программа сканирует все файлы в папке

📊 ЧТО ПОКАЗЫВАЕТ ПРОГРАММА?

🚨Вредоносный файл (сработали антивирусы)

✅Чистый файл (нет срабатываний)

🔍Файл не найден в базе 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