Files
SuperMega/phases/assembler.py
T

45 lines
1.4 KiB
Python

import logging
from model import *
from config import config
from observer import observer
from pe.pehelper import *
from helper import *
logger = logging.getLogger("Assembler")
def asm_to_shellcode(asm_in: FilePath, build_exe: FilePath) -> bytes:
"""Takes ASM source file asm_in, compiles it into build_exe, extracts its code section and write into shellcode_out"""
logger.info("--[ Assemble to exe: {} -> {}".format(asm_in, build_exe))
run_process_checkret([
config.get("path_ml64"),
asm_in,
"/link",
"/OUT:{}".format(build_exe),
"/entry:AlignRSP" # "/entry:main",
])
if not os.path.isfile(build_exe):
raise Exception("Compiling failed")
code = extract_code_from_exe_file(build_exe)
return code
def merge_loader_payload(
shellcode_in: bytes,
payload_data: bytes,
decoder_style: DecoderStyle
) -> bytes:
if decoder_style == DecoderStyle.PLAIN_1:
# Nothing to do
pass
elif decoder_style == DecoderStyle.XOR_1:
xor_key = config.xor_key
logger.info("---[ XOR payload with key 0x{:X}".format(xor_key))
payload_data = bytes([byte ^ xor_key for byte in payload_data])
logger.info("---[ Size: Carrier: {} and Payload: {} Sum: {} ".format(
len(shellcode_in), len(payload_data), len(shellcode_in)+len(payload_data)))
return shellcode_in + payload_data