bd60fe2a6da189779fb4bab503be814e0bcb503f20aee28ea4e989b156d8f08dunclassified-dotnet: bd60fe2a — RFQ-themed .NET assembly bundling binary-tutorial game + SSH remote-wget tool + JS combiner
Executive Summary
A .NET Framework 4.0 PE32 x86 assembly distributed as RFQ_PETROFAC_PM-C-24-4400.exe (industrial RFQ social-engineering lure). Static analysis reveals no packing, no obfuscation, and no malicious payload. The assembly is a benign multi-project bundle containing a binary-tutorial educational game, an SSH-based remote file-transfer utility (RemoteWget), and a JavaScript file-combiner engine. Capa ATT&CK hits (T1620, T1059.001, T1083) are false positives from standard .NET runtime behaviour and legitimate application functionality. Threat is purely social-engineering masquerade. Static-only analysis — CAPE skipped due to no Windows guest.
What It Is
| Field | Value | Provenance |
|---|---|---|
| SHA-256 | bd60fe2a6da189779fb4bab503be814e0bcb503f20aee28ea4e989b156d8f08d |
^[triage.json] |
| Filename (lure) | RFQ_PETROFAC_PM-C-24-4400.exe |
^[metadata.json] |
| File type | PE32 executable (GUI) Intel 80386 Mono/.NET assembly, 3 sections | ^[file.txt] |
| Size | 917 504 bytes (≈ 896 KB) | ^[metadata.json] |
| Compilation timestamp | 2024-07-25 00:54:48 UTC | ^[exiftool.json] ^[pefile.txt:34] |
| .NET runtime | v4.0.30319 (.NET Framework 4.0) | ^[strings.txt:4] ^[pefile.txt:233] |
| COR20 flags | IL_ONLY | 32BITREQUIRED | ^[rabin2-info.txt] |
| Linker | 48.0 (IL linker / .NET Native toolchain signature) | ^[pefile.txt:46] |
| Internal name | OdOg.exe |
^[exiftool.json:40] |
| VS_VERSIONINFO | CompanyName: Toshiba, FileDescription: RemoteBinary, ProductName: Remote Binary, Comments: Practice Binary |
^[exiftool.json:36-44] ^[pefile.txt:233-243] |
| Authenticode | Unsigned (signed: false) |
^[rabin2-info.txt:27] |
| Import table | Single entry: mscoree.dll!_CorExeMain |
^[pefile.txt:255] |
| Entropy | .text: 7.97 (high, expected for compressed IL + embedded resources); .rsrc: 1.10 (low) |
^[pefile.txt:92,112] |
How It Works
Assembly Structure
The binary is an unobfuscated CIL assembly containing at least three distinct project namespaces merged into one PE:
-
BinaryTutorial — A WinForms educational binary-counting game with
practiceModeToolStripMenuItem,getNewRandomNumber,submitAnswer, and instructional text boxes. Embedded PNG resources (256×256, 584×584, 64×64 icons) are game UI elements. ^[strings.txt:16-35] ^[binwalk.txt:6-9] -
RemoteWget — An SSH-based remote file-transfer utility built on the open-source
Renci.SshNetlibrary. Exposes WinForms controls:textBoxServer,textBoxUserName,textBoxPassword,textBoxLocation(misspelledtextBoxCoomandin metadata), andtextBoxDisplay. ReferencesSshClient,SshCommand,PasswordAuthenticationMethod,RunCommand, andConnectionInfo. ^[strings.txt:69-77] ^[strings.txt:420-436] ^[strings.txt:348-350] -
JSCombiner.Engine / CombinerEngine — A JavaScript file-combiner / minifier with
ReferenceGraph,IncludePath,FilePattern,CrawlDirectory,CheckAndConvertDirectoryToFiles, andGrabAllReferencedmethods. ^[strings.txt:132] ^[strings.txt:196-222] ^[strings.txt:372-373]
Data-set classes
Typed DataSet / DataTable scaffolding (DataTable1, DataTable2) with auto-generated designer code (get_DataColumn1, ShouldSerializeDataTable1, etc.) suggests the binary was built from a Visual Studio WinForms project with dataset binding, typical of student coursework or rapid prototyping. ^[strings.txt:9-15]
Embedded Resources
.rsrcsection contains VS_VERSIONINFO (RT_VERSION, 0x350 bytes) and a standard UAC manifest (RT_MANIFEST, 0x1EA bytes,asInvoker). ^[pefile.txt:266-328]- Binwalk identifies four PNG images in the
.textoverlay: 256×256 RGBA, 584×584 RGBA, and two 64×64 RGB icons — all consistent with WinForms toolbar / application icons. ^[binwalk.txt] - No encrypted payload overlay, no manifest resource blob, no Base64 or XOR-encoded blocks detected.
Capa False-Positive Analysis
| Capa claim | Namespace | Assessment |
|---|---|---|
| Reflective Code Loading [T1620] | defense-evasion | False positive — standard Assembly.Load / JIT compilation triggered by any .NET EXE at startup. No reflective payload injection observed. |
| Command and Scripting Interpreter::PowerShell [T1059.001] | execution | False positive — run PowerShell expression derived from LateBinding / dynamic dispatch metadata, not from actual powershell.exe invocation or System.Management.Automation references. |
| File and Directory Discovery [T1083] | discovery | True but benign — JSCombiner.Engine.CrawlDirectory legitimately walks directories to resolve JS #include references. |
| reference analysis tools strings | anti-analysis | False positive — DebuggerNonUserCodeAttribute, DebuggableAttribute are standard Debug-build compiler artefacts. |
^[capa.txt]
Decompiled Behavior
No Ghidra decompilation was attempted — the binary is pure CIL; native x86 disassembly via radare2 yields only the _CorExeMain → mscoree trampoline. All threat logic would live in CIL bytecode inside the .text section. dnSpy or ILSpy would be the correct tools for method-level review; neither is installed on this host.
Radare2 analysis (level 2) discovered 295 functions and 165 symbols, but the CIL backend emits warnings (No SN reg alias for 'cil') and produces no actionable native-code decompilation. ^[rabin2-info.txt] ^[rabin2-analyze-log]
C2 Infrastructure
None recovered. No hardcoded IP addresses, domains, URLs, SMTP credentials, Telegram bot tokens, or cryptocurrency wallet addresses present in strings, #US metadata, or blob resources. The RemoteWget SSH client would require runtime-supplied server/user/password credentials; no defaults are embedded.
Interesting Tidbits
- Industrial RFQ lure specificity — The filename
RFQ_PETROFAC_PM-C-24-4400.exetargets Petrofac, an oilfield services contractor, with a project-code format (PM-C-24-4400) that would pass casual triage in an energy-sector SOC. ^[metadata.json] - Toshiba masquerade — VS_VERSIONINFO claims
CompanyName: Toshiba,LegalCopyright: Toshiba 133 2025,LegalTrademarks: Toshiba. The "133" is likely a garbled year or placeholder. ^[exiftool.json] - Internal-name typo —
OdOg.exe(capital O, lowercase d, capital O, lowercase g) may be an obfuscation attempt or simply a developer's test build name. ^[exiftool.json:40] - Misspelled controls —
textBoxCoomand(instead of "Command") appears in both #Strings and #US metadata, confirming this is the developer's actual spelling, not a post-build mutation. ^[strings.txt:71] - Spanish/Portuguese hints —
get_fabrica44,get_manivela2b,manivela2b(manivela= Portuguese/Spanish for "crank" or "lever") suggest Iberian/Latin-American developer origin.fabrica= factory. These are resource accessor names, not C2 identifiers. ^[strings.txt:28,45] - No anti-analysis — No
IsDebuggerPresent,CheckRemoteDebuggerPresent, WMI queries, CPUID checks, or sleep loops. No VM detection. No packed or encrypted sections.
How To Mess With It (Homelab Replication)
Toolchain: Visual Studio 2019/2022, .NET Framework 4.0 Target, C# WinForms App.
- Create a new WinForms project targeting
.NETFramework,Version=v4.0. - Add NuGet package
SSH.NET(Renci.SshNet) for the remote-wget utility. - Add a second WinForms project for the binary-tutorial game (buttons for 1/2/4/8/16/32/64/128, a
submitAnswerhandler, andRandomnumber generation). - Add a class-library project for
JSCombiner.EnginewithDirectory.GetFiles,Path.Combine, andStreamReader/StreamWriter. - Merge all three into a single assembly via ILMerge or by referencing them from a shell EXE.
- Set VS_VERSIONINFO to
CompanyName: Toshiba,ProductName: Remote Binary. - Compile in Debug configuration to reproduce the
DebuggableAttribute/DebuggerNonUserCodeAttributecapa hits.
Verification: Run capa against the output. Expect T1620 (reflective loading) and T1059.001 (PowerShell) false positives, plus T1083 (directory discovery) from the JS combiner. Compare capa fingerprint to this sample — the match confirms these are benign artefacts.
Deployable Signatures
YARA Rule
rule UnclassifiedDotNet_RFQ_BinaryTutorial_RemoteWget
{
meta:
description = ".NET Framework PE32 bundling BinaryTutorial + RemoteWget + JSCombiner; RFQ social-engineering lure"
author = "pp-hermes"
date = "2026-06-30"
sha256 = "bd60fe2a6da189779fb4bab503be814e0bcb503f20aee28ea4e989b156d8f08d"
family = "unclassified-dotnet"
strings:
$dotnet = ".NETFramework,Version=v4.0" ascii wide
$a1 = "BinaryTutorial" ascii wide
$a2 = "RemoteWget" ascii wide
$a3 = "JSCombiner.Engine" ascii wide
$a4 = "Renci.SshNet" ascii wide
$a5 = "binaryTutorialButton1_Click" ascii wide
$a6 = "textBoxCoomand" ascii wide
$a7 = "get_fabrica44" ascii wide
$a8 = "get_manivela2b" ascii wide
$toshiba = "Toshiba 133 2025" ascii wide
$odog = "OdOg.exe" ascii wide
condition:
uint16(0) == 0x5A4D and
$dotnet and
4 of ($a*) and
filesize < 1MB
}
Behavioral Fingerprint Statement
This .NET Framework 4.0 PE32 x86 executable loads via mscoree._CorExeMain, contains unobfuscated CIL bytecode with high .text section entropy (≈ 7.97), and embeds multiple WinForms PNG icon resources. At runtime it instantiates a BinaryTutorial game form, a RemoteWget SSH client form (using Renci.SshNet), and a JSCombiner.Engine directory crawler. No network connections are initiated without user-supplied SSH credentials. No persistence, no anti-analysis, no payload decryption. The threat is entirely in the social-engineering filename.
IOC List
| Indicator | Value | Type |
|---|---|---|
| SHA-256 | bd60fe2a6da189779fb4bab503be814e0bcb503f20aee28ea4e989b156d8f08d |
Hash |
| MD5 | 7d0b1a6891264c206f655ff9a2793daa |
Hash |
| SHA-1 | 8f22cd0166c3cabe644f91f945bf0f99740a1269 |
Hash |
| ssdeep | 24576:sc1VRQfMPIYZf4I1unSbnlc3F3J3yic50y2aAc:sWefMgYZQSnl4F3tV42j |
Fuzzy hash |
| Filename (lure) | RFQ_PETROFAC_PM-C-24-4400.exe |
Filename |
| Internal name | OdOg.exe |
Metadata |
| CompanyName | Toshiba |
Metadata |
| ProductName | Remote Binary |
Metadata |
| Comments | Practice Binary |
Metadata |
| Resource namespace | RemoteWget.Properties.Resources |
Resource |
| Resource namespace | BinaryTutorial.Form1.resources |
Resource |
Detection Signatures (capa → ATT&CK)
| Capa Capability | ATT&CK Mapping | Verdict |
|---|---|---|
| invoke .NET assembly method | T1620 Reflective Code Loading | False positive — standard JIT |
| run PowerShell expression | T1059.001 Command and Scripting Interpreter: PowerShell | False positive — LateBinding dispatch |
| enumerate files in .NET | T1083 File and Directory Discovery | True but benign — JS combiner |
| access .NET resource | — | True — embedded PNG icons |
| generate random numbers in .NET | — | True — game RNG |
| check if file exists | — | True — path validation |
References
- Sample source: OpenCTI / MalwareBazaar
- SHA-256:
bd60fe2a6da189779fb4bab503be814e0bcb503f20aee28ea4e989b156d8f08d - Related wiki page: unclassified-dotnet
Provenance
Analysis conducted on 2026-06-30 using:
filev5.45,exiftoolv12.76,pefile(Python),radare2v5.x CIL backend,capav7.x,binwalkv2.3.4,strings(GNU binutils), manual .NET metadata parsing viapefile+struct.- No CAPE dynamic analysis available (no Windows guest). All behaviour inferred from static metadata, strings, and capa output.