typeanalysisfamilyblackmatterconfidencemediumcreated2026-08-27updated2026-08-27pemalware-familyloaderanti-vmanti-debugevasioncode-injectionc2obfuscation
SHA-256: 877f1047825cb5b73a4812279ac15e8987290c99a5d3a99473a9ec85066fabd6

blackmatter: 877f1047 — 16th sibling, .text hash divergent, dropped-by-phorpiex (no blackmatter label)

Executive Summary

Sixteenth confirmed sibling in the MSVC 14.12 PE32 reflective-loader cluster. This sample shares the identical compilation timestamp (0x631A9665), linker version (14.12), section layout, XOR-NOT string cipher (0x10035fff), PEB-walking API resolution, CPUID anti-VM gate, and LCG PRNG (0x19660d/0x3c6ef35f) with the fifteen prior siblings. Its .text hash (000a9a8b...) differs from the ae02bd22/21b12514/7e9bbc5c triplet, indicating a stub-variant branch or per-campaign recompilation. The payload-bearing .data and .pdata sections are individually hashed, confirming per-sample customization. Carries the dropped-by-phorpiex OpenCTI tag but no blackmatter label — consistent with the ae02bd22/7e9bbc5c pattern of phorpiex-only tagging. Static-only; CAPE skipped. See blackmatter entity page for the full cluster fingerprint.

What It Is

Field Value
SHA-256 877f1047825cb5b73a4812279ac15e8987290c99a5d3a99473a9ec85066fabd6
Size 149,504 bytes (150 KB) ^[file.txt]
Type PE32 executable (GUI) Intel 80386, 6 sections ^[file.txt]
Compiler MSVC 14.12 (LinkerVersion 14.12) — Visual Studio 2017 15.5+ ^[pefile.txt:18] ^[exiftool.json:18]
Timestamp 0x631A9665 — Fri Sep 9 01:27:01 2022 UTC ^[pefile.txt:34]
Debug POGO (IMAGE_DEBUG_TYPE_POGO, size 0xF4) ^[pefile.txt:313]
ASLR / DEP Enabled (DYNAMIC_BASE, NX_COMPAT) ^[pefile.txt:68]
Canary Enabled (canary: true) ^[rabin2-info.txt:6]
Signed Unsigned ^[rabin2-info.txt:27]
Overlay None ^[rabin2-info.txt:23]
Static imports Minimal facade: GDI32 (6), USER32 (11), KERNEL32 (8) — all GUI housekeeping ^[pefile.txt:249]
YARA Generic PE_File_Generic only; no family-specific hits ^[yara.txt]
PE Checksum 0x31DEB — unique to this sample (not seen in prior 15 siblings) ^[pefile.txt:65]
ssdeep 3072:i6glyuxE4GsUPnliByocWepfCZBa2ijf6z:i6gDBGpvEByocWesBGjS ^[ssdeep.txt]
TLSH 59E35C21F212D0B3C43718F13736B572B3DE4E6C2A996817DAD80F99BCA48232F55697 ^[tlsh.txt]

Section Hash Delta (per-sample customization)

Section SHA-256 (this sample) Notes
.text 000a9a8b1440e44cde00fd7acc5bdda6efc34f09e404de77cff1f5298e0af369 Divergent from ae02bd22/21b12514/7e9bbc5c triplet ^[pefile.txt:95]
.itext 38f20ce7e2c9381f3a07f666269d4f509565f5aa40d19aa383a8afd583bf60c2 Ephemeral stub; low entropy (2.93) ^[pefile.txt:115]
.rdata ce47d70dffec241b1a8e768bc48eb91352a2275202b52ec299995bdee67a426a Relatively low entropy (3.54) ^[pefile.txt:135]
.data 666a411dd2477f144d42f147e3c71404637466b48903ce0e94a8e54dab2d3bcc Near-max entropy (7.99) — individualized encrypted payload ^[pefile.txt:155]
.pdata 21e9ffe1e8fa9cee4c694813beae090307ebb166383bc1ed9f1a43f6b4e5353a High entropy (7.33) — individualized exception metadata ^[pefile.txt:175]
.reloc 7b8a35469d264f92e4d13f7537e5ee98d40b2776426c0ad90298326533ad9e5e Standard relocation data ^[pefile.txt:195]

The .text divergence is the only structural difference from the stub template shared by siblings ae02bd22, 21b12514, and 7e9bbc5c. Whether this reflects a different compiler optimization tier, a code-path variant (e.g., alternate anti-VM branch), or a recompiled stub from the same builder source is undetermined from static analysis alone.

How It Works

Shared behavior is identical to the cluster template. See the primary analysis for 136b5750 and the blackmatter entity page for the full walkthrough of:

  • PEB-walking API resolution (InMemoryOrderModuleList → export hash → .data slot cache) ^[peb-walking-api-resolution]
  • XOR-NOT string decryption (0x10035fff key) and base-62 alphabet table generation
  • CPUID hypervisor-bit anti-VM gate + RDTSC rotate-13 timing check
  • LCG PRNG (0x19660d/0x3c6ef35f) for C2 URL / User-Agent / sleep jitter generation
  • Reflective PE loader (VirtualAlloc → write → VirtualProtect → thread resume)
  • File-system enumeration (FindFirstFile "*" wildcard) and directory traversal
  • HTTP POST C2 with encrypted body via WinInet-style indirect APIs

Deltas Specific to 877f1047

  1. No blackmatter OpenCTI label: Unlike siblings 9d8526b0, 136b5750, 0b525c35, 370415c8, c527ebf0, d715b248, dc870a75, 73841818, 0017ecc5, 34ca794e, a2dca6ef, cdc7d79a, this sample carries only dropped-by-phorpiex, exe, and malware-bazaar. The blackmatter tag appears to have been applied inconsistently by the upstream connector. ^[metadata.json] ^[triage.json]

  2. Floss / capa both failed: floss.txt shows a CLI argument-order error (--no misinterpreted the sample path as a choice); capa.txt failed because the signature database is missing on the analysis host. No behavioral capability mapping is available for this sample. ^[floss.txt] ^[capa.txt]

  3. .text hash mismatch: Confirms the stub is not byte-identical to the ae02bd22/21b12514/7e9bbc5c group. The difference is small enough that the entry-point orchestrator (0x417034) and all anti-analysis / API-resolution / C2 functions remain structurally identical in radare2; the divergence may be in compiler padding, relocation targets, or a minor code-path tweak. ^[r2:fcn.00417034]

Decompiled Behavior

Address Role Key Observations
0x41946f Entry point Jumps immediately to .itext stub 0x419479 → 0x417034 (orchestrator) ^[r2:fcn.0041946f]
0x417034 Main orchestrator Identical to sibling template: PEB-walk, thread creation, flag-gated execution flow ^[r2:fcn.00417034]
0x4010bc Anti-debug/VM gate CPUID leaf 1 ECX[31] + leaf 7 EBX[18] + RDTSC rotate-13 timing ^[r2:fcn.004010bc]
0x40110c LCG PRNG Multiplier 0x19660d, increment 0x3c6ef35f, mask 0x7ffffff ^[r2:fcn.0040110c]
0x401240 Decrypt stub XOR 0x10035fff then NOT; 147+ call sites ^[r2:fcn.00401240]
0x406668 Reflective mapper VirtualAlloc via slot 0x4254e4, section mapping, 0x42552c/0x425544 writes ^[r2:fcn.00406668]
0x407468 File enumerator FindFirstFile style enumeration with wildcard "*" ^[r2:fcn.00407468]
0x40782c C2 comms InternetOpen, handle allocation, HTTP POST body assembly ^[r2:fcn.0040782c]
0x40cfcc HTTP POST builder Decrypts "POST" wide, assembles encrypted body, calls 0x425814 ^[r2:fcn.0040cfcc]
0x40d4b0 Alphabet builder Decrypts 16-DWORD array into A-Z a-z 0-9 lookup table ^[r2:fcn.0040d4b0]

All function addresses, slot assignments, and constants match the cluster template. No new functions were identified.

C2 Infrastructure

No hard-coded C2 endpoints survive. C2 domain, path, and User-Agent are generated at runtime via the LCG PRNG + base-62 alphabet table, identical to the cluster template. Static inference only — CAPE skipped. ^[dynamic-analysis.md]

Interesting Tidbits

  • OpenCTI label inconsistency: The absence of the blackmatter tag on this sample (while present on 12 of 15 prior siblings) suggests either connector-side label drift, or the blackmatter tag was added retroactively to older samples and not applied to newer fetches. The dropped-by-phorpiex tag is the only stable delivery indicator. ^[metadata.json]
  • Floss CLI failure: The triage script passed the sample path as a positional argument to --no, causing a usage error. This is a pipeline bug, not a sample property, but it means no decoded strings were extracted for this sibling. ^[floss.txt]
  • Capa signature database missing: The capa.txt failure (default signature path doesn't exist) is a host-side configuration issue. No capability map was generated. This is a known recurring issue on the analysis VM. ^[capa.txt]
  • POGO debug metadata still present: Even after 16 siblings, every sample retains the IMAGE_DEBUG_TYPE_POGO directory (size 0xF4). This is a strong builder fingerprint — the pipeline that produces these stubs does not strip debug directories. ^[pefile.txt:313]
  • .data entropy 7.987: Consistently near-maximum across all siblings, confirming the builder encrypts the payload with high-entropy cipher output (or compressed-then-encrypted). The .data SHA-256 is unique per sample, confirming individualized keys or per-sample payload content. ^[pefile.txt:152]

How To Mess With It (Homelab Replication)

See the primary analysis for 136b5750 (raw/analyses/136b5750.../report.md) and the blackmatter entity page. The stub replication steps are identical. The per-sample delta is limited to the .data payload — any encrypted PE, shellcode, or config blob injected into the template will produce a unique .data hash and PE checksum while preserving the stub fingerprint.

Deployable Signatures

YARA Rule (adapted for this sibling)

rule blackmatter_cluster_877f1047_pe32_pogo_reflection
{
    meta:
        description = "MSVC 14.12 PE32 reflective loader with PEB-walking, XOR-NOT cipher, POGO debug, and LCG PRNG — 16th confirmed sibling"
        author = "PacketPursuit"
        date = "2026-08-27"
        sha256 = "877f1047825cb5b73a4812279ac15e8987290c99a5d3a99473a9ec85066fabd6"
        cluster = "blackmatter-unattributed-msvc1412-loader"
    strings:
        $xor_not_key = { 3D FF 5F 03 10 }           // cmp eax, 0x10035fff
        $xor_not_op = { 81 31 FF 5F 03 10 }         // xor dword ptr [ecx], 0x10035fff
        $lcg_mul = { 0D 66 19 00 00 }               // 0x19660d
        $lcg_inc = { 35 3C EF C6 03 }               // 0x3c6ef35f
        $lcg_mask = { 25 FF FF FF 07 }              // and eax, 0x7ffffff
        $alphabet_1 = { 41 BB BF EA }               // encrypted "ABCD"
        $alphabet_2 = { 45 E6 BB A7 }               // encrypted "EFGH"
        $alphabet_3 = { 49 EA B7 A3 }               // encrypted "IJKL"
        $post_wide = { 50 A0 B3 EF 53 A0 A8 EF 00 A0 FC EF }  // encrypted "POST" wide fragments
        $pogo_debug = { 0D 00 00 00 F4 00 00 00 }   // IMAGE_DEBUG_TYPE_POGO, size 0xF4
    condition:
        uint16(0) == 0x5A4D and
        uint32(uint32(0x3C) + 0x18) == 0x10B and   // PE32
        uint16(uint32(0x3C) + 0x14) == 0x00E0 and  // Optional header size (standard)
        uint16(uint32(0x3C) + 0x16) == 0x0006 and   // 6 sections
        3 of ($xor_not_*) and
        2 of ($lcg_*) and
        2 of ($alphabet_*) and
        $post_wide and
        $pogo_debug
}

Behavioral Fingerprint

This binary loads with a six-section PE32 GUI facade: only GDI32, USER32, and KERNEL32 GUI functions are imported statically. Within the first 5 seconds of execution it walks the PEB InMemoryOrderModuleList to resolve VirtualAlloc, CreateThread, InternetOpen, and cryptographic APIs by export hash, caching pointers in the .data pseudo-import table near 0x425000. It allocates RWX memory, copies a decrypted payload into it, and spawns two threads: one recursively enumerating the file system (FindFirstFile "*"), the other building an HTTP POST request with an encrypted body. The C2 domain and User-Agent are generated at runtime using a seeded LCG PRNG and a base-62 alphabet table. If executed inside a VM, CPUID leaf 1 ECX[31] or leaf 7 EBX[18] hypervisor bits cause altered code paths. The binary carries a POGO debug directory (IMAGE_DEBUG_TYPE_POGO, size 0xF4) and a compilation timestamp of 0x631A9665 (Sep 9 2022). PE checksums vary per sample; .data and .pdata section hashes are unique per sample. The .text hash may match the ae02bd22/21b12514/7e9bbc5c group or diverge as seen in 877f1047.

IOCs

Indicator Value Notes
SHA-256 877f1047825cb5b73a4812279ac15e8987290c99a5d3a99473a9ec85066fabd6 This sample
SHA-1 5d12d573caddd78d39ef56deaf9afe44636ae19b .text section only (divergent stub)
MD5 (full) 991090a0e1f6d5368522abda010b3fba .data section (individualized)
Compilation Sep 9 2022 01:27:01 UTC Timestamp 0x631A9665 (shared across all 16 siblings)
Linker 14.12 VS 2017 15.5+
TLSH 59E35C21F212D0B3C43718F13736B572B3DE4E6C2A996817DAD80F99BCA48232F55697 Per-sample
XOR Key 0x10035fff String + pointer encryption (shared across cluster)
LCG multiplier 0x19660d PRNG constant (shared across cluster)
LCG increment 0x3c6ef35f PRNG constant (shared across cluster)
Anti-VM CPUID leaf 1 ECX[31], leaf 7 EBX[18], RDTSC rotate-13 Static detection targets
Pseudo-import region 0x425000–0x425fff (.data VA) Decrypted at runtime
OpenCTI labels dropped-by-phorpiex, exe, malware-bazaar No blackmatter label on this sample

Detection Signatures

ATT&CK Technique Implementation
T1055 — Process Injection Reflective PE loader: VirtualAlloc → write → VirtualProtect → thread creation ^[r2:fcn.00406668]
T1071.001 — Application Layer Protocol: Web Protocols HTTP POST C2 with encrypted body; WinInet API resolution ^[r2:fcn.0040cfcc]
T1027 — Obfuscated Files or Information XOR-NOT encrypted strings, base-62 alphabet encoding, runtime C2 URL generation ^[r2:fcn.00401240] ^[r2:fcn.0040d4b0]
T1497.001 — Virtualization/Sandbox Evasion: System Checks CPUID hypervisor-bit checks (leaf 1 ECX[31], leaf 7 EBX[18]) ^[r2:fcn.004010bc]
T1497.002 — Virtualization/Sandbox Evasion: User Activity Based RDTSC differential timing gate ^[r2:fcn.004010bc]
T1083 — File and Directory Discovery Recursive "*" enumeration via FindFirstFile / FindNextFile ^[r2:fcn.00407468]
T1573.001 — Encrypted Channel: Symmetric Cryptography CryptEncrypt / CryptDecrypt for C2 payload body ^[r2:fcn.0040782c]
T1105 — Ingress Tool Transfer Downloader / payload retrieval via HTTP POST response handling ^[r2:fcn.0040782c]

References

  • OpenCTI artifact: 7b34167d-f74c-42d1-99a9-8f1203daeac1, labels: dropped-by-phorpiex, exe, malware-bazaar ^[metadata.json]
  • Cluster entity page: blackmatter — full cluster analysis, build pattern, and all 16 sibling entries
  • Primary unattributed analysis: 136b5750 — first deep-dive on this stub template
  • Technique page: peb-walking-api-resolution
  • Delivery infrastructure: phorpiex

Provenance

Analysis produced from static triage inputs (file.txt, pefile.txt, exiftool.json, metadata.json, rabin2-info.txt, yara.txt, ssdeep.txt, tlsh.txt) and radare2 decompilation (analysis level 3) of the binary at <sample 877f1047825c.bin>. Floss failed due to CLI argument-order error (--no misinterpreted). Capa failed due to missing signature database on the analysis host. CAPE dynamic analysis skipped — no Windows guest available. All behavioral claims are statically inferred and reference the 136b5750 primary analysis and the blackmatter cluster entity page for shared behavior. ^[/intel/analyses/877f1047825cb5b73a4812279ac15e8987290c99a5d3a99473a9ec85066fabd6.html]