forked from p7mj/Sierra-Security
107 lines
4.4 KiB
Python
107 lines
4.4 KiB
Python
import datetime
|
|
import hashlib
|
|
import uuid
|
|
import sys
|
|
import time
|
|
import os
|
|
import ctypes
|
|
|
|
# _____ _ _____ _ _
|
|
# / ___(_) / ___| (_) |
|
|
# \ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
|
# `--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
|
# /\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
|
# \____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
|
# __/ |
|
|
# Combination V. A-2 |___/
|
|
|
|
# --- ENABLE ANSI COLORS ON WINDOWS ---
|
|
if os.name == 'nt':
|
|
kernel32 = ctypes.windll.kernel32
|
|
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
|
|
|
|
# --- CONFIGURATION ---
|
|
BASE_SALT = "D9_fX92_kL0_pP_SECRET_INTERCEPTOR_TOKEN"
|
|
TIMEFRAME_MINUTES = 15
|
|
|
|
def get_rolling_salt():
|
|
"""Generates a salt that changes every 24 hours (UTC) to invalidate old keys."""
|
|
# Using timezone-aware UTC to prevent deprecation warnings
|
|
date_string = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d")
|
|
return f"{BASE_SALT}:{date_string}"
|
|
|
|
def get_time_token():
|
|
"""Returns a time string rounded to the timeframe (Uses UTC for global sync)."""
|
|
now = datetime.datetime.now(datetime.timezone.utc)
|
|
minutes = (now.minute // TIMEFRAME_MINUTES) * TIMEFRAME_MINUTES
|
|
rounded = now.replace(minute=minutes, second=0, microsecond=0)
|
|
return rounded.strftime("%Y-%m-%d %H:%M")
|
|
|
|
def generate_sierra_id(user_key: str):
|
|
time_token = get_time_token()
|
|
salt = get_rolling_salt()
|
|
raw_payload = f"{salt}:{time_token}:{user_key}"
|
|
hash_result = raw_payload.encode()
|
|
for _ in range(50000):
|
|
hash_result = hashlib.sha256(hash_result).digest()
|
|
return str(uuid.uuid5(uuid.NAMESPACE_OID, hash_result.hex()))
|
|
|
|
def print_header(subtitle="Combination"):
|
|
os.system('cls' if os.name == 'nt' else 'clear')
|
|
print("\033[94m" + "="*80)
|
|
print(r"""
|
|
_____ _ _____ _ _
|
|
/ ___(_) / ___| (_) |
|
|
\ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
|
`--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
|
/\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
|
\____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
|
__/ |
|
|
|___/
|
|
""" + f"--- {subtitle} V. A-2 ---".center(70))
|
|
print("="*80 + "\033[0m")
|
|
|
|
def verify_access():
|
|
print_header("Verification")
|
|
chances = 3
|
|
while chances > 0:
|
|
print(f"\n[!] Attempts remaining: \033[93m{chances}\033[0m")
|
|
user_key = input(" > Enter Secret Key: ").strip()
|
|
provided_uuid = input(" > Enter Time-Locked UUID: ").strip()
|
|
print("\n[*] \033[96mVerifying cryptographic integrity...\033[0m")
|
|
correct_uuid = generate_sierra_id(user_key)
|
|
time.sleep(1.5)
|
|
if provided_uuid == correct_uuid:
|
|
print("\n[+] \033[92mAccess Granted...\033[0m")
|
|
return True
|
|
else:
|
|
chances -= 1
|
|
print("\n[-] \033[91mInvalid Key/UUID combination.\033[0m")
|
|
print("\n\033[41mCritical Failure: Access Denied.\033[0m")
|
|
sys.exit(1)
|
|
|
|
def tool_menu():
|
|
while True:
|
|
print_header("Main Terminal")
|
|
print(f" \033[90mGlobal Sync (UTC): {get_time_token()}\033[0m\n")
|
|
print(" \033[1m[1]\033[0m Generate a UUID")
|
|
print(" \033[1m[2]\033[0m Verify a UUID")
|
|
print(" \033[1m[3]\033[0m Exit\n")
|
|
choice = input("Enter your choice > ").strip()
|
|
if choice == "1":
|
|
user_key = input("\n > Enter your secret key: ").strip()
|
|
print(f"\n [+] \033[92mGenerated UUID:\033[0m {generate_sierra_id(user_key)}\n")
|
|
input("Press Enter to return to menu...")
|
|
elif choice == "2":
|
|
if verify_access():
|
|
print("\n[✓] Entering Secure Shell...")
|
|
time.sleep(2)
|
|
elif choice == "3":
|
|
sys.exit(0)
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
tool_menu()
|
|
except KeyboardInterrupt:
|
|
print("\n\033[91mProcess Terminated.\033[0m")
|