mirror of
https://github.com/dobin/SuperMega
synced 2026-06-02 17:27:10 +00:00
refactor: better log output
This commit is contained in:
@@ -45,7 +45,7 @@ def projects_route():
|
|||||||
def project(name):
|
def project(name):
|
||||||
project_setting = storage.get_project_setting(name)
|
project_setting = storage.get_project_setting(name)
|
||||||
if project_setting == None:
|
if project_setting == None:
|
||||||
logger.error("Project {} not found".format(name))
|
logger.error("Project {} not found".format(name))<<<<<
|
||||||
return redirect("/projects", code=302)
|
return redirect("/projects", code=302)
|
||||||
|
|
||||||
project_setting.print()
|
project_setting.print()
|
||||||
@@ -190,6 +190,7 @@ def add_project():
|
|||||||
settings.carrier_invoke_style = CarrierInvokeStyle.BackdoorCallInstr
|
settings.carrier_invoke_style = CarrierInvokeStyle.BackdoorCallInstr
|
||||||
settings.payload_location = PayloadLocation.CODE
|
settings.payload_location = PayloadLocation.CODE
|
||||||
settings.fix_missing_iat = True
|
settings.fix_missing_iat = True
|
||||||
|
settings.plugin_antiemulation = "sirallocalot"
|
||||||
|
|
||||||
# add new project
|
# add new project
|
||||||
settings.project_comment = comment
|
settings.project_comment = comment
|
||||||
@@ -253,7 +254,7 @@ def build_project(project_name):
|
|||||||
|
|
||||||
project_settings.try_start_final_infected_exe = False
|
project_settings.try_start_final_infected_exe = False
|
||||||
project = Project(project_settings)
|
project = Project(project_settings)
|
||||||
prepare_project(project_name, project.settings)
|
prepare_project(project_name)
|
||||||
thread = Thread(target=supermega_thread, args=(project.settings, ))
|
thread = Thread(target=supermega_thread, args=(project.settings, ))
|
||||||
thread.start()
|
thread.start()
|
||||||
thread_running = True
|
thread_running = True
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ def run_exe(exefile, dllfunc="", check=True):
|
|||||||
|
|
||||||
|
|
||||||
def run_process_checkret(args, check=True):
|
def run_process_checkret(args, check=True):
|
||||||
logger.info(" > Run process: {}".format(" ".join(args)))
|
logger.info(" > Run process: {}".format(" ".join(args)))
|
||||||
|
|
||||||
ret = subprocess.CompletedProcess("", 666)
|
ret = subprocess.CompletedProcess("", 666)
|
||||||
try:
|
try:
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,6 @@ class Payload():
|
|||||||
|
|
||||||
|
|
||||||
def init(self) -> bool:
|
def init(self) -> bool:
|
||||||
logger.info("-[ Payload: {}".format(self.payload_path))
|
|
||||||
if not os.path.exists(self.payload_path):
|
if not os.path.exists(self.payload_path):
|
||||||
logger.error("Payload file does not exist: {}".format(self.payload_path))
|
logger.error("Payload file does not exist: {}".format(self.payload_path))
|
||||||
return False
|
return False
|
||||||
@@ -21,6 +20,7 @@ class Payload():
|
|||||||
with open(self.payload_path, 'rb') as f:
|
with open(self.payload_path, 'rb') as f:
|
||||||
self.payload_data = f.read()
|
self.payload_data = f.read()
|
||||||
|
|
||||||
logger.info(" Size: {} bytes".format(len(self.payload_data)))
|
logger.info("-[ Payload: {} ({} bytes)".format(
|
||||||
|
self.payload_path, len(self.payload_data)))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -36,11 +36,10 @@ class Project():
|
|||||||
logger.info("Injectable Path: {}".format(self.injectable.exe_filepath))
|
logger.info("Injectable Path: {}".format(self.injectable.exe_filepath))
|
||||||
|
|
||||||
|
|
||||||
def prepare_project(project_name, settings):
|
def prepare_project(project_name):
|
||||||
src = "{}{}/".format(PATH_CARRIER, settings.carrier_name)
|
|
||||||
dst = "{}{}/".format(PATH_WEB_PROJECT, project_name)
|
dst = "{}{}/".format(PATH_WEB_PROJECT, project_name)
|
||||||
|
|
||||||
logger.info("-[ Cleanup project: {}".format(project_name))
|
logger.info("-[ Prepare and cleanup project: {}".format(project_name))
|
||||||
|
|
||||||
if not os.path.exists(dst):
|
if not os.path.exists(dst):
|
||||||
os.makedirs(dst)
|
os.makedirs(dst)
|
||||||
|
|||||||
+6
-4
@@ -114,8 +114,10 @@ class Injector():
|
|||||||
exe_out = self.settings.get_inject_exe_out()
|
exe_out = self.settings.get_inject_exe_out()
|
||||||
carrier_invoke_style: CarrierInvokeStyle = self.settings.carrier_invoke_style
|
carrier_invoke_style: CarrierInvokeStyle = self.settings.carrier_invoke_style
|
||||||
|
|
||||||
logger.info("-[ Injecting Carrier".format())
|
logger.info("-[ Injecting Carrier into injectable".format())
|
||||||
logger.info(" Injectable: {} -> {}".format(exe_in, exe_out))
|
logger.info(" Injectable: {} -> {}".format(exe_in, exe_out))
|
||||||
|
logger.info(" Implant IAT fixup if necessary: {}".format(self.settings.fix_missing_iat))
|
||||||
|
|
||||||
|
|
||||||
# Patch IAT (if necessary and wanted)
|
# Patch IAT (if necessary and wanted)
|
||||||
self.injectable_patch_iat()
|
self.injectable_patch_iat()
|
||||||
@@ -197,7 +199,7 @@ class Injector():
|
|||||||
|
|
||||||
|
|
||||||
def injectable_patch_iat(self):
|
def injectable_patch_iat(self):
|
||||||
logger.info(" Checking if IAT entries required by carrier are available")
|
#logger.info(" Checking if IAT entries required by carrier are available")
|
||||||
iatRequests = self.injectable.get_all_iat_requests()
|
iatRequests = self.injectable.get_all_iat_requests()
|
||||||
iatMissing = []
|
iatMissing = []
|
||||||
|
|
||||||
@@ -212,7 +214,7 @@ class Injector():
|
|||||||
iatRequest.name))
|
iatRequest.name))
|
||||||
iatMissing.append(iatRequest)
|
iatMissing.append(iatRequest)
|
||||||
|
|
||||||
logger.info(" IAT entries missing: {}".format(len(iatMissing)))
|
logger.info(" IAT entries missing in injectable for carrier: {}".format(len(iatMissing)))
|
||||||
for iatRequest in iatMissing:
|
for iatRequest in iatMissing:
|
||||||
# Not available, check if we can patch it
|
# Not available, check if we can patch it
|
||||||
iat_name = self.superpe.get_replacement_iat_for("KERNEL32.dll", iatRequest.name)
|
iat_name = self.superpe.get_replacement_iat_for("KERNEL32.dll", iatRequest.name)
|
||||||
@@ -272,7 +274,7 @@ class Injector():
|
|||||||
return
|
return
|
||||||
|
|
||||||
# insert data
|
# insert data
|
||||||
logger.info(" Inject Carrier data into injectable .rdata/.text")
|
logger.info(" Inject Carrier-data into injectable")
|
||||||
for datareuse_fixup in reusedata_fixups:
|
for datareuse_fixup in reusedata_fixups:
|
||||||
logger.debug(" Handling DataReuse Fixup: {} (.code: {})".format(
|
logger.debug(" Handling DataReuse Fixup: {} (.code: {})".format(
|
||||||
datareuse_fixup.string_ref, datareuse_fixup.in_code))
|
datareuse_fixup.string_ref, datareuse_fixup.in_code))
|
||||||
|
|||||||
+5
-6
@@ -28,7 +28,7 @@ def create_c_from_template(settings: Settings, payload_len: int):
|
|||||||
src = "{}{}/".format(PATH_CARRIER, settings.carrier_name)
|
src = "{}{}/".format(PATH_CARRIER, settings.carrier_name)
|
||||||
dst = "{}{}/".format(PATH_WEB_PROJECT, settings.project_name)
|
dst = "{}{}/".format(PATH_WEB_PROJECT, settings.project_name)
|
||||||
|
|
||||||
logger.info("-[ Carrier create Template: {}".format(
|
logger.info("-[ Create Carrier: {}".format(
|
||||||
settings.project_c_path))
|
settings.project_c_path))
|
||||||
|
|
||||||
# check that source directory exists
|
# check that source directory exists
|
||||||
@@ -43,14 +43,13 @@ def create_c_from_template(settings: Settings, payload_len: int):
|
|||||||
|
|
||||||
logger.info(" Carrier: {}".format(
|
logger.info(" Carrier: {}".format(
|
||||||
settings.carrier_name))
|
settings.carrier_name))
|
||||||
logger.info(" Carrier: Code into: {}".format(
|
logger.info(" Store payload in: {}".format(
|
||||||
settings.payload_location.value))
|
settings.payload_location.value))
|
||||||
logger.info(" Carrier: Decoder: {}".format(
|
logger.info(" Use Decoder: {}".format(
|
||||||
settings.decoder_style))
|
settings.decoder_style))
|
||||||
logger.info(" Carrier: Invoker: {}".format(
|
logger.info(" Use Invoker: {}".format(
|
||||||
settings.carrier_invoke_style.value))
|
settings.carrier_invoke_style.value))
|
||||||
|
logger.info(" Use AntiEmulation: {}".format(
|
||||||
logger.info(" Carrier AntiEmulation: {}".format(
|
|
||||||
settings.plugin_antiemulation)
|
settings.plugin_antiemulation)
|
||||||
)
|
)
|
||||||
if settings.plugin_guardrail != "none":
|
if settings.plugin_guardrail != "none":
|
||||||
|
|||||||
+1
-8
@@ -73,13 +73,6 @@ def main():
|
|||||||
settings.plugin_guardrail_data_key = args.guardrail_key
|
settings.plugin_guardrail_data_key = args.guardrail_key
|
||||||
settings.plugin_guardrail_data_value = args.guardrail_value
|
settings.plugin_guardrail_data_value = args.guardrail_value
|
||||||
|
|
||||||
logger.info("-( Config: Implant IAT fixup if necessary: {}".format(settings.fix_missing_iat))
|
|
||||||
if settings.plugin_guardrail != "none":
|
|
||||||
logger.info("-( Config: Guardrails Plugin: {} {}/{}".format(
|
|
||||||
settings.plugin_guardrail,
|
|
||||||
settings.plugin_guardrail_data_key,
|
|
||||||
settings.plugin_guardrail_data_value))
|
|
||||||
|
|
||||||
settings.decoder_style = args.decoder
|
settings.decoder_style = args.decoder
|
||||||
settings.carrier_name = args.carrier
|
settings.carrier_name = args.carrier
|
||||||
if args.payload_location == ".code":
|
if args.payload_location == ".code":
|
||||||
@@ -118,7 +111,7 @@ def start(settings: Settings) -> int:
|
|||||||
config.make_encryption_keys()
|
config.make_encryption_keys()
|
||||||
|
|
||||||
# Prepare the project: copy all files to projects/<project_name>/
|
# Prepare the project: copy all files to projects/<project_name>/
|
||||||
prepare_project(settings.project_name, settings)
|
prepare_project(settings.project_name)
|
||||||
|
|
||||||
# Do the thing and catch the errors
|
# Do the thing and catch the errors
|
||||||
ret = False
|
ret = False
|
||||||
|
|||||||
Reference in New Issue
Block a user