d065ebea634c65f1bc3e1b770d09f0364b87a74a631deca80f84f20561533898nanocore: d065ebea — VB.NET ConfuserEx sibling, NanoCore v1.2.2.0 RAT (hotro.exe)
Executive Summary
A 203 KB PE32 .NET assembly (hotro.exe) that is the third confirmed sibling in a NanoCore RAT client batch built on 22 Feb 2015. Same ConfuserEx obfuscation layer, same builder version (1.2.2.0), same modular plugin architecture, and same raw-TCP C2 pattern as fe81691f and 48c8e8a2. The only static deltas are the assembly GUID, the encrypted .rsrc payload, and the original filename. Static-only — CAPE Windows guest unavailable. ^[file.txt] ^[metadata.json]
What It Is
| Property | Value | Provenance |
|---|---|---|
| SHA-256 | d065ebea634c65f1bc3e1b770d09f0364b87a74a631deca80f84f20561533898 |
metadata.json |
| File name | hotro.exe |
metadata.json |
| Size | 207,872 bytes (203 KB) | metadata.json |
| Type | PE32 executable (GUI) Intel 80386 Mono/.Net assembly, 3 sections | file.txt |
| Timestamp | Sun Feb 22 00:49:37 2015 UTC | pefile.txt:34 |
| Linker | .NET Framework v2.0.50727 (CLR 2.0) | strings.txt:51 |
| Language | Visual Basic .NET (My.Application framework) | strings.txt:1613, strings.txt:1618 |
| RAT version | NanoCore Client 1.2.2.0 | strings.txt:1626 |
| Obfuscator | ConfuserEx (massive #=q… mangling, ~1,000+ instances) |
strings.txt:278+ |
| Signed | No (stripped, unsigned) | pefile.txt:153-154 |
| Assembly GUID | c3f8b4dc-1342-42c6-8a66-ffbfe5d193a0 |
strings.txt:1624 |
This sample is a sibling build from the same NanoCore builder batch as fe81691f and 48c8e8a2. The shared fingerprint (timestamp, size, section layout, version string, and mangled-name corpus) indicates all three were emitted by the same builder run or by the same operator re-running the builder with different settings. For the full family analysis see nanocore. ^[/intel/analyses/fe81691f199873bd5470c7beff9a52fdd6c1e03b80484e40b15ce040cde851b5.html]
How It Works
See the fe81691f deep-dive for the complete behavior narrative. The delta for this sample is minimal:
- Different GUID:
c3f8b4dc-1342-42c6-8a66-ffbfe5d193a0vsb4de0bbe-4fc1-4999-bc15-86136959e331(fe81691f) and6d372552-3ebe-40d9-9ac6-db2887e57715(48c8e8a2). This is the auto-generatedMy.ApplicationGUID produced by Visual Studio at compile time, confirming a separate build. ^[strings.txt:1624] - Different encrypted payload:
.rsrcsection SHA-256 is65eff1b1aa6507f3f92a4263ab11d6e611a8e8bcccaaea25ea0f13fd70773945— unique across all three siblings, meaning the ConfuserEx-encrypted resource package (likely the builder-generatedClientSettings+ plugin ZIP) is build-specific. ^[pefile.txt:132-136] - Filename:
hotro.exevsokfun.exeandjp.exe— suggests the builder allows custom output names or the operator renamed post-build. The name "hotro" is Vietnamese for "support" or "assist", a plausible masquerade for a help-desk or support-tool social-engineering lure.
All other behaviors — VB.NET My.Application bootstrap, hidden ClientLoaderForm, raw TCP C2 with host-cache updates (AddHostEntry, RebuildHostCache), registry Run persistence, pipe-based plugin IPC (CreatePipe, PipeExists, PipeClosed), and MD5 hashing — are identical to the siblings and documented at nanocore and confuserex-obfuscation.
Decompiled Behavior
Radare2 CIL analysis finds the same entry-point signature: ClientLoaderForm.Main at 0x40c480, with 858 methods and a single mscoree.dll!_CorExeMain import. ^[rabin2-info.txt] ^[r2:entry0] The CIL engine reports the same ConfuserEx control-flow flattening and delegate trampolines that block clean decompilation. No new functions of interest were surfaced beyond those already catalogued in fe81691f.
C2 Infrastructure
- Static C2: None extracted. The encrypted
.rsrcpayload differs from both siblings, so any embedded host list is unique to this build. ^[pefile.txt:132-136] - Protocol, persistence, and plugin IPC: Identical to
fe81691f. See nanocore for the full mapping.
Interesting Tidbits
- Third sibling confirms batch production: Three samples with the same compile-to-the-second timestamp, same size, and same version string strongly suggest they were produced by the same builder executable in rapid succession or by the same operator using the same builder package. ^[pefile.txt:34]
- Filename shift to Vietnamese:
hotro.exe("support"/"assist" in Vietnamese) is a sharper social-engineering hook than the earlierokfun.exeorjp.exe. Targeting Vietnamese-speaking users or masquerading as a local support tool. ^[metadata.json] - P/Invoke surface unchanged: The same native API imports are present —
SetThreadExecutionState,NtSetInformationProcess,QueryDosDevice,GetProcessImageFileName,RegOpenKeyEx,DnsQuery_A, and the standardkernel32.dll/advapi32.dll/ntdll.dlltriad. ^[strings.txt:1381-1396] - No new YARA hits: Still only
PE_File_Generic; the ConfuserEx layer defeats open-source NanoCore YARA rules. ^[yara.txt] - Builder version consistency: All three siblings stamp
1.2.2.0, an older build from the leaked-source era (~2014–2015). No evidence of post-leak fork modifications. ^[strings.txt:1626]
How To Mess With It (Homelab Replication)
See the replication notes in fe81691f. To reproduce this specific sibling:
- Use the same NanoCore builder (v1.2.2.0) to generate three clients with different
ClientSettingshost entries. - Pass all three through ConfuserEx v1.6.0 with identical settings (name obfuscation, control flow, resource encryption).
- Compare SHA-256s — they will differ only in
.rsrcand the auto-generatedMy.ApplicationGUID. - Rename outputs to
okfun.exe,jp.exe, andhotro.exeto match the observed cluster.
Deployable Signatures
YARA — NanoCore ConfuserEx Sibling Detector (v3)
rule nanocore_confuserex_sibling_batch_v3
{
meta:
description = "NanoCore RAT client ConfuserEx variant — sibling batch detector"
author = "triage-auto"
date = "2026-06-11"
sha256 = "d065ebea634c65f1bc3e1b770d09f0364b87a74a631deca80f84f20561533898"
strings:
$nano1 = "NanoCore Client" ascii wide
$nano2 = "NanoCore.ClientPlugin" ascii wide
$nano3 = "IClientApp" ascii wide
$nano4 = "ClientLoaderForm" ascii wide
$nano5 = "SendToServer" ascii wide
$nano6 = "AddHostEntry" ascii wide
$nano7 = "RebuildHostCache" ascii wide
$nano8 = "PluginUninstalling" ascii wide
$conf1 = /#=q[A-Za-z0-9_$]{20,}==/
$conf2 = /#=q[A-Za-z0-9_$]{20,}=.*=/
$vb1 = "MyTemplate" ascii wide
$vb2 = "My.MyProject.Forms" ascii wide
condition:
uint16(0) == 0x5A4D
and pe.number_of_sections == 3
and any of ($nano*)
and any of ($conf*)
and any of ($vb*)
and filesize < 500KB
}
Note: Syntactically tested by eye; deploy to your YARA sandbox before production. This rule also covers siblings fe81691f and 48c8e8a2.
Sigma — NanoCore Process Launch Hunt
title: NanoCore RAT Client Loader Execution
description: Detects NanoCore VB.NET client process based on module/interface strings and pipe creation.
logsource:
category: process_creation
product: windows
detection:
selection_strings:
CommandLine|contains|all:
- 'NanoCore'
- 'ClientLoaderForm'
selection_pipes:
CommandLine|contains:
- 'PipeCreated'
- 'PipeExists'
- 'CreatePipe'
selection_vb:
ImageLoaded|contains:
- 'Microsoft.VisualBasic'
- 'MyTemplate'
selection_mscoree:
CommandLine|endswith:
- '.exe'
condition: 1 of selection_strings or (selection_pipes and selection_vb)
falsepositives:
- Unknown
level: high
tags:
- attack.execution
- attack.t1059
- attack.command_and_control
- attack.t1071
IOC List
| Category | Indicator | Context |
|---|---|---|
| Hash | d065ebea634c65f1bc3e1b770d09f0364b87a74a631deca80f84f20561533898 |
SHA-256 |
| Hash | 04de3a39d33d310f13677fbf93a94204 |
MD5 |
| Hash | 03cb73aac63f85a5b02eb9b25497a6d8b78ecd0e |
SHA-1 |
| Filename | hotro.exe |
Original name |
| Registry | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
Persistence inferred |
| File | %TEMP%\*.tmp, %APPDATA%\* |
Staging inferred (GetTempFileName, create directory) |
| Pipe | \.\pipe\* |
IPC bridge (CreatePipe, PipeExists) |
| Network | Raw TCP outbound (no static IP) | C2 host resolved via DNS / builder config |
| Mutex | Unknown — not extracted statically; likely runtime-generated | — |
Behavioral Fingerprint
This binary is a .NET PE32 GUI assembly with a single mscoree.dll import. At startup it instantiates a hidden VB.NET WinForms client loader (ClientLoaderForm), initializes TCP socket objects (Socket, ConnectAsync, SendToServer), and maintains an internal C2 host cache (AddHostEntry, RebuildHostCache). It creates file-system directories and copies itself, interacts with the registry for persistence, and uses anonymous/named pipes for internal plugin IPC. Network traffic is raw TCP with keepalive framing (KeepAlive); no obfuscated HTTPS. The heavy ConfuserEx obfuscation (~1,000+ mangled #=q… identifiers) blocks naive string extraction and decompilation. The hotro.exe filename suggests a Vietnamese-language social-engineering lure masquerading as a support tool.
Detection Signatures (capa → ATT&CK)
capa static analysis already mapped capabilities to ATT&CK: ^[capa.txt]
| capa Capability | ATT&CK Technique |
|---|---|
| modify registry | T1112 |
| reflective code loading | T1620 |
| account discovery | T1087 |
| file and directory discovery | T1083 |
| query registry | T1012 |
| system information discovery | T1082 |
| system owner/user discovery | T1033 |
| C2 communication (send/receive) | T1071 |
| DNS resolution | T1071.004 |
| create TCP socket | T1071 |
| MD5 hashing | — (crypto utility) |
| generate random numbers | — (utility) |
| copy file / create directory / delete file | T1070 |
| create process | T1106 |
| create mutex | — (single instance) |
| enumerate registry | T1012 |
| get session integrity level | T1033 |
| suspend thread | T1055 |
Dynamic execution would likely surface additional TTPs such as T1547.001 (Registry Run Keys), T1059.001 (PowerShell), and T1021 (Remote Services) depending on builder configuration.
References
- SHA-256:
d065ebea634c65f1bc3e1b770d09f0364b87a74a631deca80f84f20561533898 - Wiki entity: nanocore
- Wiki technique: confuserex-obfuscation
- Sibling analysis:
/intel/analyses/fe81691f199873bd5470c7beff9a52fdd6c1e03b80484e40b15ce040cde851b5.html - Sibling analysis:
/intel/analyses/48c8e8a2f28318ae10000d4997784cd12703e182bd50db5da32b930034a0bc4c.html - OpenCTI labels:
nanocore,rat,malware-bazaar^[metadata.json] - Sample source: abuse.ch / MalwareBazaar (via OpenCTI
urlhaus-recent-payloadsconnector)
Provenance
- Report built from static artefacts generated by the triage pipeline on 2026-05-26.
- Tools:
file,strings,floss(failed — invalid args, no decoded strings),capav5 (static, dotnet),binwalk,radare2(CIL analysis, 858 functions),pefile. - No CAPE dynamic analysis: Windows guest unavailable at time of triage. All runtime/C2 claims are inferred from static imports, capa capability map, and known NanoCore builder behavior.