mirror of
https://github.com/dobin/SuperMega
synced 2026-06-03 01:27:11 +00:00
feature: open folder (no_exec)
This commit is contained in:
@@ -83,15 +83,19 @@
|
||||
|
||||
<div class="col-3">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
|
||||
<button class="btn btn-primary" type="submit" value="save">Save Settings</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-6">
|
||||
|
||||
<div class="row">
|
||||
<form method="POST" enctype="multipart/form-data" action="/build_project">
|
||||
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||
<button class="btn btn-primary" type="submit" value="start">Build</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
@@ -100,12 +104,22 @@
|
||||
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||
<button class="btn btn-primary" type="submit" value="start">Start Local</button>
|
||||
</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 class="col-6">
|
||||
<form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true">
|
||||
<input type="hidden" name="project_name" value="{{project_name}}">
|
||||
<button class="btn btn-primary" type="submit" value="start">Start Remote</button>
|
||||
</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>
|
||||
|
||||
+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 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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user