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