import os import struct import subprocess import sys import tempfile import unittest from pathlib import Path from DreamWalkers import ( COMIMAGE_FLAGS_ILONLY, IMAGE_FILE_MACHINE_AMD64, IMAGE_FILE_MACHINE_ARM64, IMAGE_FILE_MACHINE_I386, Instance, build_shellcode_blob, parse_pe_info, resolve_target_arch, ) REPO_ROOT = Path(__file__).resolve().parents[1] DREAMWALKERS_SCRIPT = REPO_ROOT / "DreamWalkers.py" ARCH_MACHINES = { "x86": IMAGE_FILE_MACHINE_I386, "x64": IMAGE_FILE_MACHINE_AMD64, "arm64": IMAGE_FILE_MACHINE_ARM64, } def make_minimal_pe(arch, *, is_dll=False, dotnet_anycpu=False): machine = ARCH_MACHINES[arch] is_pe32 = arch == "x86" optional_size = 0xE0 if is_pe32 else 0xF0 optional_magic = 0x10B if is_pe32 else 0x20B buffer = bytearray(0x800) buffer[0:2] = b"MZ" struct.pack_into("