Cross-Cutting — On-Device Machine Learning
sigtree @ 0x109c80b0 • jit_emitter @ 0x100f226f • mpengine.dll
SIG_TREE is Windows Defender's on-device machine learning classification system. It implements a decision tree ensemble that evaluates boolean predicates over accumulated signature attributes (sigattr) to produce ML-based detections.
Unlike cloud-based ML (MAPS/SpyNet), SIG_TREE runs entirely locally using decision trees shipped in the VDM signature databases. This is a critical detection layer producing !MTB and !ml suffixed threat names.
SIG_TREE is NOT a separate pipeline stage. It runs as a supporting engine within the Static Engine Cascade (Stage 03) and during BM evaluation.
!MTB — Machine Learning / Tree-Based
!ml — Machine Learning classification
Trojan:Win32/Emotet.RPX!MTB
Trojan:Win32/AgentTesla!ml
From VDM signature database to ML detection verdict
Standard decision trees. Fixed 16-byte nodes. Node type marker 0x30. Evaluates PE and file attributes.
Extended trees with embedded inline strings (file paths, URLs). Variable-length nodes with 0x90 wildcard escapes.
Behavioral monitoring trees. Node type marker 0x40. UTF-16LE patterns for behavioral indicators.
5-byte TLV header + 16-byte fixed-length nodes, expanded to 32 bytes in memory
SIG_TREE_EXT entries contain embedded inline strings with wildcard patterns:
Binary decision tree with 6 node types — string table at 0x10987530
0x10987530 — Leaf: checks a specific sigattr feature
0x1098753c — Terminal: indicates a match result
0x1098754c — Predicate 1: first boolean child (true)
0x10987550 — Predicate 2: second boolean child (true)
0x10987558 — Negated Predicate 1 (false branch)
0x10987548 — Negated Predicate 2 (false branch)
0 = Null/empty (leaf/terminal)1 = Inline string data2 = Vector/buffer reference3 = Sub-tree reference (recursive)
Trees are NOT interpreted — they are JIT-compiled into executable MOV instruction buffers
0x100f226flfence at 0x1073fe5f before pointer dereference
The feature vector SIG_TREE evaluates over — circular head/tail log of boolean attributes
sigattr_head @ 0x1073dfe0 — Head log entries
sigattr_tail @ 0x1073acb0 — Tail log entries
this_sigattrlog @ 0x1008bc52 — Current log
sigattr_events_parser @ 0x10564d00 parses semicolon-delimited key=value strings:
SIG_TREE evaluates over features collected from multiple pipeline stages
BRUTE:PDF:Feature:* @ 0x10A54CC8BRUTE:VBS:Feature:* @ 0x10A54D08BRUTE:JS:Feature:* @ 0x10A54D1C
js_hasBigString, js_hasEval,js_hasBase64, js_hasNetworkCalls,js_hasObfuscatedNames, ...
peattributes= in result structuremp.setattribute()Weighted scoring over sigattr slots with priority-based detection selection
14 core functions from reverse engineering mpengine.dll
Decision tree ensemble evaluates boolean predicates over accumulated sigattr features. Produces !MTB and !ml suffixed detections entirely locally.
Trees are JIT-compiled to native x86 MOV instructions at 0x100f226f for maximum evaluation throughput. Not interpreted.
The sigattr circular log accumulates boolean features from Stages 3, 5, 8, 9, and 10 — giving trees a holistic view of the file.
A substantial portion of modern Defender detections are !MTB verdicts. Without SIG_TREE, many threats go undetected.
All addresses from RE of mpengine.dll v1.1.24120.x — 33,428 tree entries across 3 signature types