import win32security # get sid import json as jsond # json import time # sleep before exit import binascii # hex encoding from uuid import uuid4 # gen random guid import platform import os import requests # https requests try: from Crypto.Cipher import AES from Crypto.Hash import SHA256 from Crypto.Util.Padding import pad, unpad except ModuleNotFoundError: print("Exception when importing modules") print("installing necessary modules....") os.system("pip install pycryptodome") print("Modules installed!") time.sleep(1.5) os._exit(1) try: # Connection check s = requests.Session() # Session s.get('https://google.com') except requests.exceptions.RequestException as e: print(e) time.sleep(3) os._exit(1) class api: name = ownerid = secret = version = hash_to_check = "" def __init__(self, name, ownerid, secret, version, hash_to_check): self.name = name self.ownerid = ownerid self.secret = secret self.version = version self.hash_to_check = hash_to_check self.init() sessionid = enckey = "" initialized = False def init(self): if self.sessionid != "": print("You've already initialized!") time.sleep(2) os._exit(1) init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() self.enckey = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("init").encode()), "ver": encryption.encrypt(self.version, self.secret, init_iv), "hash": self.hash_to_check, "enckey": encryption.encrypt(self.enckey, self.secret, init_iv), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) if response == "KeyAuth_Invalid": print("The application doesn't exist") os._exit(1) response = encryption.decrypt(response, self.secret, init_iv) json = jsond.loads(response) if json["message"] == "invalidver": if json["download"] != "": print("New Version Available") download_link = json["download"] os.system(f"start {download_link}") os._exit(1) else: print("Invalid Version, Contact owner to add download link to latest app version") os._exit(1) if not json["success"]: print(json["message"]) os._exit(1) self.sessionid = json["sessionid"] self.initialized = True self.__load_app_data(json["appinfo"]) def register(self, user, password, license, hwid=None): self.checkinit() if hwid is None: hwid = others.get_hwid() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("register").encode()), "username": encryption.encrypt(user, self.enckey, init_iv), "pass": encryption.encrypt(password, self.enckey, init_iv), "key": encryption.encrypt(license, self.enckey, init_iv), "hwid": encryption.encrypt(hwid, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: print("successfully registered") self.__load_user_data(json["info"]) else: print(json["message"]) os._exit(1) def upgrade(self, user, license): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("upgrade").encode()), "username": encryption.encrypt(user, self.enckey, init_iv), "key": encryption.encrypt(license, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: print("successfully upgraded user") print("please restart program and login") time.sleep(2) os._exit(1) else: print(json["message"]) os._exit(1) def login(self, user, password, hwid=None): self.checkinit() if hwid is None: hwid = others.get_hwid() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("login").encode()), "username": encryption.encrypt(user, self.enckey, init_iv), "pass": encryption.encrypt(password, self.enckey, init_iv), "hwid": encryption.encrypt(hwid, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: self.__load_user_data(json["info"]) print("successfully logged in") else: print(json["message"]) os._exit(1) def license(self, key, hwid=None): self.checkinit() if hwid is None: hwid = others.get_hwid() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("license").encode()), "key": encryption.encrypt(key, self.enckey, init_iv), "hwid": encryption.encrypt(hwid, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: self.__load_user_data(json["info"]) print("successfully logged into license") else: print(json["message"]) os._exit(1) def var(self, name): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("var").encode()), "varid": encryption.encrypt(name, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return json["message"] else: print(json["message"]) time.sleep(5) os._exit(1) def getvar(self, var_name): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("getvar").encode()), "var": encryption.encrypt(var_name, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return json["response"] else: print(json["message"]) time.sleep(5) os._exit(1) def setvar(self, var_name, var_data): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("setvar").encode()), "var": encryption.encrypt(var_name, self.enckey, init_iv), "data": encryption.encrypt(var_data, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return True else: print(json["message"]) time.sleep(5) os._exit(1) def ban(self): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("ban").encode()), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return True else: print(json["message"]) time.sleep(5) os._exit(1) def file(self, fileid): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("file").encode()), "fileid": encryption.encrypt(fileid, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if not json["success"]: print(json["message"]) time.sleep(5) os._exit(1) return binascii.unhexlify(json["contents"]) def webhook(self, webid, param, body = "", conttype = ""): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("webhook").encode()), "webid": encryption.encrypt(webid, self.enckey, init_iv), "params": encryption.encrypt(param, self.enckey, init_iv), "body": encryption.encrypt(body, self.enckey, init_iv), "conttype": encryption.encrypt(conttype, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return json["message"] else: print(json["message"]) time.sleep(5) os._exit(1) def check(self): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("check").encode()), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return True else: return False def checkblacklist(self): self.checkinit() hwid = others.get_hwid() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("checkblacklist").encode()), "hwid": encryption.encrypt(hwid, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return True else: return False def log(self, message): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("log").encode()), "pcuser": encryption.encrypt(os.getenv('username'), self.enckey, init_iv), "message": encryption.encrypt(message, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } self.__do_request(post_data) def fetchOnline(self): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("fetchOnline").encode()), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: if len(json["users"]) == 0: return None # THIS IS ISSUE ON KEYAUTH SERVER SIDE 6.8.2022, so it will return none if it is not an array. else: return json["users"] else: return None def chatGet(self, channel): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("chatget").encode()), "channel": encryption.encrypt(channel, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return json["messages"] else: return None def chatSend(self, message, channel): self.checkinit() init_iv = SHA256.new(str(uuid4())[:8].encode()).hexdigest() post_data = { "type": binascii.hexlify(("chatsend").encode()), "message": encryption.encrypt(message, self.enckey, init_iv), "channel": encryption.encrypt(channel, self.enckey, init_iv), "sessionid": binascii.hexlify(self.sessionid.encode()), "name": binascii.hexlify(self.name.encode()), "ownerid": binascii.hexlify(self.ownerid.encode()), "init_iv": init_iv } response = self.__do_request(post_data) response = encryption.decrypt(response, self.enckey, init_iv) json = jsond.loads(response) if json["success"]: return True else: return False def checkinit(self): if not self.initialized: print("Initialize first, in order to use the functions") time.sleep(2) os._exit(1) def __do_request(self, post_data): try: rq_out = s.post( "https://keyauth.win/api/1.0/", data=post_data, timeout=30 ) return rq_out.text except requests.exceptions.Timeout: print("Request timed out") class application_data_class: numUsers = numKeys = app_ver = customer_panel = onlineUsers = "" # region user_data class user_data_class: username = ip = hwid = expires = createdate = lastlogin = subscription = subscriptions = "" user_data = user_data_class() app_data = application_data_class() def __load_app_data(self, data): self.app_data.numUsers = data["numUsers"] self.app_data.numKeys = data["numKeys"] self.app_data.app_ver = data["version"] self.app_data.customer_panel = data["customerPanelLink"] self.app_data.onlineUsers = data["numOnlineUsers"] def __load_user_data(self, data): self.user_data.username = data["username"] self.user_data.ip = data["ip"] self.user_data.hwid = data["hwid"] self.user_data.expires = data["subscriptions"][0]["expiry"] self.user_data.createdate = data["createdate"] self.user_data.lastlogin = data["lastlogin"] self.user_data.subscription = data["subscriptions"][0]["subscription"] self.user_data.subscriptions = data["subscriptions"] class others: @staticmethod def get_hwid(): winuser = os.getlogin() if platform.system() != "Windows": with open("/etc/machine-id") as f: hwid = f.read() return hwid sid = win32security.LookupAccountName(None, winuser)[0] sidstr = win32security.ConvertSidToStringSid(sid) return sidstr class encryption: @staticmethod def encrypt_string(plain_text, key, iv): plain_text = pad(plain_text, 16) aes_instance = AES.new(key, AES.MODE_CBC, iv) raw_out = aes_instance.encrypt(plain_text) return binascii.hexlify(raw_out) @staticmethod def decrypt_string(cipher_text, key, iv): cipher_text = binascii.unhexlify(cipher_text) aes_instance = AES.new(key, AES.MODE_CBC, iv) cipher_text = aes_instance.decrypt(cipher_text) return unpad(cipher_text, 16) @staticmethod def encrypt(message, enc_key, iv): try: _key = SHA256.new(enc_key.encode()).hexdigest()[:32] _iv = SHA256.new(iv.encode()).hexdigest()[:16] return encryption.encrypt_string(message.encode(), _key.encode(), _iv.encode()).decode() except: print("Invalid Application Information. Long text is secret short text is ownerid. Name is supposed to be app name not username") os._exit(1) @staticmethod def decrypt(message, enc_key, iv): try: _key = SHA256.new(enc_key.encode()).hexdigest()[:32] _iv = SHA256.new(iv.encode()).hexdigest()[:16] return encryption.decrypt_string(message.encode(), _key.encode(), _iv.encode()).decode() except: print("Invalid Application Information. Long text is secret short text is ownerid. Name is supposed to be app name not username") os._exit(1)