mirror of
https://github.com/dobin/SuperMega
synced 2026-06-02 17:27:10 +00:00
feature: web project
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import pickle
|
||||
|
||||
from typing import List, Tuple
|
||||
from model.settings import Settings
|
||||
|
||||
|
||||
class Project():
|
||||
def __init__(self, name: str, settings: Settings):
|
||||
self.name = name
|
||||
self.settings: Settings = settings
|
||||
|
||||
|
||||
class Storage():
|
||||
def __init__(self):
|
||||
self.data: List[Project] = self.get_data()
|
||||
|
||||
def get_project(self, name):
|
||||
for project in self.data:
|
||||
if project.name == name:
|
||||
return project
|
||||
return None
|
||||
|
||||
def add_project(self, project):
|
||||
self.data.append(project)
|
||||
self.save_data()
|
||||
|
||||
def get_data(self):
|
||||
print("Read data")
|
||||
with open("app/data.pickle", "rb") as f:
|
||||
data = f.read()
|
||||
data = pickle.loads(data)
|
||||
|
||||
for project in data:
|
||||
print(" {}".format(project.name))
|
||||
|
||||
return data
|
||||
|
||||
def save_data(self):
|
||||
print("Save data")
|
||||
with open("app/data.pickle", "wb") as f:
|
||||
f.write(pickle.dumps(self.data))
|
||||
|
||||
storage = Storage()
|
||||
@@ -0,0 +1,52 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{% include 'header.html' %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{% include 'navigation.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-3">
|
||||
<ul class="nav nav-tabs flex-column" id="myTab" role="tablist">
|
||||
{% for log_file in log_files %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button
|
||||
class="nav-link"
|
||||
id="project-{{log_file['id']}}-tab"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#project-{{log_file['id']}}"
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-controls="project-{{log_file['id']}}"
|
||||
aria-selected="true"
|
||||
>{{log_file['name']}}</button>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-md-9">
|
||||
<div class="tab-content" id="myTabContent">
|
||||
{% for log_file in log_files %}
|
||||
<div
|
||||
class="tab-pane fade"
|
||||
id="project-{{log_file['id']}}"
|
||||
role="tabpanel"
|
||||
aria-labelledby="project-{{log_file['id']}}-tab"
|
||||
>
|
||||
<div style="white-space: pre-wrap; font-family: 'Consolas', monospace;">{{log_file['content']|safe}}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -10,6 +10,14 @@
|
||||
|
||||
<h1> SuperMega </h1>
|
||||
|
||||
<!-- iterate through data and print as ul -->
|
||||
<ul>
|
||||
{% for item in data %}
|
||||
<li><a href="/project/{{item.name}}">{{ item.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<a href="/add_project">Add</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+78
-39
@@ -4,49 +4,88 @@
|
||||
{% include 'header.html' %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
{% include 'navigation.html' %}
|
||||
{% include 'navigation.html' %}
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="indent">
|
||||
|
||||
<h1> Project {{project_name}} </h1>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
|
||||
<!-- a bootstrap dropdown to select one of the log files -->
|
||||
<div class="col-md-3">
|
||||
|
||||
<form method="POST" enctype="multipart/form-data" action="/add_project">
|
||||
|
||||
<div class="row row-cols-lg-auto g-3">
|
||||
|
||||
<select class="form-select" name="shellcode" aria-label="SHELLCODE">
|
||||
{% for shellcode in shellcodes %}
|
||||
<option value="{{shellcode}}"
|
||||
{% if shellcode in project.settings.payload_path %} selected {% endif %}
|
||||
>
|
||||
{{shellcode}}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select class="form-select" name="exe" aria-label="EXE">
|
||||
{% for exe in exes %}
|
||||
<option value="{{exe}}"
|
||||
{% if exe in project.settings.inject_exe_in %} selected {% endif %}
|
||||
>
|
||||
{{exe}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select class="form-select" name="source_style" aria-label="SOURCESTYLE">
|
||||
{% for name, value in sourcestyles %}
|
||||
<option value="{{name}}"
|
||||
{% if name in project.settings.source_style.value %} selected {% endif %}
|
||||
>{{value}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select class="form-select" name="alloc_style" aria-label="ALLOCSTYLE">
|
||||
{% for name, value in allocstyles %}
|
||||
<option value="{{name}}"
|
||||
{% if value in project.settings.alloc_style.value %} selected {% endif %}
|
||||
>{{value}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select class="form-select" name="decoder_style" aria-label="DECODERESTYLE">
|
||||
{% for name, value in decoderstyles %}
|
||||
<option value="{{name}}"
|
||||
{% if value in project.settings.decoder_style.value %} selected {% endif %}
|
||||
>{{value}} // {{project.settings.decoder_style.value}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select class="form-select" name="exec_style" aria-label="EXECSTYLE">
|
||||
{% for name, value in execstyles %}
|
||||
<option value="{{name}}"
|
||||
{% if value in project.settings.exec_style.value %} selected {% endif %}
|
||||
>{{value}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<select class="form-select" name="inject_style" aria-label="INJECTSTYLE">
|
||||
{% for name, value in injectstyles %}
|
||||
<option value="{{name}}"
|
||||
{% if value in project.settings.inject_style.value %} selected {% endif %}
|
||||
>{{value}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<div class="col-md-3">
|
||||
<ul class="nav nav-tabs flex-column" id="myTab" role="tablist">
|
||||
{% for log_file in log_files %}
|
||||
<li class="nav-item" role="presentation">
|
||||
<button
|
||||
class="nav-link"
|
||||
id="project-{{log_file['id']}}-tab"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#project-{{log_file['id']}}"
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-controls="project-{{log_file['id']}}"
|
||||
aria-selected="true"
|
||||
>{{log_file['name']}}</button>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-md-9">
|
||||
<div class="tab-content" id="myTabContent">
|
||||
{% for log_file in log_files %}
|
||||
<div
|
||||
class="tab-pane fade"
|
||||
id="project-{{log_file['id']}}"
|
||||
role="tabpanel"
|
||||
aria-labelledby="project-{{log_file['id']}}-tab"
|
||||
>
|
||||
<div style="white-space: pre-wrap; font-family: 'Consolas', monospace;">{{log_file['content']|safe}}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -10,11 +10,12 @@
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
|
||||
<!-- a bootstrap dropdown to select one of the log files -->
|
||||
<div class="col-md-3">
|
||||
|
||||
<form method="POST" enctype="multipart/form-data" action="/inject">
|
||||
<form method="POST" enctype="multipart/form-data" action="/add_project">
|
||||
|
||||
<input type="text" name="project_name" class="form-control" placeholder="Projekt" aria-label="PROJECTNAME" aria-describedby="basic-addon1">
|
||||
|
||||
<div class="row row-cols-lg-auto g-3">
|
||||
|
||||
<select class="form-select" name="shellcode" aria-label="SHELLCODE">
|
||||
@@ -66,7 +67,7 @@
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<button class="btn btn-primary" type="submit" value="Inject">Inject</button>
|
||||
<button class="btn btn-primary" type="submit" value="save">Save</button>
|
||||
<button class="btn btn-primary" type="submit" value="Verify">Verify</button>
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1 @@
|
||||
ok
|
||||
+94
-25
@@ -10,11 +10,13 @@ from pygments.lexers import CLexer, NasmLexer, DiffLexer, HexdumpLexer
|
||||
from pygments.formatters import HtmlFormatter
|
||||
import difflib
|
||||
from ansi2html import Ansi2HTMLConverter
|
||||
import pickle
|
||||
|
||||
from config import config
|
||||
from model.settings import Settings
|
||||
from model.defs import *
|
||||
from supermega import start
|
||||
from app.storage import storage, Project
|
||||
|
||||
views = Blueprint('views', __name__)
|
||||
|
||||
@@ -23,38 +25,105 @@ conv = Ansi2HTMLConverter()
|
||||
|
||||
@views.route("/")
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
print(storage.data)
|
||||
return render_template('index.html', data=storage.data)
|
||||
|
||||
|
||||
@views.route("/inject", methods=['GET', 'POST'])
|
||||
def inject():
|
||||
config.load()
|
||||
settings = Settings()
|
||||
@views.route("/project/<name>")
|
||||
def project(name):
|
||||
project = storage.get_project(name)
|
||||
|
||||
settings.payload_path = "app/upload/shellcode/" + request.form['shellcode']
|
||||
settings.inject_exe_in = "app/upload/exe/" + request.form['exe']
|
||||
settings.inject_exe_out = "app/upload/infected/" + request.form['exe'] + ".injected"
|
||||
exes = []
|
||||
for file in os.listdir("app/upload/exe"):
|
||||
exes.append(file)
|
||||
|
||||
source_style = request.form['source_style']
|
||||
settings.source_style = SourceStyle[source_style]
|
||||
shellcodes = []
|
||||
for file in os.listdir("app/upload/shellcode"):
|
||||
shellcodes.append(file)
|
||||
|
||||
alloc_style = request.form['alloc_style']
|
||||
settings.alloc_style = AllocStyle[alloc_style]
|
||||
sourcestyles = [(color.name, color.value) for color in SourceStyle]
|
||||
allocstyles = [(color.name, color.value) for color in AllocStyle]
|
||||
decoderstyles = [(color.name, color.value) for color in DecoderStyle]
|
||||
execstyles = [(color.name, color.value) for color in ExecStyle]
|
||||
injectstyles = [(color.name, color.value) for color in InjectStyle]
|
||||
|
||||
decoder_style = request.form['decoder_style']
|
||||
settings.decoder_style = DecoderStyle[decoder_style]
|
||||
|
||||
exec_style = request.form['exec_style']
|
||||
settings.exec_style = ExecStyle[exec_style]
|
||||
|
||||
inject_style = request.form['inject_style']
|
||||
settings.inject_style = InjectStyle[inject_style]
|
||||
return render_template('project.html',
|
||||
project_name = name,
|
||||
project=project,
|
||||
|
||||
print(str(settings))
|
||||
start(settings)
|
||||
exes=exes,
|
||||
shellcodes=shellcodes,
|
||||
sourcestyles=sourcestyles,
|
||||
allocstyles=allocstyles,
|
||||
decoderstyles=decoderstyles,
|
||||
execstyles=execstyles,
|
||||
injectstyles=injectstyles,
|
||||
)
|
||||
|
||||
return render_template('inject.html')
|
||||
|
||||
@views.route("/add_project", methods=['POST', 'GET'])
|
||||
def inject():
|
||||
|
||||
if request.method == 'POST':
|
||||
config.load()
|
||||
settings = Settings()
|
||||
|
||||
project_name = request.form['project_name']
|
||||
|
||||
settings.payload_path = "app/upload/shellcode/" + request.form['shellcode']
|
||||
settings.inject_exe_in = "app/upload/exe/" + request.form['exe']
|
||||
settings.inject_exe_out = "app/upload/infected/" + request.form['exe'] + ".injected"
|
||||
|
||||
source_style = request.form['source_style']
|
||||
settings.source_style = SourceStyle[source_style]
|
||||
|
||||
alloc_style = request.form['alloc_style']
|
||||
settings.alloc_style = AllocStyle[alloc_style]
|
||||
|
||||
decoder_style = request.form['decoder_style']
|
||||
settings.decoder_style = DecoderStyle[decoder_style]
|
||||
|
||||
exec_style = request.form['exec_style']
|
||||
settings.exec_style = ExecStyle[exec_style]
|
||||
|
||||
inject_style = request.form['inject_style']
|
||||
settings.inject_style = InjectStyle[inject_style]
|
||||
|
||||
print(str(settings))
|
||||
|
||||
project = Project(project_name, settings)
|
||||
project.settings = settings
|
||||
storage.add_project(project)
|
||||
storage.save_data()
|
||||
return render_template('project_add_post.html')
|
||||
else:
|
||||
exes = []
|
||||
for file in os.listdir("app/upload/exe"):
|
||||
exes.append(file)
|
||||
|
||||
shellcodes = []
|
||||
for file in os.listdir("app/upload/shellcode"):
|
||||
shellcodes.append(file)
|
||||
|
||||
sourcestyles = [(color.name, color.value) for color in SourceStyle]
|
||||
allocstyles = [(color.name, color.value) for color in AllocStyle]
|
||||
decoderstyles = [(color.name, color.value) for color in DecoderStyle]
|
||||
execstyles = [(color.name, color.value) for color in ExecStyle]
|
||||
injectstyles = [(color.name, color.value) for color in InjectStyle]
|
||||
|
||||
return render_template('project_add_get.html',
|
||||
exes=exes,
|
||||
shellcodes=shellcodes,
|
||||
sourcestyles=sourcestyles,
|
||||
allocstyles=allocstyles,
|
||||
decoderstyles=decoderstyles,
|
||||
execstyles=execstyles,
|
||||
injectstyles=injectstyles,
|
||||
)
|
||||
|
||||
#start(settings)
|
||||
|
||||
|
||||
|
||||
@views.route("/build")
|
||||
def build():
|
||||
@@ -83,8 +152,8 @@ def build():
|
||||
)
|
||||
|
||||
|
||||
@views.route("/project")
|
||||
def project():
|
||||
@views.route("/files")
|
||||
def files():
|
||||
log_files = []
|
||||
|
||||
id = 0
|
||||
|
||||
Reference in New Issue
Block a user