DllCallAddress Shellcode Execution
Overview
An AutoIt-specific technique for executing shellcode reflectively. The AutoIt script decodes a payload (typically hex-encoded or XOR-encrypted shellcode), allocates executable memory via VirtualAlloc with PAGE_EXECUTE_READWRITE (0x40), and calls the shellcode entry point using DllCallAddress at a fixed hardcoded offset — most commonly 0x23b0.
Mechanism
- Payload staging: Shellcode is delivered as a string (hex-encoded or obfuscated) inside the AutoIt script, or as a companion file dropped to
%TEMP%. - Memory allocation:
VirtualAlloc(0, size, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)—0x3000and0x40flags. ^[script.au3] - Decoding: The script copies decoded bytes into the RWX buffer.
- Execution:
DllCallAddress("int", $buffer + 0x23b0)transfers control to the shellcode.
Cluster Context
The fixed offset 0x23b0 is a cluster hallmark across the unclassified-autoit-compiled family. Siblings using this exact offset include:
127c404a—reaffectionshellcode executed at0x23b0.6718622d—Lityersesshellcode executed at0x23b0.498f7bf3— shellcode executed at0x23b0.54ad2eac—sulfhydricshellcode executed at0x23b0(some variants use9136for alternate entry).
Detection
- AutoIt processes calling
DllCallAddresswith a pointer derived fromVirtualAlloc. - RWX memory regions in
AutoIt3.exeor the compiled AutoItSC process. - Suspicious
VirtualAlloccalls from AutoIt processes withPAGE_EXECUTE_READWRITE.
Related
- autoit-shellcode-xor-decryptor — payload decryption technique
- process-hollowing-svchost-regsvcs — post-shellcode process injection
- unclassified-autoit-compiled — parent cluster