Загрузка данных
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()