Pipeline Stage 4
SIGNATURE_TYPE_AAGGREGATOR @ 0x10986B3C — SIGNATURE_TYPE_AAGGREGATOREX @ 0x10986E28
Attributes are string-valued facts accumulated into a HashSet<String> on the ScanContext throughout the entire pipeline.
Stage 4 is not a single step — it is a continuous process that runs across all stages. Every engine deposits attributes as it fires. The attribute set only grows; it is never cleared during a file scan.
At the end (Stage 11), the AAGGREGATOR evaluates boolean expressions over the complete attribute set to produce compound detections.
Every major scan stage deposits attributes into the shared set
HSTR:Win32/xxx | KCRCE, NID, BM_STATIC → pattern attributes
pea_* attributes: pea_packed, pea_isdll, pea_epscn_writable, ...
FOP:xxx opcode traces | TUNNEL:xxx patterns | THREAD:xxx behavior
BRUTE:PDF:Feature:xxx polymorphic pattern attributes
mp.set_mpattribute() / mp.set_mpattributeex() — arbitrary named attributes
!-prefixed threat names: collected as attributes, never standalone detections
Structural properties extracted from PE header analysis, before emulation begins
Threat names starting with ! are deposited as attributes but never returned as detections
Infrastructure markers let Defender build compound detections that require evidence from multiple engines.
A single !-prefixed match is never enough for a detection. It must be combined with other attributes via AAGGREGATOR boolean expressions.
Separate attribute namespaces for each binary format
Chronological record of attribute deposit events — head (first N) and tail (last N)
59,415 Lua scripts can read and write attributes via the mp.* API
From engine deposits to AAGGREGATOR evaluation
Attributes are serialized for internal logging and MAPS cloud queries
All data from reverse engineering mpengine.dll v1.1.24120.x