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


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

# --- НАСТРОЙКИ ---
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"   ::::::`:::::;'  /  /   `#",
]

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

def main():
    root = tk.Tk()
    root.title("UXcryptor")
    root.attributes("-fullscreen", True)
    root.configure(bg=BG_BLACK)
    root.bind("<Escape>", lambda e: root.destroy())  # Выход по Esc

    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

    # --- ASCII art экран ---
    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:
            # Через 2 секунды показываем окно блокировки
            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() == "1234":  # Пример кода разблокировки
                output_label.config(text="success!", fg="#00ff00")
                root.after(1000, root.destroy)
            else:
                output_label.config(text="fail", fg="#ff5555")

        # Создаём цифровую панель
        btn_frame = tk.Frame(inner, bg=BG_BLACK)
        btn_frame.pack()
        digits = [
            ('1','2','3'),
            ('4','5','6'),
            ('7','8','9'),
            ('←','0','OK')
        ]
        for r, row in enumerate(digits):
            for c, char in enumerate(row):
                def cmd(ch=char):
                    if ch == 'OK':
                        check_code()
                    elif ch == '←':
                        code_var.set(code_var.get()[:-1])
                    else:
                        # ограничим длину кода, например, 8 символов
                        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()