f74d8a51625a7a66a4bdd5f569221bc492f5f61d6828fe6f9546368a040a5461unclassified-dotnet-bitmap-stego-loader: f74d8a51 — 984 KB fleet-maintenance masquerade with SOAP/HTTP reference
Executive Summary
Third confirmed sibling in the .NET bitmap-stego loader cluster. PE32 GUI assembly (~984 KB) presenting as a fleet-maintenance application (NEW QUOTE.COM, version 20.3.49.113). Shares the cluster's hallmark of ~20 embedded 76×76 bitmap payloads, heavy randomized-name obfuscation, and reflective assembly loading flagged by capa. New delta: a SoapHttpClientProtocol reference and vehicle-maintenance GUI masquerade (OBD2 import, service records, report generation). No hardcoded C2 recovered statically; payload is ciphertext inside bitmaps. CAPE skipped — no Windows guest available.
What It Is
- SHA-256:
f74d8a51625a7a66a4bdd5f569221bc492f5f61d6828fe6f9546368a040a5461 - Size: 984 064 bytes (largest sibling in cluster; previous were ~575 KB and ~952 KB) ^[file.txt]
- Format: PE32 (GUI) Mono/.NET assembly, 3 sections, .NET Framework 4.6 target ^[pefile.txt]
- Compile stamp: Tue Mar 21 05:52:04 2023 UTC ^[pefile.txt]
- IAT: Minimal — only
mscoree.dll!_CorExeMain^[pefile.txt] - Version info:
20.3.49.113, internal nameNEW QUOTE.exe, company/product strings are obfuscated nonsense (?45H4GG8;G52:C8HBID3J3,GC=>GF5F9D?4976:5?:) ^[exiftool.json] - Family ascription: Sibling of unclassified-dotnet-bitmap-stego-loader cluster. Same bitmap count (~20), same name-mangling style, same capa fingerprint. Not a distinct family.
How It Works
Shared behavior is documented at unclassified-dotnet-bitmap-stego-loader; this section covers deltas only.
Masquerade depth: Unlike prior siblings (Purchase Order.exe, KKKKK.exe) which used generic invoice/game lures, this sample implements a full vehicle-fleet maintenance GUI with tabbed controls (TabControlMain), OBD2 data import (ButtonImportOBD2), service-record tracking (DataGridViewServiceHistory), report filtering (ComboBoxReportVehicle, DateTimePickerReportStartDate), and rich-text output (RichTextBoxReportOutput). ^[strings.txt:57-188] This level of functional GUI detail is unusual for a dropper and suggests either a repurposed legitimate application shell or extensive UI design to delay analyst suspicion.
SOAP/HTTP reference: A System.Web.Services.Protocols.SoapHttpClientProtocol string is present, implying the decrypted payload may communicate via SOAP-over-HTTP rather than raw TCP or MessagePack used by other .NET RAT families in this corpus. ^[strings.txt:50] No endpoint URL or WSDL recovered statically.
Bitmap payload carriers: binwalk identifies ~24 PC bitmap structures (76×76×24) beginning at offset 0x673FD, consistent with cluster pattern. ^[binwalk.txt] The .rsrc section contains System.Drawing.Bitmap type references repeated ~24 times. ^[strings.txt:2869-3427]
Resource extraction: System.Resources.ResourceReader and GetManifestResourceStream strings confirm runtime resource extraction. ^[strings.txt:2866] GetObjectValue and GetManifestResourceNames appear in the string table, supporting capa's "access .NET resource" capability. ^[capa.txt]
No decoded strings: floss was invoked with malformed arguments and produced no decoded output; the binary's strings are entirely obfuscated or encrypted. ^[floss.txt]
Decompiled Behavior
Radare2 analysis (level 2) recovered 1446 CIL functions. ^[r2:analysis] The export table is flooded with randomized alphanumeric identifiers typical of this cluster:
- Namespace:
4onTP5dkqg6B1w(main assembly) - Resource module:
4onTP5dkqg6B1w.My.Resources.3Fde_m7XYzy6 - Heavy
.ctorconstructor proliferation across obfuscated classes ^[r2:exports]
No human-readable method names recovered. The IL is further obfuscated with control-flow flattening (inferred from capa's "flattened IL dispatchers" on prior siblings). No P/Invoke imports or native API resolution strings are visible in the static view.
C2 Infrastructure
No IOCs recovered statically. The payload logic is ciphertext inside bitmap resources. The only network hint is the SoapHttpClientProtocol string, which implies SOAP-over-HTTP C2 once decrypted. No hardcoded domains, IPs, ports, or bot tokens present in strings. ^[strings.txt]
Interesting Tidbits
- Format-string artifact:
,Vehicle={Vehicle}, LastService={LastService}appears in strings — likely a databound report format string, confirming the GUI is functional enough to render bound data. ^[strings.txt:38] - SHA256 + PRNG: capa flags SHA256 hashing and .NET pseudo-random generation; these may be used for bitmap payload decryption key derivation or config blob decoding. ^[capa.txt]
- Anti-VM Xen strings: capa detects anti-VM references targeting Xen, consistent with prior siblings. ^[capa.txt]
- Reflective loading:
Assembly.Load,Invoke,add_AssemblyResolve, andRuntimeMethodHandlestrings support capa's T1620 hit. ^[capa.txt] ^[strings.txt:4894-5120] - Microsoft.VisualBasic.ApplicationServices: Presence of VB app-services strings alongside CIL suggests the binary may carry VB.NET runtime bloat or was partially compiled from VB. ^[strings.txt:5866]
How To Mess With It (Homelab Replication)
Toolchain: Visual Studio 2019+ targeting .NET Framework 4.6, C# or VB.NET WinForms project.
Recipe:
- Create a WinForms app with
TabControl,DataGridView,DateTimePicker,ComboBox, andRichTextBox— replicate the fleet-maintenance GUI. - Embed ~24
System.Drawing.Bitmapresources (76×76×24) in.rsrc. Encrypt a second-stage .NET assembly (e.g., a simple HTTP beacon) with AES-256-CBC and embed the ciphertext across the bitmap pixel arrays. - At runtime, load bitmaps via
GetManifestResourceStream, extract pixel bytes, decrypt with a hardcoded key or derive key via SHA256(salt + PRNG seed). - Load the decrypted assembly with
Assembly.Load(byte[])and invoke entry point viaMethodInfo.Invoke. - Obfuscate with a .NET obfuscator supporting name mangling and control-flow flattening (e.g., ConfuserEx, Dotfuscator, or custom).
Verification: Run capa on the reproducer. Expected hits: load .NET assembly, invoke .NET assembly method, access .NET resource, hash data using SHA256, generate random numbers in .NET, reference anti-VM strings targeting Xen.
What you'll learn: How commodity loaders use innocent-looking bitmap resources as encrypted payload carriers and how capa detects the resulting behavioral fingerprint even when static strings are gone.
Deployable Signatures
YARA Rule
rule dotnet_bitmap_stego_loader {
meta:
description = ".NET bitmap-stego loader cluster — embedded 76x76 bitmap payload carriers"
author = "pp-hermes"
date = "2026-06-11"
hash1 = "f74d8a51625a7a66a4bdd5f569221bc492f5f61d6828fe6f9546368a040a5461"
hash2 = "4bf14434ef61c6da79d3e5e4ea7831a4e5f0a2769cccdb41ddcc7ca0920e640a"
hash3 = "db0d6bc0d73b6e2cf8dedde102e67ab2ad6233c9ff93f29be39351c1580dec8f"
strings:
$bmp_type = "System.Drawing.Bitmap" wide ascii
$res_reader = "System.Resources.ResourceReader" wide ascii
$runtime_res = "System.Resources.RuntimeResourceSet" wide ascii
$manifest = "GetManifestResourceStream" wide ascii
$asm_load = "Assembly.Load" wide ascii
$invoke = "Invoke" wide ascii
$sha256 = "SHA256" wide ascii
$bitmap_magic = { 42 4D } // BM bitmap header
condition:
uint16(0) == 0x5A4D and
($bmp_type and $res_reader and $runtime_res) and
($manifest or $asm_load or $invoke) and
($sha256 or $bitmap_magic) and
filesize > 500KB and filesize < 2MB
}
Behavioral Hunt Query (Sigma-like pseudocode)
title: .NET Bitmap-Stego Loader Runtime Behavior
logsource:
category: process_creation
detection:
selection:
CommandLine|contains:
- 'NEW QUOTE.exe'
- 'NEW QUOTE.COM'
selection_resources:
Image|endswith: '.exe'
CommandLine|contains:
- 'System.Drawing.Bitmap'
- 'GetManifestResourceStream'
selection_load:
CommandLine|contains:
- 'Assembly.Load'
- 'Invoke'
condition: selection and (selection_resources or selection_load)
Note: Behavioral detection is best done via .NET runtime instrumentation (ETW/CLR MD) observing Assembly.Load(byte[]) followed by MethodInfo.Invoke within 5 seconds of process start, especially when preceded by System.Drawing.Bitmap resource enumeration.
IOC List
| Indicator | Value | Notes |
|---|---|---|
| SHA-256 | f74d8a51625a7a66a4bdd5f569221bc492f5f61d6828fe6f9546368a040a5461 |
This sample |
| MD5 | 1b19e09636d9f679cfb55730b3b45c3c |
^[capa.txt] |
| Filename | NEW QUOTE.COM |
Masquerade |
| InternalName | NEW QUOTE.exe |
^[exiftool.json] |
| Version | 20.3.49.113 |
^[exiftool.json] |
| ssdeep | 12288:h92Ao5rPhABUqtAxFNvJoUqTrXoqFrD86oKhmqfQzgETH9+GUGLUy04ikyRb8318:n2T51QUttJoprY4oyfJuz0Cy+31V8B |
^[ssdeep.txt] |
| Bitmap offset | 0x673FD |
First of ~24 bitmaps ^[binwalk.txt] |
Behavioral Fingerprint Statement
This binary is a .NET Framework GUI executable that loads ~24 embedded System.Drawing.Bitmap resources from its .rsrc section shortly after launch, extracts pixel-level data, decrypts a second-stage .NET assembly using SHA256-derived or PRNG-seeded key material, and loads it reflectively via Assembly.Load / MethodInfo.Invoke. The outer binary presents as a vehicle-fleet maintenance application with OBD2 import and report-generation features. Capa detects anti-VM Xen strings. No hardcoded C2 endpoints are visible statically; network communication is inferred to be SOAP-over-HTTP based on a single SoapHttpClientProtocol runtime reference.
Detection Signatures
| ATT&CK ID | Technique | Evidence |
|---|---|---|
| T1620 | Reflective Code Loading | Assembly.Load, Invoke, add_AssemblyResolve strings; capa confirms ^[capa.txt] ^[strings.txt:4894-5120] |
| T1497.001 | Virtualization/Sandbox Evasion::System Checks | Anti-VM Xen strings; capa confirms ^[capa.txt] |
| T1083 | File and Directory Discovery | File existence/extension checks; capa confirms ^[capa.txt] |
| T1036.002 | Masquerading | Fake version-info and functional fleet-maintenance GUI ^[exiftool.json] |
| T1573.001 | Encrypted Channel (inferred) | Payload is encrypted inside bitmaps; no plaintext C2 |
References
- unclassified-dotnet-bitmap-stego-loader — Cluster entity page (shared build/RE analysis)
- Prior sibling:
4bf14434(first observed, ~575 KB, version21.19.1.278) - Prior sibling:
db0d6bc0(May 2022,Purchase Order.exe, version24.11.37.197) - MITRE ATT&CK T1620: https://attack.mitre.org/techniques/T1620/
- MITRE ATT&CK T1497.001: https://attack.mitre.org/techniques/T1497/001/
- MITRE ATT&CK T1083: https://attack.mitre.org/techniques/T1083/
Provenance
file.txt,exiftool.json,pefile.txt,strings.txt,binwalk.txt,capa.txt,rabin2-info.txt,ssdeep.txt,tlsh.txt,yara.txt— generated by triage pipeline (tool versions unknown, standard distro packages)floss.txt— FireEye flare-floss invoked with incorrect arguments; no outputdynamic-analysis.md— CAPE skipped (no Windows guest available)- Radare2 analysis: level 2 (
aa+afva@@F+aac+aar+aaef), 1446 functions recovered