import shutil from tkinter import messagebox from magictk import mtk from logger.logger import * from logger import config from ui import nav from ui import installer from ui import homeui from ui import injectimg from lib import get_disk from lib import vars from ui.lang import load_lang, l import sys import getpass import platform import ctypes import os import locale import traceback import textwrap nlang = locale.getdefaultlocale()[0].lower() def check_args(arg, check): if len(arg) >= len(check): if (arg[:len(check)] == check): return 1 return 0 DISPERMISSION = 0 DEBUG = 0 NOTRACE = 0 UPGRADE = 0 DEVICE = "" SHOW_VERSION = 0 for i in sys.argv[1:]: if (check_args(i, "/?") or check_args(i, "--help")): print(""" injector Hub Usage: hub [options] Options: --help Show this help info and exit --version, -V Get hub version --lang= Set language --install, -i Install PEinjector --upgrade, -U Upgrade PEinjector --device, -D Set device (mount path) --clean Clean download cache Debug Options: --debug Open debug mode (raise all errors) --dis-permission-error Do not show permission error --log-level= Set log level (debug,info,warning,err) --no-trace Do not trace OS version """) sys.exit() elif (check_args(i, "--lang")): nlang = i.split("=")[-1] elif (check_args(i, "--dis-permission-error")): DISPERMISSION = 1 elif (check_args(i, "--log-level")): config.LOGLEVEL = i.split("=")[-1] elif (check_args(i, "--debug")): DEBUG = 1 elif (check_args(i, "--no-trace")): NOTRACE = 1 elif (check_args(i, "--upgrade") or check_args(i, "-U")): UPGRADE = 1 elif (check_args(i, "--install") or check_args(i, "-i")): UPGRADE = 2 elif (check_args(i, "--device") or check_args(i, "-D")): DEVICE = i.split("=")[-1] elif (check_args(i, "--clean")): if (os.path.exists("software")): info("[win]clean install cache") shutil.rmtree("software") sys.exit() elif (check_args(i, "--version") or check_args(i, "-V")): SHOW_VERSION = 1 else: print("Unknown Command: \""+i+"\"\nUse Command \"--help\" to get info") sys.exit(128) if (nlang+".toml" not in os.listdir("lang")): nlang = "en_us" def main(): log_init() if (DEBUG == 1): info("[win]< debug mode >") if (NOTRACE == 0): info("[trace]open trace") trace_sys(f"[trace]OS={platform.system()}") trace_sys(f"[trace]VER={platform.version()}") trace_sys(f"[trace]CPU={platform.processor()}") trace_sys(f"[trace]ARCH={str(platform.architecture()[0])}") trace_sys(f"[trace]PYVER={platform.python_version()}") trace_sys(f"[trace]PYIMP={platform.python_implementation()}") load_lang(nlang) disk_res = get_disk.find_hub_disk() errno = disk_res[0] if (DEVICE == ""): root_disk = disk_res[1] else: root_disk = DEVICE if (errno == 1): messagebox.showerror("Injector Hub Error", root_disk) sys.exit(1) if (SHOW_VERSION == 1): with open("VERSION", 'r') as file: ver = file.read() print(f" injector Hub \n\nHub Version: "+ver) if (DEVICE == "" and errno == 2): print("PEinjector Version: Not Found") elif not (os.path.exists(root_disk+os.sep+"PEinjector"+os.sep+"VERSION")): print("PEinjector Version: Not Found") else: with open(root_disk+os.sep+"PEinjector"+os.sep+"VERSION", 'r') as file: pver = file.read() print("PEinjector Version: "+pver) sys.exit() if (errno == 2 or UPGRADE == 1 or UPGRADE == 2): if (UPGRADE == 1): installer.UPGRADE = 1 else: installer.UPGRADE = 0 if (UPGRADE == 0): info("[win]cannot find installed disk") elif (UPGRADE == 1): info("[win]upgrade") if DISPERMISSION == 0: if (platform.system() == "Linux" and getpass.getuser() != "root"): err("permission denied in linux") messagebox.showerror("Injector Hub Error", l("PermissionDeniedLinux")) if (DEBUG == 0): sys.exit(1) else: sys.exit() if (platform.system() == "Windows" and ctypes.windll.shell32.IsUserAnAdmin() == False): err("permission denied in windows") messagebox.showerror("Injector Hub Error", l("PermissionDeniedWin")) if (DEBUG == 0): sys.exit(1) else: sys.exit() if (UPGRADE == 1): if (os.path.exists("software")): info("[win]clean install cache") shutil.rmtree("software") nav_list = [ {"icon": "lightning", "frame": installer.installer_ui, "side": "top"} ] else: vars.DISKMOUNT = root_disk info(f"[win]found installed disk \"{root_disk}\"") nav_list = [ {"icon": "home-filled", "frame": homeui.home_ui, "side": "top"}, {"icon": "dvd", "frame": injectimg.inject_ui, "side": "top"}, {"icon": "plugin", "frame": None, "side": "top"}, {"icon": "setting", "frame": None, "side": "bottom"} ] info("[win]init window") mtk.load_icon_pack("res/icon.pack") main_win = mtk.Tk(title="Injector Hub", w=1000, h=800) main_frame = mtk.Frame(main_win, w=10000) nav.pack_nav(main_win, main_frame, nav_list) main_frame.pack(side="left", fill="both", expand=True) info("[win]mainloop") main_win.mainloop() def run(): try: main() except Exception as exp: err("[errtrace] caught err:"+repr(exp)) for i in traceback.format_exc().split("\n"): firstlen_flag = "* " lastlen = "" for j in textwrap.wrap(i, width=40): err("[errtrace]"+" "+firstlen_flag+" " * (len(lastlen)-len(lastlen.lstrip()))+j) lastlen = " " * (len(lastlen)-len(lastlen.lstrip()))+j firstlen_flag = " " if (DEBUG == 1): raise