d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07unclassified-autoit-compiled: d86e0912 — UPX-packed AUG_SOA.exe, 802 KB compiled AutoIt script in .rsrc
Executive Summary
An AutoIt v3 single-file compiled PE (AutoItSC), UPX-compressed at rest, unpacking to a standard 5-section PE32 with an 802 KB encrypted compiled script stored as RT_RCDATA in .rsrc. The filename AUG_SOA.exe is a business-document lure (Statement of Account / August). This is the eighteenth confirmed sibling in the unclassified-autoit-compiled cluster, and the largest script payload observed to date (802 KB vs previous max 932 KB in f0059bee). Built with MSVC 14.14 (VS 2017) linker, compiled Sep 2024. No dynamic execution available (CAPE skipped: no Windows guest).
What It Is
- SHA-256:
d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07 - Filename:
AUG_SOA.exe(business-document lure — "August Statement of Account") - Packed: UPX 4.2.2, 3 sections (
UPX0,UPX1,.rsrc) — 1,211,904 bytes^[file.txt] - Unpacked: PE32 x86 GUI, 5 sections (
.text,.rdata,.data,.rsrc,.reloc) — 1,717,760 bytes^[rabin2-info.txt] - Linker: Microsoft linker 14.14 (VS 2017), compiled
Sun Sep 15 23:31:14 2024 UTC^[pefile.txt:40] - AutoIt runtime: v3 single-file compiler (
AutoItSC);AU3!EA06header in script resource^[unpacked_strings.txt] - Script payload: 802,298 bytes, RT_RCDATA resource type 10, unnamed entry^[pe resource extraction]
- Icons: 11-icon suite in
.rsrc(8 in main group ID 99, 3 standalone groups), standard Windows application iconography^[pe resource extraction] - Version info: Empty VS_VERSIONINFO (zero fields, no strings beyond LangID) — deliberate anti-triage minimalism^[pefile.txt:195-239]
- Signing: Unsigned (no Authenticode certificate)^[pefile.txt:158-160]
- YARA:
PE_File_Generic,Likely_Packer_UPX^[triage.json]
How It Works
Packing / Unpacking
UPX-compressed outer shell with standard 3-section layout. UPX0 is uninitialized data (SizeOfRawData=0), UPX1 holds the compressed code. Unpacking restores a normal 5-section PE32 with full import table and .rsrc resources intact.^[file.txt]^[pefile.txt:82-142]
Script Execution Model
The binary is the AutoIt3 interpreter runtime fused with a compiled script. At runtime the interpreter loads the SCRIPT resource from .rsrc, decrypts/decompiles it, and executes the embedded AutoIt bytecode. The script logic itself is opaque to static analysis — the AU3!EA06 header indicates AutoItSC v3 encrypted bytecode, not plaintext source.^[unpacked_strings.txt:0]
Import Surface (Unpacked)
Standard AutoItSC runtime import table — no stripped/minimal IAT. Full surface across 16 DLLs:
- KERNEL32.DLL (167 imports): Process/thread management, memory (VirtualAlloc/Ex, WriteProcessMemory, CreateProcessW), file I/O, registry-adjacent APIs (FindFirstFileW, SetFileAttributesW), debugging detection (
IsDebuggerPresent), temp-file creation (GetTempPathW,GetTempFileNameW), resource loading (LoadResource,LockResource,SizeofResource), token/privilege APIs (OpenProcessToken,AdjustTokenPrivileges,LookupPrivilegeValueW), pipe creation (CreatePipe).^[r2:ii] - ADVAPI32.dll (33 imports): Full registry read/write (
RegSetValueExW,RegOpenKeyExW,RegCreateKeyExW,RegDeleteKeyW,RegDeleteValueW,RegEnumValueW), token duplication (DuplicateTokenEx), process creation as user (CreateProcessAsUserW,CreateProcessWithLogonW), logon (LogonUserW), SID allocation (AllocateAndInitializeSid), ACL/security descriptor manipulation, system shutdown (InitiateSystemShutdownExW).^[r2:ii] - USER32.dll (160 imports): GUI automation, window enumeration, clipboard (
OpenClipboard,GetClipboardData,SetClipboardData,EmptyClipboard), keyboard/mouse input simulation (SendInput,GetAsyncKeyState,keybd_event,mouse_event,SetKeyboardState), screen capture (GetDC,GetWindowDC), message passing.^[r2:ii] - GDI32.dll (35 imports): Drawing primitives, bitmap creation (
CreateCompatibleBitmap,CreateCompatibleDC), screenshot pipelines (StretchBlt,GetDIBits), font/text metrics.^[r2:ii] - WININET.dll (14 imports): HTTP/FTP client —
InternetOpenW,InternetConnectW,HttpOpenRequestW,HttpSendRequestW,HttpQueryInfoW,InternetReadFile,InternetOpenUrlW,FtpOpenFileW,FtpGetFileSize.^[r2:ii] - WSOCK32.dll (24 imports): Full socket surface —
socket,connect,send,recv,sendto,recvfrom,bind,listen,accept,select,gethostbyname,WSAStartup,WSACleanup,gethostname,inet_addr,inet_ntoa,ioctlsocket.^[r2:ii] - IPHLPAPI.DLL (3 imports): ICMP ping (
IcmpCreateFile,IcmpSendEcho,IcmpCloseHandle) — host reconnaissance.^[r2:ii] - SHELL32.dll (15 imports):
ShellExecuteW,ShellExecuteExW,SHGetFolderPathW,SHFileOperationW,SHBrowseForFolderW,SHEmptyRecycleBinW,ExtractIconExW.^[r2:ii] - PSAPI.DLL (1 import):
GetProcessMemoryInfo— process introspection.^[r2:ii] - MPR.dll (4 imports):
WNetUseConnectionW,WNetAddConnection2W,WNetGetConnectionW— network share mapping.^[r2:ii] - ole32.dll / OLEAUT32.dll / COMCTL32.dll / COMDLG32.dll / USERENV.dll / UxTheme.dll / VERSION.dll / WINMM.dll: COM/OLE automation, common controls, file dialogs, user profile loading, theme queries, version info, multimedia (
timeGetTime,mciSendStringW,waveOutSetVolume).^[r2:ii]
Notable Behaviors (Static Inference)
- Process injection surface:
VirtualAllocEx+WriteProcessMemory+CreateProcessW+OpenProcess+ReadProcessMemory— the standard AutoIt runtime exports these to scripts viaDllCall, making reflective injection trivial for the embedded payload.^[r2:ii] - Privilege escalation:
OpenProcessToken→LookupPrivilegeValueW→AdjustTokenPrivilegesenablesSeDebugPrivilegebefore cross-process operations.^[r2:ii] - Clipboard access: Full clipboard read/write surface (
OpenClipboard,GetClipboardData,SetClipboardData,EmptyClipboard) — crypto-clipper capability available to the script.^[r2:ii] - Screenshot capture:
GetDC/GetWindowDC+ GDI bitmap primitives (CreateCompatibleBitmap,StretchBlt,GetDIBits) — screen capture available to script.^[r2:ii] - Keylogging:
GetAsyncKeyStateimported — keystroke monitoring available.^[r2:ii] - Network C2 surface: Dual HTTP/FTP (WinInet) + raw sockets (WinSock) + ICMP reconnaissance + network share mapping (MPR). Full malware C2 toolkit exposed to the script.^[r2:ii]
- File masquerade:
SetFileTime,SetFileAttributesW— timestamp/attribute manipulation for blending in.^[r2:ii] - System shutdown:
InitiateSystemShutdownExW— wiper or extortion capability.^[r2:ii]
Decompiled Behavior
Ghidra MCP unavailable during this session. Static analysis relies on radare2 and pefile.
Entry point (entry0 at 0x420577) calls an initialization routine (fcn.00420aea) then jumps to the main interpreter loop (0x4203fb). Standard C++ runtime initialization with std::exception vtables (std::bad_alloc, std::bad_array_new_length) observed in the early functions — consistent with MSVC 14.x AutoItSC build.^[r2:entry0]
The .rdata section contains the full AutoIt runtime string table: AutoIt v3 GUI class names, command-line parsing strings (/AutoIt3ExecuteScript, /AutoIt3ExecuteLine, /AutoIt3OutputDebug, /ErrorStdOut), registry paths (Software\AutoIt v3\AutoIt), and the SCRIPT resource name.^[rabin2-info.txt:z]
C2 Infrastructure
No C2 strings recovered. The compiled AutoIt script is encrypted/compiled bytecode. Without dynamic execution (CAPE skipped: no Windows guest), C2 URLs, IPs, domains, mutexes, and named pipes are not observable statically. The import surface confirms HTTP/FTP/socket capability, but the actual endpoints are script-resolved.^[dynamic-analysis.md]
Interesting Tidbits
- Largest script in cluster: 802 KB compiled script exceeds the previous record-holder
f0059bee(932 KB plaintext/script source). This sample sits in the upper tier of cluster script sizes.^[/intel/analyses/f0059beebd2edd77495f1b94c756a6706052c3356aca19cf4807ee780629d15f.html] - Empty version info: VS_VERSIONINFO exists but contains zero values for all version fields and only a LangID translation table. This is deliberate anti-triage — the resource is present so the PE is valid, but contains no discernible metadata.^[pefile.txt:195-239]
- No PDB path: Clean build — no debugging symbols leaked.^[pefile.txt:30]
- TLS callback present: TLS directory at
0x1AF9A4with 18-byte array — may execute anti-debug before main().^[pefile.txt:173-175] - canary=true, nx=false: Stack canaries enabled but DEP/NX disabled — consistent with AutoItSC runtime needing executable heap for script JIT/interpreter.^[rabin2-info.txt:9,24]
- pic=true: Position-independent code — supports ASLR relocation.^[rabin2-info.txt:28]
How To Mess With It (Homelab Replication)
Goal: Build a comparable AutoItSC single-file PE with a script payload in .rsrc.
- Install AutoIt v3 from https://www.autoitscript.com/site/autoit-downloads/
- Write a simple script (
test.au3):#include <WinAPIFiles.au3> MsgBox(0, "Test", "Hello from compiled AutoIt") - Compile with AutoIt3Wrapper or SciTE:
Compile Script to .exe (x86) - Enable UPX compression in the compiler options (or pack post-build with
upx --best test.exe) - Verify with
rabin2 -I test.exe— should showcompiler: MSVC,lang: c,canary: true,pic: true - Extract script resource: use Resource Hacker or
pefilePython script to dump RT_RCDATA type 10 - Compare capa fingerprint: run capa against your binary; expect "packed" warning and limited static capabilities
What you'll learn: How trivial it is to embed opaque script logic inside a signed-looking PE, and why AutoIt malware remains a staple of crimeware distribution.
Deployable Signatures
YARA Rule
rule AutoItSC_SingleFile_PE32_UPX
{
meta:
description = "AutoIt v3 single-file compiled PE32, UPX-packed or unpacked"
author = "PacketPursuit"
date = "2026-06-25"
sha256 = "d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07"
family = "unclassified-autoit-compiled"
strings:
$au3_hdr = "AU3!EA06" ascii
$autoitsc = ".text$lp00AutoItSC" ascii
$script_rc = "SCRIPT" wide
$au3_gui = "AutoIt v3 GUI" wide
$au3_exec = "/AutoIt3ExecuteScript" wide
$upx0 = { 55 50 58 30 00 00 00 00 }
$upx1 = { 55 50 58 31 00 00 00 00 }
condition:
uint16(0) == 0x5A4D and
($au3_hdr or $autoitsc or ($script_rc and $au3_gui)) and
(pe.number_of_sections >= 3) and
($upx0 or $upx1 or pe.sections[0].name == "UPX0")
}
Sigma Rule
title: AutoItSC Single-File PE Execution
logsource:
category: process_creation
product: windows
detection:
selection:
- Image|endswith:
- '\\AUG_SOA.exe'
- '\\Invoice.exe'
- '\\QUOTATION_*.exe'
- '\\PO_*.exe'
- '\\BANK_DETAILS_*.exe'
- '\\DHL_*.exe'
- '\\FDA.exe'
- '\\Public_Holiday_Notice_*.exe'
- CommandLine|contains:
- '/AutoIt3ExecuteScript'
- '/AutoIt3ExecuteLine'
- '/AutoIt3OutputDebug'
- '/ErrorStdOut'
condition: selection
falsepositives:
- Legitimate AutoIt v3 compiled scripts in enterprise environments (rare)
level: high
IOC List
| Indicator | Value | Type |
|---|---|---|
| SHA-256 | d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07 |
Hash |
| SHA-1 (unpacked UPX1) | e2fe3f69340ef139d871e13e10e45560573142cc |
Hash |
| MD5 (unpacked UPX1) | 06a7b088662dd427a4f3d75f49969eef |
Hash |
| SHA-256 (.rsrc) | d30d9745ead80129127195701505c4096196ca557d0e22917520daf060ebd853 |
Hash |
| Filename | AUG_SOA.exe |
Filename |
| Mutex | Unknown (script-resolved) | Mutex |
| Registry | Software\\AutoIt v3\\AutoIt |
Registry path (runtime config) |
| C2 | Unknown (script-resolved, requires dynamic detonation) | Network |
Behavioral Fingerprint Statement
This binary is an AutoIt v3 single-file compiled PE (AutoItSC) that unpacks from a UPX-compressed 3-section shell into a 5-section PE32 with an 802 KB encrypted compiled script stored as RT_RCDATA in .rsrc. The runtime imports 300+ APIs across 16 DLLs including full WinInet/WinSock HTTP-FTP-raw-socket surfaces, clipboard read/write, GDI screenshot primitives, process memory manipulation (VirtualAllocEx/WriteProcessMemory/CreateProcessW), token privilege escalation, and ICMP host reconnaissance. The embedded script logic is opaque; actual C2 endpoints, persistence mechanisms, and payload behaviors are resolved at runtime by the AutoIt interpreter. The sample masquerades as a business document (AUG_SOA.exe — August Statement of Account) and carries empty VS_VERSIONINFO as an anti-triage measure.
Detection Signatures
| ATT&CK ID | Technique Name | Evidence |
|---|---|---|
| T1059.005 | Command and Scripting Interpreter: Visual Basic / AutoIt | Compiled AutoIt script executed by embedded interpreter^[unpacked_strings.txt] |
| T1071.001 | Web Protocols | WinInet HTTP/FTP client APIs imported^[r2:ii] |
| T1095 | Non-Application Layer Protocol | WinSock raw TCP/UDP/socket APIs imported^[r2:ii] |
| T1547.001 | Registry Run Keys | ADVAPI32 RegSetValueExW/RegOpenKeyExW/RegCreateKeyExW imported^[r2:ii] |
| T1053.005 | Scheduled Task | AutoIt runtime supports Run and COM-based task scheduling^[unclassified-autoit-compiled entity] |
| T1083 | File and Directory Discovery | FindFirstFileW/FindNextFileW/FindFirstFileExW imported^[r2:ii] |
| T1057 | Process Discovery | CreateToolhelp32Snapshot/Process32FirstW/Process32NextW imported^[r2:ii] |
| T1012 | Query Registry | RegQueryValueExW/RegEnumValueW/RegEnumKeyExW imported^[r2:ii] |
| T1113 | Screen Capture | GetDC/GetWindowDC + GDI bitmap APIs imported^[r2:ii] |
| T1115 | Clipboard Data | OpenClipboard/GetClipboardData/SetClipboardData/EmptyClipboard imported^[r2:ii] |
| T1056.001 | Keylogging | GetAsyncKeyState imported^[r2:ii] |
| T1562.001 | Impair Defenses: Debugger Evasion | IsDebuggerPresent imported^[r2:ii] |
| T1497.001 | Virtualization/Sandbox Evasion | Token/privilege APIs + environment-variable APIs available to script^[r2:ii] |
| T1218.011 | System Binary Proxy Execution | ShellExecuteW/ShellExecuteExW imported^[r2:ii] |
| T1021.002 | Remote Services: SMB/Windows Admin Shares | MPR WNetUseConnectionW/WNetAddConnection2W imported^[r2:ii] |
References
- unclassified-autoit-compiled — Cluster entity page (17 prior siblings)
- autoit-compiled-script-dropper — Concept page for AutoIt deployment patterns
- MalwareBazaar: https://bazaar.abuse.ch/sample/d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07/
- AutoIt v3: https://www.autoitscript.com/
Provenance
- Original sample:
<sample d86e0912502e.bin>(UPX-packed, 1,211,904 bytes) - Unpacked sample:
/tmp/d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07_unpacked.bin(UPX 4.2.2, 1,717,760 bytes) - Script payload:
/tmp/d86e0912502ef1c49a35151275b7473ccd62d6e49fa14ad02cdc817b60499a07_script.bin(802,298 bytes, RT_RCDATA) - Tools:
file(file type),pefile(PE headers/resources),rabin2(r2 binary info),r2(disassembly, imports, strings),upx -d(unpacking),strings(string extraction), Pythonpefilelibrary (resource enumeration) - Capa: Packed-sample limitation warning — no capability rules matched statically.^[capa.txt]
- Floss: Failed (argument parsing error on triage run, timeout on retry).
- CAPE: Skipped — no Windows guest available.^[dynamic-analysis.md]