diff --git a/app/templates/project.html b/app/templates/project.html index caf63fa..13a1dcb 100644 --- a/app/templates/project.html +++ b/app/templates/project.html @@ -83,15 +83,19 @@
+
+ -
+
+ +
-
+
@@ -100,12 +104,22 @@ + +
+ + +
+ +
+ + +
diff --git a/app/views.py b/app/views.py index bec90d9..a254354 100644 --- a/app/views.py +++ b/app/views.py @@ -1,4 +1,4 @@ -from flask import Flask, Blueprint, current_app, request, redirect, url_for, render_template, send_file, make_response, session, escape +from flask import Flask, Blueprint, current_app, request, redirect, url_for, render_template, send_file, make_response, session, escape, jsonify from threading import Thread from werkzeug.utils import secure_filename import os @@ -10,6 +10,7 @@ from pygments.formatters import HtmlFormatter import difflib from ansi2html import Ansi2HTMLConverter import shutil +import subprocess from config import config from model.settings import Settings @@ -196,27 +197,43 @@ def start_project(): if remote_arg == "true": remote = True + no_exec = False + no_exec_arg = request.args.get('no_exec') + if no_exec_arg == "true": + no_exec = True + + logger.info("--[ Exec project: {} remote: {} no_exec: {}".format(project_name, remote, no_exec)) + if remote: logger.info("--[ Exec {} on server {}".format(project.project_exe, config.get("avred_server"))) filepath = "{}/{}".format(project.project_dir, project.project_exe) with open(filepath, "rb") as f: data = f.read() try: - scannerDetectsBytes(data, project.project_exe, useBrotli=True, verify=project.settings.verify) + scannerDetectsBytes(data, + project.project_exe, + useBrotli=True, + verify=project.settings.verify, + no_exec=no_exec) except Exception as e: logger.error(f'Error scanning: {e}') - return 4 + return jsonify({ + "exception": str(e) + }), 500 else: - logger.info("--[ Exec {} locally".format(project.project_exe)) # Start/verify it at the end if project.settings.verify: logger.info("--[ Verify infected exe") exit_code = verify_injected_exe(project.settings.inject_exe_out) - else: + elif no_exec == False: logger.info("--[ Start infected exe: {}".format(project.settings.inject_exe_out)) run_process_checkret([ project.settings.inject_exe_out, ], check=False) + elif no_exec == True: + dirname = os.path.dirname(os.path.abspath(project.settings.inject_exe_out)) + logger.info("--[ Open folder: {}".format(dirname)) + subprocess.run(['explorer', dirname]) return redirect("/project/{}".format(project_name), code=302) diff --git a/observer.py b/observer.py index 9abbac9..9356374 100644 --- a/observer.py +++ b/observer.py @@ -14,6 +14,10 @@ class Observer(): self.idx = 0 self.active = True + def reset(self): + self.logs = [] + self.idx = 0 + def add_text(self, name, data): self.write_to_file(name + ".txt", data) self.idx += 1 diff --git a/sender.py b/sender.py index 5ab8ddb..c9b984d 100644 --- a/sender.py +++ b/sender.py @@ -11,8 +11,8 @@ from config import config logger = logging.getLogger("Sender") -def scannerDetectsBytes(data: bytes, filename: str, useBrotli=True, verify=False): - params = { 'filename': filename, 'brotli': useBrotli, 'verify': verify } +def scannerDetectsBytes(data: bytes, filename: str, useBrotli=True, verify=False, no_exec=False): + params = { 'filename': filename, 'brotli': useBrotli, 'verify': verify, 'no_exec' : no_exec} if useBrotli: scanData = brotli.compress(data) else: diff --git a/supermega.py b/supermega.py index 0cde56e..0236245 100644 --- a/supermega.py +++ b/supermega.py @@ -107,6 +107,8 @@ def start(settings: Settings): if settings.cleanup_files_on_start: clean_files() delete_all_files_in_directory(f"{logs_dir}/") + # And logs + observer.reset() exit_code = 0 # 0 = success # Load our input