diff --git a/model.py b/model.py index 167632c..65afb94 100644 --- a/model.py +++ b/model.py @@ -59,8 +59,12 @@ class ExeInfo(): # .text virtual address self.code_section = pehelper.get_code_section(pe) + logger.info("--[ Injectable: Chosen code section: {} at 0x{:x} size: {}".format( + self.code_section.Name.decode().rstrip('\x00'), + self.code_section.VirtualAddress, + self.code_section.SizeOfRawData)) self.code_virtaddr = self.code_section.VirtualAddress - self.code_rawsize = self.code_section.SizeOfRawData + self.code_size = self.code_section.SizeOfRawData # iat self.iat = pehelper.extract_iat(pe) diff --git a/pehelper.py b/pehelper.py index 642017f..85a35e7 100644 --- a/pehelper.py +++ b/pehelper.py @@ -13,7 +13,6 @@ logger = logging.getLogger("PEHelper") def extract_code_from_exe(exe_file: FilePath) -> bytes: pe = pefile.PE(exe_file) section = get_code_section(pe) - logger.info("--[ Code section: {}".format(section.Name.decode().rstrip('\x00'))) data: bytes = section.get_data() data = remove_trailing_null_bytes(data) logger.info(" > 0x{:X} Code Size: {} (raw code section size: {})".format( diff --git a/r2helper.py b/r2helper.py index 03ae184..ef64664 100644 --- a/r2helper.py +++ b/r2helper.py @@ -19,7 +19,7 @@ def r2_disas(data: bytes): f.write(data) code_len = len(data) - r2 = r2pipe.open(filename, flags=['-e', 'scr.prompt=false', '-e']) + r2 = r2pipe.open(filename, flags=['-e', 'scr.prompt=false']) r2.cmd('aaa') r2.cmd('e scr.color=0') diff --git a/redbackdoorer.py b/redbackdoorer.py index b7a525b..9fb97c0 100644 --- a/redbackdoorer.py +++ b/redbackdoorer.py @@ -1285,6 +1285,7 @@ def main(argv): peinj = PeBackdoor(options, Logger) result = peinj.backdoor(saveMode, runMode, args.shellcode, args.infile, outfile) + ret = 0 if result : if len(args.outfile) > 0: Logger.ok(f'Backdoored PE file saved to: {args.outfile}') @@ -1292,12 +1293,15 @@ def main(argv): shutil.copy(outfile, args.infile) Logger.ok(f'Backdoored PE file in place.') else: + ret = 1 Logger.fatal('Could not backdoor input PE file!') if temp: Logger.dbg('Removing temporary file...') temp.close() os.unlink(temp.name) + + exit(ret) if __name__ == '__main__': main(sys.argv) \ No newline at end of file diff --git a/supermega.py b/supermega.py index 9f88158..a86f9ca 100644 --- a/supermega.py +++ b/supermega.py @@ -200,6 +200,13 @@ def start(): # inject merged loader into an exe exit_code = 0 if project.inject: + l = len(file_readall_binary(main_shc_file)) + if l + 128 > project.exe_info.code_size: + logger.error("Error: Shellcode {}+128 too small for target code section {}".format( + l, project.exe_info.code_size + )) + return + phases.injector.inject_exe( shellcode_in = main_shc_file, exe_in = project.inject_exe_in,