recovering-injected-code-and-shellcode
Carves injected PE images and position-independent shellcode from a memory dump or carved region, identifies the payload type, and prepares it for disassembly or emulation. Activates for requests to r
Files4
View on GitHubSKILL.mdskills/recovering-injected-code-and-shellcode/SKILL.md
GitHubRecovering Injected Code and Shellcode
When to Use
- You have a carved memory region (from malfind/vaddump) and need to identify and extract the payload — an injected PE or raw shellcode.
- You need to locate likely shellcode entry points (egg hunters, GetPC stubs) before disassembly.
Do not use this to execute the payload — it prepares code for static disassembly/emulation in a controlled tool, not for running.
Prerequisites
- A carved binary region (raw bytes) from a memory image.
Safety & Handling
- The carved region is live malicious code; store it password-protected and never execute it.
Workflow
Step 1: Identify payload type
python scripts/analyst.py identify region.bin
Detects an embedded MZ/PE (with offset) versus raw shellcode, and reports the PE's architecture
if present.
Step 2: Locate shellcode entry hints
Finds common position-independent code markers: GetPC stubs (call $+5/fldz/fnstenv), PEB
access (fs:[30]/gs:[60]), and API-hashing loops.
Step 3: Extract for analysis
Carve the PE at its offset (or keep the raw shellcode) and hand it to a disassembler/emulator at the detected base/entry.
Step 4: Document
Record offsets, architecture, and entry hints for the downstream RE workflow.
Validation
- An embedded PE is confirmed by
MZ+ valide_lfanew→PE\0\0. - Shellcode entry hints reference real PIC patterns, not arbitrary bytes.
- Architecture detection matches the PE Machine field (or PIC heuristics for raw shellcode).
Pitfalls
- Assuming everything carved is a PE; much injected code is headerless shellcode.
- Wrong base address breaking relocations when loading a dumped PE — note it for rebuilding.
- Treating compressed/encrypted stages as final shellcode without a decode pass.
References
- See
references/api-reference.mdfor the identifier. - ATT&CK T1620 and T1055 (linked in frontmatter).