mirror of
https://github.com/dobin/SuperMega
synced 2026-06-02 17:27:10 +00:00
feature: open folder (no_exec)
This commit is contained in:
@@ -83,15 +83,19 @@
|
|||||||
|
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
|
||||||
<button class="btn btn-primary" type="submit" value="save">Save Settings</button>
|
<button class="btn btn-primary" type="submit" value="save">Save Settings</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="col-6">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<form method="POST" enctype="multipart/form-data" action="/build_project">
|
<form method="POST" enctype="multipart/form-data" action="/build_project">
|
||||||
<input type="hidden" name="project_name" value="{{project_name}}">
|
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||||
<button class="btn btn-primary" type="submit" value="start">Build</button>
|
<button class="btn btn-primary" type="submit" value="start">Build</button>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -100,12 +104,22 @@
|
|||||||
<input type="hidden" name="project_name" value="{{project_name}}">
|
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||||
<button class="btn btn-primary" type="submit" value="start">Start Local</button>
|
<button class="btn btn-primary" type="submit" value="start">Start Local</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<form method="POST" enctype="multipart/form-data" action="/exec_project?no_exec=true">
|
||||||
|
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||||
|
<button class="btn btn-primary" type="submit" value="start">File Local</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true">
|
<form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true">
|
||||||
<input type="hidden" name="project_name" value="{{project_name}}">
|
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||||
<button class="btn btn-primary" type="submit" value="start">Start Remote</button>
|
<button class="btn btn-primary" type="submit" value="start">Start Remote</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true&no_exec=true">
|
||||||
|
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||||
|
<button class="btn btn-primary" type="submit" value="start">File Remote</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+22
-5
@@ -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 threading import Thread
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
import os
|
import os
|
||||||
@@ -10,6 +10,7 @@ from pygments.formatters import HtmlFormatter
|
|||||||
import difflib
|
import difflib
|
||||||
from ansi2html import Ansi2HTMLConverter
|
from ansi2html import Ansi2HTMLConverter
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
|
||||||
from config import config
|
from config import config
|
||||||
from model.settings import Settings
|
from model.settings import Settings
|
||||||
@@ -196,27 +197,43 @@ def start_project():
|
|||||||
if remote_arg == "true":
|
if remote_arg == "true":
|
||||||
remote = 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:
|
if remote:
|
||||||
logger.info("--[ Exec {} on server {}".format(project.project_exe, config.get("avred_server")))
|
logger.info("--[ Exec {} on server {}".format(project.project_exe, config.get("avred_server")))
|
||||||
filepath = "{}/{}".format(project.project_dir, project.project_exe)
|
filepath = "{}/{}".format(project.project_dir, project.project_exe)
|
||||||
with open(filepath, "rb") as f:
|
with open(filepath, "rb") as f:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
try:
|
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:
|
except Exception as e:
|
||||||
logger.error(f'Error scanning: {e}')
|
logger.error(f'Error scanning: {e}')
|
||||||
return 4
|
return jsonify({
|
||||||
|
"exception": str(e)
|
||||||
|
}), 500
|
||||||
else:
|
else:
|
||||||
logger.info("--[ Exec {} locally".format(project.project_exe))
|
|
||||||
# Start/verify it at the end
|
# Start/verify it at the end
|
||||||
if project.settings.verify:
|
if project.settings.verify:
|
||||||
logger.info("--[ Verify infected exe")
|
logger.info("--[ Verify infected exe")
|
||||||
exit_code = verify_injected_exe(project.settings.inject_exe_out)
|
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))
|
logger.info("--[ Start infected exe: {}".format(project.settings.inject_exe_out))
|
||||||
run_process_checkret([
|
run_process_checkret([
|
||||||
project.settings.inject_exe_out,
|
project.settings.inject_exe_out,
|
||||||
], check=False)
|
], 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)
|
return redirect("/project/{}".format(project_name), code=302)
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ class Observer():
|
|||||||
self.idx = 0
|
self.idx = 0
|
||||||
self.active = True
|
self.active = True
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self.logs = []
|
||||||
|
self.idx = 0
|
||||||
|
|
||||||
def add_text(self, name, data):
|
def add_text(self, name, data):
|
||||||
self.write_to_file(name + ".txt", data)
|
self.write_to_file(name + ".txt", data)
|
||||||
self.idx += 1
|
self.idx += 1
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ from config import config
|
|||||||
logger = logging.getLogger("Sender")
|
logger = logging.getLogger("Sender")
|
||||||
|
|
||||||
|
|
||||||
def scannerDetectsBytes(data: bytes, filename: str, useBrotli=True, verify=False):
|
def scannerDetectsBytes(data: bytes, filename: str, useBrotli=True, verify=False, no_exec=False):
|
||||||
params = { 'filename': filename, 'brotli': useBrotli, 'verify': verify }
|
params = { 'filename': filename, 'brotli': useBrotli, 'verify': verify, 'no_exec' : no_exec}
|
||||||
if useBrotli:
|
if useBrotli:
|
||||||
scanData = brotli.compress(data)
|
scanData = brotli.compress(data)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -107,6 +107,8 @@ def start(settings: Settings):
|
|||||||
if settings.cleanup_files_on_start:
|
if settings.cleanup_files_on_start:
|
||||||
clean_files()
|
clean_files()
|
||||||
delete_all_files_in_directory(f"{logs_dir}/")
|
delete_all_files_in_directory(f"{logs_dir}/")
|
||||||
|
# And logs
|
||||||
|
observer.reset()
|
||||||
exit_code = 0 # 0 = success
|
exit_code = 0 # 0 = success
|
||||||
|
|
||||||
# Load our input
|
# Load our input
|
||||||
|
|||||||
Reference in New Issue
Block a user