From 8b80091fd1af821e0937eae2c208b0117ad0a996 Mon Sep 17 00:00:00 2001 From: Malfurious Date: Sat, 13 Jan 2024 09:26:09 -0500 Subject: Remove extra "main.py" file The CLI logic is moved to sploit/__main__.py. This file is now the target of: - python -m sploit - sploit.py (via import) - sploit (installed executable - via pyproject.toml) A module guard (`if __name__ == "__main__"`) is added to allow the application to run when this file is invoked directly. And the entrypoint symlink is no longer necessary. Signed-off-by: Malfurious --- pyproject.toml | 2 +- sploit.py | 2 +- sploit/__main__.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++- sploit/main.py | 65 -------------------------------------------------- 4 files changed, 71 insertions(+), 68 deletions(-) mode change 120000 => 100644 sploit/__main__.py delete mode 100644 sploit/main.py diff --git a/pyproject.toml b/pyproject.toml index 041ee3f..5ac11e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ dynamic = ["version"] "Homepage" = "https://github.com/dusoleil/sploit" [project.scripts] -sploit = "sploit.main:main" +sploit = "sploit.__main__:main" [build-system] requires = ["hatchling"] diff --git a/sploit.py b/sploit.py index fd9b482..419f9b1 100755 --- a/sploit.py +++ b/sploit.py @@ -1,3 +1,3 @@ #!/usr/bin/env python3 -from sploit.main import main +from sploit.__main__ import main main() diff --git a/sploit/__main__.py b/sploit/__main__.py deleted file mode 120000 index 98537fc..0000000 --- a/sploit/__main__.py +++ /dev/null @@ -1 +0,0 @@ -../sploit.py \ No newline at end of file diff --git a/sploit/__main__.py b/sploit/__main__.py new file mode 100644 index 0000000..5b694a2 --- /dev/null +++ b/sploit/__main__.py @@ -0,0 +1,69 @@ +from argparse import ArgumentParser, REMAINDER +import gc +from os.path import isdir +import tempfile +import traceback + +from sploit.comm.comm import * +from sploit.util.log import * +from sploit import __version__ + +def print_banner(color, line1=__version__, line2='', line3=''): + ilog() + ilog(' ░▒█▀▀▀█░▒█▀▀█░▒█░░░░▒█▀▀▀█░▀█▀░▀▀█▀▀ ', end='', color=ALT) + ilog(line1, color=ALT) + ilog(' ░░▀▀▀▄▄░▒█▄▄█░▒█░░░░▒█░░▒█░▒█░░░▒█░░ ', end='', color=color) + ilog(line2, color=ALT) + ilog(' ░▒█▄▄▄█░▒█░░░░▒█▄▄█░▒█▄▄▄█░▄█▄░░▒█░░ ', end='', color=ALT) + ilog(line3, color=ALT) + ilog() + +def main(): + parser = ArgumentParser(description='Execute Sploit script against target') + parser.add_argument('script', help='Exploit script to run') + parser.add_argument('target', nargs=REMAINDER, help='Target cmdline or pipes directory') + args = parser.parse_args() + + if len(args.target) == 0: + with tempfile.TemporaryDirectory() as tmpdir: + pipe(args.script, tmpdir) + elif len(args.target) == 1 and isdir(args.target[0]): + pipe(args.script, args.target[0]) + else: + target(args.script, args.target) + +def pipe(script, tmpdir): + print_banner(ERROR, line3='Pipe Mode') + while True: + try: + p = Pipes(tmpdir) + except KeyboardInterrupt: + break + runscript(script, Comm(p)) + del p + +def target(script, target): + print_banner(STATUS, line3='Subprocess Mode') + runscript(script, Comm(Process(target))) + +def runscript(script, comm): + try: + ilog("Running Script...") + code = compile(open(script).read(), script, 'exec') + exec(code, {'io': comm, 'print': elog}) + ilog("Script Finished!") + return + except KeyboardInterrupt: + pass + except: + ilog(traceback.format_exc(), end='', color=ERROR) + finally: + comm.shutdown() + comm.readall() + gc.collect() + + ilog("Script Ended Early!", color=WARNING) + + +if __name__ == "__main__": + main() diff --git a/sploit/main.py b/sploit/main.py deleted file mode 100644 index 5fd5192..0000000 --- a/sploit/main.py +++ /dev/null @@ -1,65 +0,0 @@ -from argparse import ArgumentParser, REMAINDER -import gc -from os.path import isdir -import tempfile -import traceback - -from sploit.comm.comm import * -from sploit.util.log import * -from sploit import __version__ - -def print_banner(color, line1=__version__, line2='', line3=''): - ilog() - ilog(' ░▒█▀▀▀█░▒█▀▀█░▒█░░░░▒█▀▀▀█░▀█▀░▀▀█▀▀ ', end='', color=ALT) - ilog(line1, color=ALT) - ilog(' ░░▀▀▀▄▄░▒█▄▄█░▒█░░░░▒█░░▒█░▒█░░░▒█░░ ', end='', color=color) - ilog(line2, color=ALT) - ilog(' ░▒█▄▄▄█░▒█░░░░▒█▄▄█░▒█▄▄▄█░▄█▄░░▒█░░ ', end='', color=ALT) - ilog(line3, color=ALT) - ilog() - -def main(): - parser = ArgumentParser(description='Execute Sploit script against target') - parser.add_argument('script', help='Exploit script to run') - parser.add_argument('target', nargs=REMAINDER, help='Target cmdline or pipes directory') - args = parser.parse_args() - - if len(args.target) == 0: - with tempfile.TemporaryDirectory() as tmpdir: - pipe(args.script, tmpdir) - elif len(args.target) == 1 and isdir(args.target[0]): - pipe(args.script, args.target[0]) - else: - target(args.script, args.target) - -def pipe(script, tmpdir): - print_banner(ERROR, line3='Pipe Mode') - while True: - try: - p = Pipes(tmpdir) - except KeyboardInterrupt: - break - runscript(script, Comm(p)) - del p - -def target(script, target): - print_banner(STATUS, line3='Subprocess Mode') - runscript(script, Comm(Process(target))) - -def runscript(script, comm): - try: - ilog("Running Script...") - code = compile(open(script).read(), script, 'exec') - exec(code, {'io': comm, 'print': elog}) - ilog("Script Finished!") - return - except KeyboardInterrupt: - pass - except: - ilog(traceback.format_exc(), end='', color=ERROR) - finally: - comm.shutdown() - comm.readall() - gc.collect() - - ilog("Script Ended Early!", color=WARNING) -- cgit v1.2.3