Astral-PE: A low-level mutator (headers obfuscator) for native Windows PE files
Astral-PE is a low-level mutator (headers obfuscator and patcher) for Windows PE files (.exe
, .dll
) that rewrites structural metadata after compilation (or postbuild protection) — without breaking execution.
It does not pack, encrypt or inject. Instead, it mutates low-hanging but critical structures like timestamps, headers, section flags, debug info, import/export names, and more.
In what cases is it useful?
You’ve protected a binary — but public unpackers or YARA rules still target its unchanged structure.
Use Astral-PE as a post-processing step to:
- Prevent automated unpacking
- Break static unpacker logic
- Invalidate reverse-engineering signatures
- Disrupt clustering in sandboxes
- Strip metadata, overlays (only if file is signed), debug traces…
Perfect for:
- For packed/protected builds (e.g. legacy Enigma)
- To create your own protector on this base
- Hardened loaders that remain structurally default
- To create interesting crackme quests
- For educational purposes
What it modifies
Astral-PE applies precise, compliant, and execution-safe mutations:
Target | Description |
---|---|
Clears TimeDateStamp in file headers |
|
Fully removed — breaks toolchain fingerprinting | |
Wiped (.text , .rsrc , etc. → null) |
|
Reset to zero | |
Stripped if file was signed | |
Removed if unused | |
Deleted (if CFG not present) | |
Removed if not used in the file | |
Enables 4 GB memory range for 32-bit processes | |
Stripped: DEBUG_STRIPPED , LOCAL_SYMS_STRIPPED , LINE_NUMS_STRIPPED |
|
Minimum OS and Subsystem versions set to zero | |
Increased to safe defaults (32/64 MB) if too low | |
Erased from optional header | |
Located and zeroed in binary tail | |
PDB paths wiped, Debug Directory erased | |
Replaces or shuffles PUSH/PROLOGUE bytes (e.g. UPX) | |
DLL names mutated: case, prefix, randomized formatting | |
Faked if absent (baits certain scanners) | |
All unused entries cleaned | |
R/W/X + code flags applied to all sections | |
Reset to clean “MZ”, patched e_lfanew |