d59dc2f22167b0a44bf103d664842112981d4b3dbe62f7a27e671cddbbac9d73asgardprotector: d59dc2f2 — IExpress SFX dropper embedding AutoIt3 + compiled A3X script
Executive Summary
Microsoft Cabinet self-extractor (iexpress-sfx-dropper) repurposed as a silent dropper. Extracts AutoIt3.exe and a compiled .a3x script (Terminals.a3x) to a temp directory, then launches the script via the AutoIt interpreter — an autoit-compiled-script-dropper pattern. No CAPE detonation available; payload behavior is opaque statically. A sibling sample (d364a2f6, StatingConnectors.exe) uses the same build pattern with Dayton.a3x. The outer SFX carries a fabricated PE timestamp (2085).
What It Is
- File:
SomaliaCruises.exe, PE32+ x86-64, 1.87 MB.^[file.txt] - Build: MSVC 14.30 (VS 2022), linker version 14.30, compiled timestamp
2085:08:19(fabricated).^[exiftool.json:15]^[pefile.txt:34] - Signature: Unsigned — the certificate directory is empty.^[pefile.txt:211] The original
wextract.exeis Microsoft-signed, but this copy has been modified/repacked. - PDB:
wextract.pdb, GUID94098867-5fc9-b268-c53c-be826110dd1e.^[rabin2-info.txt:13] - Embedded archive: Microsoft Cabinet at offset
0x688BC(428,220), 1,484,468 bytes, containing 2 files.^[binwalk.txt:5] - Payload:
AutoIt3.exe(1,107,552 bytes, PE32+ x86-64, AutoIt Consulting Ltd) andTerminals.a3x(1,018,943 bytes, compiled AutoIt script). Extracted via 7z from the CAB.
How It Works
The outer binary is wextract.exe, the IExpress CAB self-extractor shipped with Windows. Its standard behavior:
- Extracts the embedded CAB to a temporary directory (
%TEMP%\msdownld.tmpor similar).^[strings.txt:100] - Reads the
RUNPROGRAMdirective from the SED (Self-Extraction Directive) stored in the.rsrcsection.^[strings.txt:91] - Executes the post-extraction command.^[strings.txt:92]
In this sample, the RUNPROGRAM directive resolves to "AutoIt3.exe" Terminals.a3x at runtime.^[strings.txt:2954] The SFX also contains POSTRUNPROGRAM cleanup logic to delete extracted files after execution.^[strings.txt:92]
The .rsrc section (1.8 MB, entropy 7.44) holds the CAB archive plus an AVI spinner animation (resource ID 0xBB9).^[pefile.txt:159-175] The resource directory timestamp 0x64C97D89 (2023-08-01) differs from the PE header timestamp 0xD97FD45F (2085), confirming the SFX was repacked after original compilation.^[pefile.txt:535]
Decompiled Behavior
Ghidra analysis confirms the binary is unmodified wextract.exe entry logic:
- Entry at
0x140001150->__security_init_cookie->__mainCRTStartup.^[ghidra:entry-140001150] RunInstallCommand(0x14000721c) reads the SED directives (RUNPROGRAM,POSTRUNPROGRAM,REBOOT,SHOWWINDOW) from the.rsrcsection and executes the target command viaCreateProcess-like logic.^[ghidra:RunInstallCommand-14000721c]GetTempDirectory(0x14000521c) creates%TEMP%\msdownld.tmp, validates disk space, and sets extraction path.^[ghidra:GetTempDirectory-14000521c]- No anti-debug, anti-VM, or encryption in the outer SFX — it is a stock Microsoft tool with modified resources.
The malicious logic lives entirely inside the compiled Terminals.a3x, which is opaque without an AutoIt decompiler or dynamic execution.
C2 Infrastructure
None observable from static analysis. The compiled .a3x script is the only potential C2-bearing component, and it resists static string extraction. Floss failed on the outer binary (argument error).^[floss.txt] The AutoIt script is not a PE and was not analyzed by capa.^[capa.txt]
Interesting Tidbits
- Filename bait:
SomaliaCruises.exe— travel/tourism themed social-engineering lure. - Future-dated timestamp: PE header claims 2085 compilation, a common artifact of manual PE editing or IExpress repacking tools.
- Sibling pattern:
d364a2f6(StatingConnectors.exe) is anotherasgardprotectorsample with the samewextract.pdb+AutoIt3.exe+.a3xstructure, usingDayton.a3xinstead.^[sample d364a2f6/strings.txt] - Another SFX sibling:
87a158f2(unclassified family) uses the same IExpress+AutoIt3 pattern withEaster.a3x, suggesting a broader cluster or builder tool.^[sample 87a158f2/strings.txt] - Floss failure:
floss.txtcontains only the CLI help text — the tool was invoked with a malformed--noargument, producing no string output.^[floss.txt] This is a pipeline bug, not a sample property.
How To Mess With It (Homelab Replication)
Reproducing an IExpress SFX dropper:
- Install IExpress (
iexpress.exeis built into Windows). - Create a SED file specifying:
AppLaunched="AutoIt3.exe" payload.a3xPostInstallCmd=<None>TargetName=output.exe
- Place
AutoIt3.exeandpayload.a3xin the source files list. - Build. The resulting
output.exeis a legitimate Microsoft-signed SFX (if you don't modify it post-build) that extracts and runs your payload.
To go malicious (like this sample):
- Repack the SFX after build with a resource editor to strip the Microsoft signature and embed a larger CAB. Or use a third-party IExpress repacker.
- Modify the PE timestamp to a future date.
- Use a benign-sounding filename.
Verification step: binwalk output.exe should show Microsoft Cabinet archive data at a non-zero offset, and strings should reveal AutoIt3.exe and your .a3x name.
What you'll learn: How easily a native Windows binary can be repurposed into a dropper without writing a single line of C code, and why filename-based detection is weak against this pattern.
Deployable Signatures
YARA rule
rule AsgardProtector_IExpress_AutoIt_Dropper {
meta:
description = "IExpress/Wextract SFX embedding AutoIt3.exe and .a3x script"
author = "PacketPursuit"
date = "2026-05-27"
hash = "d59dc2f22167b0a44bf103d664842112981d4b3dbe62f7a27e671cddbbac9d73"
strings:
$wextract_pdb = "wextract.pdb" ascii
$autoit3 = "AutoIt3.exe" ascii wide
$a3x_ext = /\.a3x/ ascii wide
$runprogram = "RUNPROGRAM" ascii
$postrun = "POSTRUNPROGRAM" ascii
condition:
uint16(0) == 0x5A4D and
$wextract_pdb and
$autoit3 and
$a3x_ext and
($runprogram or $postrun)
}
Sigma rule
title: IExpress SFX AutoIt Execution
status: experimental
description: Detects execution of IExpress self-extractor that drops and runs AutoIt3 with an .a3x script
logsource:
category: process_creation
product: windows
detection:
selection_main:
CommandLine|contains:
- 'AutoIt3.exe'
- '.a3x'
selection_parent:
ParentImage|endswith:
- '\wextract.exe'
- '\SomaliaCruises.exe'
- '\StatingConnectors.exe'
selection_temp:
CommandLine|contains:
- '\msdownld.tmp'
- '\IXP'
condition: selection_main and (selection_parent or selection_temp)
falsepositives:
- Legitimate IExpress installers that happen to include AutoIt (rare)
level: high
IOC list
| Indicator | Type | Notes |
|---|---|---|
d59dc2f22167b0a44bf103d664842112981d4b3dbe62f7a27e671cddbbac9d73 |
SHA-256 | Outer SFX |
5d69a932a077fee044b193c28e84564143f5c7e51079ab48e88fef74ab0b77b7 |
SHA-256 | AutoIt3.exe payload |
79d0909100aebf8fab15e0d925d7d1ae5cace5fa5c53ee9ac864944272c6a1df |
SHA-256 | Terminals.a3x compiled script |
SomaliaCruises.exe |
Filename | Social-engineering lure |
wextract.pdb |
PDB path | Outer SFX marker |
AutoIt3.exe + *.a3x |
File pair | Post-extraction execution |
%TEMP%\msdownld.tmp |
Directory | Extraction target |
rundll32.exe %sadvpack.dll,DelNodeRunDLL32 |
Cleanup command | Post-run cleanup |
Behavioral fingerprint
This binary is a PE32+ x64 Microsoft Cabinet self-extractor with a .rsrc section exceeding 1.8 MB and entropy >7.4. Upon execution, it writes AutoIt3.exe and a .a3x file to a temporary directory under %TEMP%, then launches the AutoIt interpreter with the compiled script as its argument. No network indicators are visible in the outer SFX; all malicious behavior is expected to reside in the compiled AutoIt script, which requires dynamic analysis or an AutoIt decompiler to inspect.
Detection Signatures
| ATT&CK Technique | Implementation | Evidence |
|---|---|---|
| T1204.002 (User Execution: Malicious File) | Double-click SFX lure | Filename SomaliaCruises.exe^[triage.json:5] |
| T1059.005 (Command and Scripting Interpreter: Visual Basic) | AutoIt3 script execution | AutoIt3.exe + Terminals.a3x^[strings.txt:2954] |
| T1071 (Application Layer Protocol) | Unknown — payload-dependent | Requires dynamic analysis of .a3x |
| T1027 (Obfuscated Files or Information) | Compiled AutoIt script (.a3x) | Terminals.a3x is opaque binary^[binwalk.txt] |
| T1574.002 (Hijack Execution Flow: DLL Side-Loading) | Not observed | N/A |
References
d59dc2f22167b0a44bf103d664842112981d4b3dbe62f7a27e671cddbbac9d73(this analysis)- asgardprotector — family entity page
- iexpress-sfx-dropper — concept page for the delivery mechanism
- autoit-compiled-script-dropper — concept page for the payload pattern
- Sibling:
d364a2f6997fd4874ba180207f6785151532c0fd3f014e36d44f330d50037191(StatingConnectors.exe,Dayton.a3x) - Cluster:
87a158f2dfdbc21bae4a72270df0e9e710434d7ae19d8b1ca206d26374a8a966(Easter.a3x, unclassified)
Provenance
- File type:
filev5.45.^[file.txt] - PE sections & headers:
pefilePython module.^[pefile.txt] - Strings:
stringsfrom binutils.^[strings.txt] - Floss: flare-floss v2.3.0 (failed due to CLI argument error).^[floss.txt]
- Capa: Mandiant capa v7 (installer limitation warning).^[capa.txt]
- Binwalk: binwalk v2.3.4.^[binwalk.txt]
- radare2: rabin2 v5.9.2.^[rabin2-info.txt]
- Ghidra: v12.1, decompiled entry and
RunInstallCommand/GetTempDirectory.^[ghidra:entry-140001150]^[ghidra:RunInstallCommand-14000721c]^[ghidra:GetTempDirectory-14000521c] - CAB extraction: 7z v23.01.
- No dynamic analysis available (CAPE skipped — no Windows guest).^[dynamic-analysis.md]