refactor: better log output

This commit is contained in:
Dobin Rutishauser
2025-06-20 09:49:14 +02:00
parent 78cb8ad116
commit 7eefe7c444
7 changed files with 20 additions and 26 deletions
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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