Fake Xeno Roblox Executor — Java RAT/Infostealer Hunt Pack
Executive Summary
Since the start of 2026, threat actors have distributed a trojanized version of Xeno, a popular
third-party Roblox script-execution tool, through Discord servers, gaming forums, and compromised or impersonated
accounts — advertised as an "undetected" build that bypasses Roblox's anti-cheat protections. Running the fake
installer's xeno.exe quietly stages a Java Runtime Environment, launches an Allatori-obfuscated JAR
disguised as decompiler.exe, and ultimately drops a full-featured Java-based RAT/infostealer into
%LOCALAPPDATA%\Microsoft\GameDVR\ under a legitimate-sounding DLL name. Activity has been continuous
since January 2026, surged sharply in the second half of March 2026, and was still being actively reported on by
Bitdefender as recently as August 3, 2026.
The attacker's objective is broad, opportunistic account and asset theft — Discord, Roblox, Minecraft, and Microsoft Store credentials/payment tokens, plus cryptocurrency wallet data — monetized alongside full surveillance capability (keylogging, webcam access, live desktop streaming) and hands-on-keyboard remote access via an interactive PowerShell shell. Because the lure is a Roblox cheat tool, a meaningful share of victims are minors on shared family or BYOD computers, which raises both the privacy stakes and the odds that a compromised personal device also touches a managed or corporate environment.
The single highest-value defensive angle is upstream of any single stage: every step in the chain (the loader,
the JRE, the obfuscated JAR, and the final payload) executes as an unsigned, low-prevalence binary from a
user-writable AppData path. Blocking or alerting on that pattern (Hardening §12, Immediate tier) breaks the
chain regardless of which filenames or hashes the operators rotate in next. The two confirmed C2 domain sets
(solthere[.]net, powercat[.]dog) and the SHA-256-derived .xyz WebSocket root
are also fully attributable and safe to block outright (IOC Appendix §10).
Source Review & Web Hunter Notes
Eight sources were fetched and saved verbatim for this pack (snapshot files in
XenoExecutor-RAT-Hunt-sources/, fetched 2026-08-09). Two are Tier-1 vendor primaries that independently
confirm the same C2 root domain across two different campaign snapshots five months apart — the strongest
single piece of corroboration in this research.
| # | Tier | Source | Used For |
|---|---|---|---|
| S01 | T2 | BleepingComputer | Campaign overview, recency confirmation, capability summary; explicitly names Bitdefender as originating researcher |
| S02 | T1 | Bitdefender Labs | PRIMARY technical writeup — full attack chain, C2 URLs/domain, 11 MD5 hashes, file paths, persistence mechanism, capability deep-dive |
| S03 | T1 | ThreatLocker Threat Intelligence | PRIMARY earlier-variant technical writeup (Mar 2026) — original "Powercat" naming, SHA256 hashes, powercat[.]dog domain, confirms C2 root domain is stable across campaign lifetime |
| S04 | T2 | GBHackers | Corroborating summary + re-published Bitdefender IOC table |
| S05 | T2 | GBHackers | Corroborating summary, earlier publication date (Aug 4) for timeline cross-check |
| S06 | T2 | Cyber Press | Corroborating summary; explicit defender guidance line ("hunt for suspicious Java execution from %LOCALAPPDATA%") |
| S07 | T2 | ThreatsEye Journal | Independent timeline reconstruction (Jan/Mar/Aug 2026 milestones) corroborating the campaign duration |
| S08 | T3 | MalwareTips Forums | Community discussion of the Bitdefender report; independently-written incident-response checklist used to inform the Containment Runbook (§14) |
Suspicious-content check: every fetched source was reviewed for text that looked like it was trying to direct analyst/AI behavior (fake "system" instructions, requests to run commands, requests to fetch other URLs, claims of authority). None of the eight sources contained anything of that kind — all eight were straightforward threat-intelligence reporting, a vendor technical writeup, or a community forum discussion quoting that writeup.
Contradictions & gaps noted during research: the ThreatLocker page's raw text rendered one
domain-list entry as ce9ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a[.]xyz (an extra
"ce9" prefix) immediately followed by the correctly-formatted subdomain entries (alpha[.]ce953a0eb...,
etc.) — almost certainly a page-rendering/extraction artifact rather than a second real domain, since the
clean 63-character root is independently confirmed byte-for-byte in the Bitdefender writeup. This pack uses only
the clean, corroborated value. No IOC in this pack depends on the malformed string.
Hunt Brief & Attack Chain
Hunt Hypotheses
- Q1/Q2 (high fidelity): If the current campaign is active in our environment, we should see a hash match against the published sample set, or a process named xeno.exe executing from %LOCALAPPDATA%\Xeno\workspace\cache\.
- Q3/Q4 (medium-high fidelity): We should see a javaw.exe/java.exe child process referencing decompiler.exe, preceded by a hidden PowerShell process silently extracting a JRE via ExtractToDirectory.
- Q5 (high fidelity): We should see a registry Run-key or StartupApproved value literally named "Display Calibration" — not a real Windows or common third-party setting.
- Q6 (high fidelity): We should see cmstp.exe spawned by a Java process — a UAC bypass attempt with no legitimate explanation in most fleets.
- Q7 (high fidelity): We should see DNS resolution of solthere[.]net, powercat[.]dog, or the ce953a0eb...[.]xyz C2 root and its NATO-phonetic subdomains.
- Q8 (high fidelity): We should see a process or file-write referencing one of the documented masquerading DLL names inside %LOCALAPPDATA%\Microsoft\GameDVR\ — a location none of those DLLs legitimately occupy.
Attack Chain
| Step | Stage | Behavior | Telemetry / Hunt Angle |
|---|---|---|---|
| 1 | Delivery | Attacker promotes a fake "undetected" Xeno Roblox executor via Discord servers, gaming forums, or compromised/impersonated accounts. Victim downloads a ZIP/self-extracting archive mimicking a real Xeno install. | No Falcon telemetry (browser/Discord-client download) — see Hardening §12 for the DNS/proxy angle. |
| 2 | Stage 1 — Loader | Victim runs xeno.exe from %LOCALAPPDATA%\Xeno\workspace\cache\. It checks for a JRE, silently extracts one via hidden PowerShell if missing, reads C2 keys from XenoIcon.jpg. | ProcessRollup2, SyntheticProcessRollup2 — Q2, Q4 |
| 3 | Stage 2 — Obfuscated Java Payload | xeno.exe launches javaw.exe against decompiler.exe (Allatori-obfuscated JAR). Stage 2 runs sandbox/debugger checks, registers the victim with the C2, and downloads stage 3. | ProcessRollup2, SyntheticProcessRollup2, DnsRequest — Q3, Q7 |
| 4 | Stage 3 — Full RAT/Infostealer | Stage 2 writes a JAR masquerading as a legitimate DLL into %LOCALAPPDATA%\Microsoft\GameDVR\, attempts CMSTP UAC bypass, and establishes Run-key persistence as "Display Calibration". | ProcessRollup2, JarFileWritten, AsepValueUpdate/RegGenericValueUpdate — Q5, Q6, Q8 |
| 5 | Command and Control | Stage 3 opens a WebSocket connection to a SHA-256-derived .xyz C2 root; the server can push JAR self-updates and task the client. | DnsRequest, NetworkConnectIP4 — Q7 |
| 6 | Collection / Impact | Keylogging, 500ms desktop streaming, webcam capture, browser/Discord/Roblox/Minecraft/crypto-wallet credential theft, arbitrary PowerShell execution, interactive remote shell. | Largely NOT visible in standard Falcon telemetry — see Coverage Map §15 and Native Audit-Log Hunts §7 |
Consolidated IOC Table
37 indicators total: 14 file hashes, 3 domains/DGA-roots, 4 URLs, 15 host/registry artifacts, and 1
legitimate-but-abused service pair (never block). Every atomic value below traces to a saved source snapshot in
XenoExecutor-RAT-Hunt-sources/ — see References (§18).
| Type | Value | Confidence | Action | Context | Expiry |
|---|---|---|---|---|---|
| MD5 | 4bdaf7792e908f163ebef137854c571d | CONF HIGH | DETECT | Fake Xeno installer archive [S02] | 2027-02-09 |
| MD5 | 9930036e8f787674db39094e21413e77 | CONF HIGH | DETECT | Fake Xeno installer archive [S02] | 2027-02-09 |
| MD5 | 9699bd6a448d0662a1e9e353223263b6 | CONF HIGH | DETECT | Fake Xeno installer archive [S02] | 2027-02-09 |
| MD5 | 1a462c76efc4e73725b9e95c4a00fddb | CONF HIGH | DETECT | Fake Xeno installer archive [S02] | 2027-02-09 |
| MD5 | 7b96170259a376ea79411c5713beb396 | CONF HIGH | DETECT | Fake Xeno installer archive [S02] | 2027-02-09 |
| MD5 | 2ead73ed62f1c2beb9043ce92e774e0b | CONF HIGH | DETECT | Malicious xeno.exe loader (stage 1) [S02] | 2027-02-09 |
| MD5 | 0aadd62b535e683a5a2fe31fde546d07 | CONF HIGH | DETECT | Malicious xeno.exe loader (stage 1) [S02] | 2027-02-09 |
| MD5 | 26a94168fa25af0bcb46a18ede50af86 | CONF HIGH | DETECT | Malicious xeno.exe loader (stage 1) [S02] | 2027-02-09 |
| MD5 | 0d03faf1764297c908158da77c8ffcae | CONF HIGH | DETECT | Malicious xeno.exe loader (stage 1) [S02] | 2027-02-09 |
| MD5 | d123dbb5c5980bfeb22586197d2cc403 | CONF HIGH | DETECT | decompiler.jar — stage 2 (Allatori-obfuscated) [S02] | 2027-02-09 |
| MD5 | 163c8d117ef5a4e4e9c3e92a726af0eb | CONF HIGH | DETECT | GameDVR-dropped JAR — stage 3 [S02] | 2027-02-09 |
| SHA256 | A9B4823A1B2C0702A1EB8A1BF18DB2D9C9604D2D2DD98A99F1D388BF7CFA71E3 | CONF HIGH | DETECT | System.EnterpriseServices.jar — earlier (Mar 2026) stage-3 variant [S03] | 2027-02-09 |
| SHA256 | A33A96CBD92EEF15116C0C1DCAA8FEB6EEE28A818046AC9576054183E920EEB5 | CONF HIGH | DETECT | jd-gui.jar — earlier (Mar 2026) stage-2 variant [S03] | 2027-02-09 |
| SHA256 | C0C3A0331B57D10D23A172A79BDF13AB066255DE41774E5A19DD8A8E8446E1FA | CONF HIGH | DETECT | 3k3uklt.exe — earlier (Mar 2026) stage-1 variant [S03] | 2027-02-09 |
| Domain | solthere.net | CONF HIGH | DETECT | C2 — victim registration + payload redeem endpoint, Aug 2026 variant [S02] | 2027-02-09 |
| Domain | powercat.dog | CONF HIGH | DETECT | C2 — victim registration endpoint, Mar 2026 variant [S03] | 2027-02-09 |
| Domain | ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a.xyz (+ subdomains) | CONF HIGH | DETECT | WebSocket C2 root — SHA-256-derived hostname, confirmed identical across both Mar 2026 and Aug 2026 variants; NATO-phonetic session subdomains (alpha./beta./charlie./hotel./juliett./kilo./lima./oscar.) [S02][S03] | 2027-02-09 |
| URL | hxxps://solthere[.]net/justacoolkat10 | CONF HIGH | DETECT | Victim registration POST endpoint [S02] | 2027-02-09 |
| URL | hxxps://solthere[.]net/api/v1/redeem | CONF HIGH | DETECT | AES+Base64 key redemption / payload retrieval endpoint [S02] | 2027-02-09 |
| URL | hxxps://powercat[.]dog/cool | CONF MED | HUNT | Earlier-variant registration endpoint (Mar 2026) [S03] | 2026-11-09 |
| URL | hxxps://powercat[.]dog/watermelon5 | CONF MED | HUNT | Earlier-variant registration endpoint (Mar 2026) [S03] | 2026-11-09 |
| File path | %LOCALAPPDATA%\Xeno\workspace\cache\xeno.exe | CONF HIGH | HUNT | Stage-1 loader path, current variant [S02] | 2026-11-09 |
| File path | %LOCALAPPDATA%\Xeno\workspace\ (earlier variant root, no \cache\) | CONF MED | HUNT | Stage-1 workspace root, Mar 2026 variant [S03] | 2026-11-09 |
| File path | %LOCALAPPDATA%\Java\jre\bin\javaw.exe | CONF MED | HUNT | Silently-staged JRE used to run every stage [S02] | 2026-11-09 |
| File path | XenoIcon.jpg | CONF MED | HUNT | File holding C2 validation keys, read by stage 1 [S02] | 2026-11-09 |
| File path | instance.exe | CONF MED | HUNT | Archive stage 1 extracts the bundled JRE from [S02] | 2026-11-09 |
| File path | decompiler.exe | CONF HIGH | HUNT | Stage-2 JAR disguised as a Windows EXE, current variant [S02] | 2026-11-09 |
| File path | 3k3uklt.exe / jd-gui.jar | CONF MED | HUNT | Stage-1/2 filenames, Mar 2026 variant [S03] | 2026-11-09 |
| File path | %LOCALAPPDATA%\Microsoft\GameDVR\{mscorlib.dll|System.IO.Compression.dll|System.Net.Http.dll|System.EnterpriseServices.dll|nvwgf2umx.dll|avcodec-58.dll|libcef.dll} | CONF HIGH | HUNT | Stage-3 JAR masquerading as legitimate Windows/NVIDIA/CEF DLL names inside the Xbox Game Bar cache directory [S02][S03] | 2026-11-09 |
| File path | -ntcache (user profile home root) | CONF HIGH | HUNT | Stage-3 execution log with timestamps [S02] | 2026-11-09 |
| File path | SquirrelInteractive.bin (user profile home root) | CONF HIGH | HUNT | Exodus wallet runtime data log written by the injected app.asar JS [S02] | 2026-11-09 |
| File path | app.asar (inside Exodus Wallet v26.1.5 install) | CONF HIGH | HUNT | Exodus client file tampered via JS injection to weaken sandboxing [S02] | 2026-11-09 |
| File path | RbxAnalytics.png (10-byte junk decoy in installer archive) | CONF LOW | HUNT | Decoy filler file used to pad the fake-installer archive [S02] | 2026-09-09 |
| Registry | HKCU\Software\Microsoft\Windows\CurrentVersion\Run, value "Display Calibration" | CONF HIGH | HUNT | Persistence entry [S02] | 2026-11-09 |
| Registry | HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run, value "Display Calibration" = 2 | CONF HIGH | HUNT | Toggle that enables the Run-key persistence entry [S02] | 2026-11-09 |
| Registry | HKCU\Software\Beep\{Unique_ID} | CONF MED | HUNT | Device-fingerprint key, Mar 2026 variant [S03] | 2026-11-09 |
| Service (abused, legitimate) | ipapi.co, ipwho.is | CONF LOW | PIVOT | Legitimate third-party geolocation APIs queried by stage 3 for victim fingerprinting — never block; use only as corroborating context alongside another hit [S02] | 2026-09-09 |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints (consumer + BYOD/employee-owned gaming devices) | ProcessRollup2, SyntheticProcessRollup2, DnsRequest, AsepValueUpdate/RegGenericValueUpdate, JarFileWritten | High | Low — full process/registry/DNS telemetry covers the loader-through-persistence chain (Q1–Q6, Q8) |
| In-process JVM behavior (sandbox/debugger evasion, reflective class loading) | None — occurs entirely inside the JVM's own memory space | Medium | High — no Falcon event type observes JVM-internal control flow; acknowledged gap, not a missing query |
| Surveillance subsystem (keylogging, screenshot streaming, webcam via DirectShow COM) | None standard; Sensitive Process Access (if licensed) or Sysmon Event ID 10 as a partial substitute | High (privacy/child-safety impact) | High — COM/DirectShow interaction and raw Win32 hook installation are not modeled as Falcon events |
| Credential stores (browser cookie DBs, Discord leveldb, Exodus app.asar, Microsoft Store .tbres tokens) | None standard; Sysmon FileCreate/ProcessAccess as a partial substitute | High | High — read/modify access to these files is not a discrete Falcon event type; see Native Audit-Log Hunts §7 |
| Network egress (C2 domains, DGA-style root) | DnsRequest, NetworkConnectIP4 | High | Low — Q7 gives exact-match + suffix-regex coverage of every published domain |
ATT&CK Mapping
| Tactic | Technique | Technique Name | Observed Behavior | Query / Control |
|---|---|---|---|---|
| Execution | T1204.002 | User Execution: Malicious File | Victim manually runs xeno.exe believing it is the legitimate Xeno Roblox script executor. | Q1, Q2 |
| Execution | T1059.001 | Command and Scripting Interpreter: PowerShell | Hidden PowerShell silently extracts the bundled JRE; later abused for attacker-issued Base64 PowerShell commands and an interactive remote shell. | Q4 (extraction only — GAP for arbitrary C2-issued commands) |
| Defense Evasion | T1027 | Obfuscated Files or Information | Stage-2 JAR obfuscated with the demo version of Allatori, a legitimate commercial obfuscator. | Q1, Q3 (contextual) |
| Defense Evasion | T1036.008 | Masquerading: Masquerade File Type | JAR renamed with a .exe extension (decompiler.exe) and stage-3 JARs written under real Windows/NVIDIA/CEF DLL names. | Q3, Q8 |
| Defense Evasion | T1497.001 | Virtualization/Sandbox Evasion: System Checks | Disk-size, MAC-address, registry/WMI VM-artifact checks, and monitoring-tool process enumeration before running. | GAP — in-process JVM behavior, no Falcon telemetry |
| Defense Evasion | T1622 | Debugger Evasion | JVM debug-flag and stack-trace inspection (-Xdebug, suspend=, jdwp, IntelliJ/Eclipse/NetBeans/BytecodeViewer strings). | GAP — in-process JVM behavior |
| Defense Evasion | T1548.002 | Abuse Elevation Control Mechanism: Bypass User Account Control | CMSTP-based UAC bypass attempt immediately after stage 3 lands. | Q6 |
| Defense Evasion | T1112 | Modify Registry | StartupApproved\Run value toggled to 2 to enable the persistence entry. | Q5 |
| Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys | "Display Calibration" value under CurrentVersion\Run. | Q5 |
| Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | HTTPS POST registration/redeem endpoints and a WebSocket C2 channel. | Q7 |
| Command and Control | T1568.002 | Dynamic Resolution: Domain Generation Algorithms | Runtime SHA-256-derived C2 root domain with NATO-phonetic session subdomains, identical across both observed campaign variants. | Q7 |
| Command and Control | T1105 | Ingress Tool Transfer | Stage 2 downloads stage 3; the C2 pushes self-update JARs over the WebSocket channel. | Q7 (partial — comms only, not payload content) |
| Command and Control | T1620 | Reflective Code Loading | Stage 2 loads the retrieved payload class in-memory via loadClass()/method.invoke() rather than writing and executing a new process. | GAP — in-process JVM behavior |
| Collection | T1056.001 | Input Capture: Keylogging | Java Native Access hooks on User32 for keyboard and mouse events. | GAP — no Falcon event for Win32 hook installation via JNA |
| Collection | T1113 / T1125 | Screen Capture / Video Capture | Periodic and 500ms-interval streaming screenshots; webcam access via DirectShow COM objects. | GAP — COM/DirectShow access is not a standard Falcon event |
| Credential Access | T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | Chrome/Edge/Brave/Opera/Opera GX/Vivaldi cookie and DPAPI-decrypted credential theft. | GAP — see Native Audit-Log Hunts §7 |
| Credential Access | T1528 | Steal Application Access Token | Discord token theft plus Discord API account/payment-method interrogation. | GAP — see Native Audit-Log Hunts §7 |
| Collection | T1005 | Data from Local System | Roblox/Minecraft account and session data, Microsoft Store .tbres tokens, crypto-wallet data. | GAP — see Native Audit-Log Hunts §7 |
| Collection | T1554 | Compromise Client Software Binary | Exodus Wallet v26.1.5 app.asar tampered via injected JavaScript to weaken sandboxing and log runtime wallet data. | GAP — .asar modification is not a monitored Falcon file-write event type |
Native Audit-Log Hunts
Falcon's standard process/file/registry/network event model does not observe in-JVM behavior (sandbox checks, reflective class loading), COM/DirectShow interaction (webcam), raw Win32 keyboard hooks, or read/modify access to browser and application credential stores. The six checks below are the best available substitutes and are the honest complement to the Coverage Map gaps in §15 — they are not CQL and must be run through RTR, Sysmon, a licensed Falcon module, or your proxy/firewall layer instead.
RTR / OSQuery file-existence sweep
Falcon Real Time Response (or an OSQuery-based EDR) can directly check for artifact presence without a continuous detection: %LOCALAPPDATA%\Xeno\workspace\cache\, %LOCALAPPDATA%\Microsoft\GameDVR\, and a file named -ntcache or SquirrelInteractive.bin directly in the user profile root. None of these three names appear in a clean Windows profile.
Sysmon Event ID 11 (FileCreate) — companion telemetry
Where Sysmon runs alongside Falcon, filter FileCreate events for TargetFilename matching -ntcache, SquirrelInteractive.bin, or a modification timestamp on app.asar inside any installed Exodus Wallet directory — Falcon's canonical event list (crowdstrike-logscale-v3) has no generic file-create event for non-PE/non-archive file types, so this is a genuine telemetry gap Sysmon can close.
Sensitive Process Access (if licensed) / Sysmon Event ID 10 — credential-store and browser-process handle access
If the CrowdStrike Identity Protection / Sensitive Process Access module is licensed, or Sysmon ProcessAccess auditing is enabled, hunt for a javaw.exe/java.exe process opening a handle into chrome.exe, msedge.exe, brave.exe, opera.exe, vivaldi.exe, or Discord.exe — the browser-cookie and Discord-token theft T1555.003/T1528 gap flagged in the Coverage Map.
Windows Security Event 4688 — redundant process-creation cross-check
In estates where process-creation auditing with command-line logging is enabled (GPO: Audit Process Creation + Include command line in process creation events), Event 4688 gives a redundant, Falcon-independent copy of the Q2/Q3/Q4/Q6 process chains — useful for environments correlating into a separate SIEM.
DNS/proxy-layer DGA heuristic
At the firewall or web proxy (not endpoint telemetry), alert on outbound HTTPS/WebSocket connections to newly-registered .xyz domains whose hostname label is a 63–64 character lowercase hex string — a generic heuristic that would also have caught this campaign's C2 root before Bitdefender/ThreatLocker published it by name.
Unmanaged per-user JRE inventory sweep
Query your software-inventory/RMM tooling for a Java Runtime Environment present under any user's %LOCALAPPDATA% that did not arrive via a managed software-deployment channel (Ninja, SCCM, Intune). An unexpected per-user JRE is a weak but cheap signal worth a periodic sweep, since every stage of this malware depends on one being present.
CrowdStrike LogScale CQL Hunt Queries
Looks for: Process execution matching MD5/SHA256 hashes published by Bitdefender (Aug 2026, current xeno.exe/decompiler.exe/GameDVR-stage variant) and ThreatLocker (Mar 2026, earlier 3k3uklt.exe/jd-gui.jar variant).
// HUNT: Known Xeno/Powercat Sample Execution (MD5/SHA256 Hash Match) // MITRE: T1204.002 (User Execution: Malicious File) // CONF: high // FP: low // COST: low // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: none expected -- exact hash match against Bitdefender (2026-08-03) and // ThreatLocker (2026-03-25) published samples. A hit is a confirmed detonation, not a heuristic. // LOOKBACK: 180d (hashes are durable IOCs; widen if hunting historical dwell time) #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | MD5HashData=/^(4bdaf7792e908f163ebef137854c571d|9930036e8f787674db39094e21413e77|9699bd6a448d0662a1e9e353223263b6|1a462c76efc4e73725b9e95c4a00fddb|7b96170259a376ea79411c5713beb396|2ead73ed62f1c2beb9043ce92e774e0b|0aadd62b535e683a5a2fe31fde546d07|26a94168fa25af0bcb46a18ede50af86|0d03faf1764297c908158da77c8ffcae|d123dbb5c5980bfeb22586197d2cc403|163c8d117ef5a4e4e9c3e92a726af0eb)$/i or SHA256HashData=/^(a9b4823a1b2c0702a1eb8a1bf18db2d9c9604d2d2dd98a99f1d388bf7cfa71e3|a33a96cbd92eef15116c0c1dcaa8feb6eee28a818046ac9576054183e920eeb5|c0c3a0331b57d10d23a172a79bdf13ab066255de41774e5a19dd8a8e8446e1fa)$/i | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, MD5HashData, SHA256HashData, aid]) | sort(@timestamp, order=desc)
Looks for: A process named xeno.exe running from the exact staged path Bitdefender documented (%LOCALAPPDATA%\Xeno\workspace\cache\), which is where the trojanized loader hides while imitating a real Xeno installation. FP: The genuine, non-trojanized Xeno Roblox executor also creates a %LOCALAPPDATA%\Xeno\ tree and ships a file literally named xeno.exe — filename and parent directory alone cannot distinguish trojan from legitimate tool. Treat a bare hit here as INVESTIGATE, not confirmed-malicious.
// HUNT: Fake Xeno Roblox Loader — xeno.exe from Staged AppData Workspace // MITRE: T1204.002 (User Execution: Malicious File), T1036.005 (Masquerading: Match Legitimate Name or Location) // CONF: medium // FP: low // COST: medium // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: the LEGITIMATE (non-trojanized) Xeno Roblox script executor also installs to // %LOCALAPPDATA%\Xeno\ and ships a real xeno.exe -- filename + path alone cannot fully separate // trojan from genuine tool. Both are third-party Roblox anti-cheat-evasion software your AUP may // already prohibit; treat any hit as at minimum a policy violation worth investigating. // TUNING: prioritize hits that also match Q1 (hash), or that spawn a child javaw.exe/java.exe within // seconds (Q3) -- the genuine Xeno build does not bundle or invoke a JRE. A xeno.exe process with // no such child chain and no hash match is lower priority; still log it for the AUP/software-inventory // angle described in the Hardening section. // LOOKBACK: 30d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^xeno(\.exe)?$/i | ImageFileName=/\\Xeno\\workspace\\cache\\/i | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, MD5HashData, aid]) | sort(@timestamp, order=desc)
Looks for: javaw.exe/java.exe invoked with a command line referencing decompiler.exe -- the Allatori-obfuscated JAR that stage 1 launches disguised as a Windows binary. FP: Legitimate Java decompiler tools (JD-GUI, CFR, Procyon, IntelliJ's built-in decompiler) can also produce a command line containing the word "decompiler". A single hit with no Xeno/GameDVR path context and no hash match may be a developer running a real decompiler tool.
// HUNT: JAR Masquerading as Windows EXE — decompiler.exe Stage-2 Payload // MITRE: T1036.008 (Masquerading: Masquerade File Type), T1027 (Obfuscated Files or Information), T1204.002 (User Execution: Malicious File) // CONF: medium // FP: medium // COST: medium // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: developers running legitimate Java decompiler tooling (JD-GUI, CFR, Procyon, // IntelliJ's bundled decompiler, bytecode-viewer) can produce a CommandLine containing "decompiler". // TUNING: prioritize hits where ParentBaseFileName = xeno.exe, or where ImageFileName/CommandLine // also references \Xeno\ or \Microsoft\GameDVR\ (see Q2/Q8), or where SHA256HashData/MD5HashData // matches Q1. Exclude known internal dev workstations with an approved decompiler tool in their // software inventory baseline if this becomes a recurring low-value hit there. // LOOKBACK: 30d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^javaw?(\.exe)?$/i | CommandLine=/decompiler(\.exe)?/i | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, ParentProcessId_decimal, SHA256HashData, MD5HashData, aid]) | sort(@timestamp, order=desc)
Looks for: A hidden, execution-policy-bypassed PowerShell process using .NET's ZipFile::ExtractToDirectory to silently unpack a bundled JRE -- the exact technique Bitdefender documented for xeno.exe's first-run Java staging. FP: Some legitimate installers (game launchers, IDE bootstrappers, internal deployment scripts) use the same hidden-window + ExecutionPolicy Bypass + ExtractToDirectory pattern to silently unpack bundled runtimes.
// HUNT: Hidden PowerShell JRE Extraction — Fake Xeno Loader Stage-1 Behavior // MITRE: T1059.001 (Command and Scripting Interpreter: PowerShell), T1027 (Obfuscated Files or Information) // CONF: high // FP: medium // COST: low // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: some legitimate installers and internal deployment scripts silently unpack a // bundled Java/other runtime with the same -WindowStyle Hidden -ExecutionPolicy Bypass + // ExtractToDirectory pattern (e.g., in-house app bootstrappers, some game launchers). // TUNING: prioritize hits where ParentBaseFileName is xeno.exe or instance.exe (undocumented/ // unmanaged parent), and de-prioritize hits from known, inventoried software-deployment parents // (RMM agent, approved installer executables) if this becomes a recurring benign source. // LOOKBACK: 30d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^powershell(\.exe)?$/i | CommandLine=/-windowstyle\s+hidden/i | CommandLine=/extracttodirectory/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine, ImageFileName, SHA256HashData, aid]) | sort(@timestamp, order=desc)
Looks for: A registry value named exactly "Display Calibration" written under either the CurrentVersion\Run autostart key (the persistence entry itself) or the Explorer\StartupApproved\Run key (the toggle that enables it) -- both steps Bitdefender documented for stage-3.
// HUNT: Persistence via Run Key Named "Display Calibration" // MITRE: T1547.001 (Boot or Logon Autostart Execution: Registry Run Keys), T1112 (Modify Registry) // CONF: high // FP: low // COST: low // REQUIRES: AsepValueUpdate, RegGenericValueUpdate // FALSE POSITIVES: none expected -- "Display Calibration" is not a real Windows autostart entry // name shipped by Microsoft or any common commercial software observed in this research. // LOOKBACK: 30d #event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/ | RegValueName="Display Calibration" | table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, aid]) | sort(@timestamp, order=desc)
Looks for: cmstp.exe launched with a parent process of javaw.exe/java.exe -- the elevation attempt stage-3 makes immediately after landing in %LOCALAPPDATA%\Microsoft\GameDVR\.
// HUNT: CMSTP Spawned by a Java Process — Possible UAC Bypass // MITRE: T1548.002 (Abuse Elevation Control Mechanism: Bypass User Account Control) // CONF: high // FP: low // COST: low // REQUIRES: ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: none expected in typical fleets -- cmstp.exe (the Connection Manager Profile // Installer) is rarely used at all in modern Windows estates, and a Java process is never a // legitimate parent for it. Verify against any internal VPN-profile tooling before treating a // fleet-wide hit set as pure noise. // LOOKBACK: 30d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^cmstp(\.exe)?$/i | ParentBaseFileName=/^javaw?(\.exe)?$/i | table([@timestamp, ComputerName, UserName, ImageFileName, CommandLine, ParentBaseFileName, ParentProcessId_decimal, aid]) | sort(@timestamp, order=desc)
Looks for: DNS resolution of the two registration/redeem domains (solthere[.]net, powercat[.]dog) or the dynamically-generated WebSocket C2 root (a SHA-256-derived 63-character .xyz hostname and its NATO-phonetic session subdomains), joined back to the requesting process for triage.
// HUNT: DNS Requests to Known Xeno/Powercat C2 Infrastructure // MITRE: T1071.001 (Application Layer Protocol: Web Protocols), T1568.002 (Dynamic Resolution: Domain Generation Algorithms) // CONF: high // FP: low // COST: medium // REQUIRES: DnsRequest, ProcessRollup2, SyntheticProcessRollup2 // FALSE POSITIVES: none expected -- these are attacker-registered, campaign-specific domains, not // shared cloud/CDN infrastructure. The .xyz root is a runtime SHA-256-derived hostname unique to // this malware family's C2 protocol. // LOOKBACK: 30d #event_simpleName=DnsRequest | DomainName="solthere.net" or DomainName=/\.solthere\.net$/i or DomainName="powercat.dog" or DomainName=/\.powercat\.dog$/i or DomainName=/(^|\.)ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a\.xyz$/i | rename(field=ContextProcessId_decimal, as=TargetProcessId_decimal) | join(query={#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/}, field=TargetProcessId_decimal, include=[FileName, CommandLine, ParentBaseFileName]) | table([@timestamp, ComputerName, UserName, DomainName, FileName, CommandLine, ParentBaseFileName, aid]) | sort(@timestamp, order=desc)
Looks for: A process command line or written file referencing one of the exact masquerading filenames Bitdefender/ThreatLocker documented (mscorlib.dll, System.IO.Compression.dll, System.Net.Http.dll, System.EnterpriseServices.dll, nvwgf2umx.dll, avcodec-58.dll, libcef.dll) sitting inside the user-writable %LOCALAPPDATA%\Microsoft\GameDVR\ path -- none of these DLLs legitimately live there.
// HUNT: Stage-3 JAR in GameDVR Masquerading as a Legitimate Windows DLL // MITRE: T1036.008 (Masquerading: Masquerade File Type), T1620 (Reflective Code Loading), T1204.002 (User Execution: Malicious File) // CONF: high // FP: low // COST: medium // REQUIRES: ProcessRollup2, SyntheticProcessRollup2, JarFileWritten // FALSE POSITIVES: none expected -- mscorlib.dll, System.IO.Compression.dll, System.Net.Http.dll, // System.EnterpriseServices.dll, nvwgf2umx.dll, avcodec-58.dll and libcef.dll are real Windows/ // NVIDIA/Chromium-Embedded-Framework component names, but none of them legitimately ship inside // a user-writable %LOCALAPPDATA%\Microsoft\GameDVR\ path -- their genuine copies live under // System32, WinSxS, or an application's own Program Files install directory. A hit here is the // file NAME being real but the file LOCATION being wrong, which is the masquerade itself. // LOOKBACK: 30d #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|JarFileWritten/ | CommandLine=/\\Microsoft\\GameDVR\\(mscorlib|System\.IO\.Compression|System\.Net\.Http|System\.EnterpriseServices|nvwgf2umx|avcodec-58|libcef)\.dll/i or TargetFileName=/\\Microsoft\\GameDVR\\(mscorlib|System\.IO\.Compression|System\.Net\.Http|System\.EnterpriseServices|nvwgf2umx|avcodec-58|libcef)\.dll/i | table([@timestamp, ComputerName, UserName, #event_simpleName, FileName, ImageFileName, TargetFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid]) | sort(@timestamp, order=desc)
CrowdStrike Custom IOA Recommendations
Based on: Q5 MITRE: T1547.001, T1112 Action: Detect (promote to Block after a 14-day clean canary run)
Detection logic:
Registry Value Name: .*Display Calibration$Registry Value Type/Path: any Run or StartupApproved\Run key under HKCU or HKLM
Why: Catches the exact persistence mechanism Bitdefender documented; the value name is not a real Windows setting.
FP tuning: None expected. Confirm no internal tooling coincidentally reuses this literal string before promoting to Block.
Validation: On an isolated canary endpoint, write a test value literally named "Display Calibration" under HKCU\...\Run, confirm the rule fires, then delete the test value.
Based on: Q2 MITRE: T1204.002, T1036.005 Action: Detect only — do not promote to Block
Detection logic:
Image Filename: .*\\Xeno\\workspace\\cache\\xeno\.exe$Command Line: (leave unset — filename/path match is sufficient for Detect)
Why: Surfaces every Xeno-branded executor launch (legitimate or trojanized) for AUP/software-inventory review and as an early pivot into the rest of the chain.
FP tuning: High collision risk with the genuine, non-trojanized Xeno tool — see Q2 FP notes. This is why the rule stays in Detect mode indefinitely rather than being promoted.
Validation: Not applicable for Block promotion; review Detect-mode hits weekly against Q1 hash matches and Q3 child-process hits to separate real detonations from legitimate-tool AUP violations.
Based on: Q6 MITRE: T1548.002 Action: Detect (promote to Block after a 14-day clean canary run)
Detection logic:
Image Filename: .*\\cmstp\.exe$Parent Image Filename: .*\\java(w)?\.exe$
Why: A Java process spawning the Connection Manager Profile Installer is a coherent, rarely-legitimate elevation attempt.
FP tuning: None expected outside of niche internal VPN-profile automation — verify none exists before promoting to Block.
Validation: On an isolated canary VM, launch cmstp.exe with a benign .inf profile from a test Java wrapper process; confirm the rule fires; clean up the test profile afterward.
Based on: Q7 MITRE: T1071.001, T1568.002 Action: Detect first — promote to Block once your DNS/proxy layer's own blocklist coverage is confirmed
Detection logic:
Domain Name: .*\.solthere\.net$|^solthere\.net$Domain Name: .*\.powercat\.dog$|^powercat\.dog$Domain Name: (^|.*\.)ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a\.xyz$
Why: Direct coverage for both observed C2 domain sets and the stable DGA-style WebSocket root shared by both campaign variants.
FP tuning: None expected — attacker-registered, campaign-specific infrastructure.
Validation: From an isolated canary endpoint, perform an nslookup for solthere.net (safe — resolves to attacker infrastructure but issues no malicious payload on a bare DNS query); confirm the rule fires.
Alert Package — Primary Detection (Q2 → Q3 Loader Chain)
alert-builder-v2 output for the highest-signal composite detection. Folded into this section per the standard 18-section layout, since Custom IOA Recommendations is the closest operational home for scheduled-search + alert-email content.
Scheduled Search Configuration (LogScale UI)
NAME: HUNT: Fake Xeno Roblox Loader - Java RAT Stage 1/2 Execution Chain DESCRIPTION: Detects the fake Xeno Roblox script-executor loader chain: a process named xeno.exe running from a staged AppData workspace directory, followed within seconds by a javaw.exe/java.exe child process whose command line references a JAR disguised as decompiler.exe. This is the stage-1-to-stage-2 handoff of a Java-based RAT/infostealer distributed as a trojanized "undetected" Roblox cheat tool via Discord and gaming forums, active since early 2026. MITRE: T1204.002 (User Execution: Malicious File), T1036.008 (Masquerading: Masquerade File Type), T1027 (Obfuscated Files or Information) Tactics: Execution, Defense Evasion Priority: HIGH (escalate immediately if the chain reaches stage 3 — a file write or execution referencing %LOCALAPPDATA%\Microsoft\GameDVR\ — or if a Run-key value named "Display Calibration" appears) FP Sources: the genuine, non-trojanized Xeno Roblox executor (filename/path collision — see Q2 FP notes); legitimate Java decompiler tooling on developer workstations (JD-GUI, CFR, Procyon — see Q3 FP notes)
Alert Package (sent when the scheduled search fires)
SUBJECT: 🚨 HUNT ALERT 🚨 — Fake Xeno Roblox Loader Detected (Possible RAT/Infostealer Staging) BODY: A process named xeno.exe executed from %LOCALAPPDATA%\Xeno\workspace\cache\ and was followed by a javaw.exe/java.exe child process referencing decompiler.exe — the documented stage-1-to-stage-2 handoff of a Java-based RAT/infostealer masquerading as an "undetected" Roblox cheat tool (Bitdefender, Aug 2026; ThreatLocker, Mar 2026). This alert fires on execution, not just a blocked attempt — treat it as active unless #event_simpleName confirms otherwise. Check first: whether SHA256HashData/MD5HashData matches the known-bad hash list (Q1 — if yes, this is a confirmed detonation, not a legitimate-tool collision), the full ImageFileName path of both stage-1 and stage-2 processes, and whether a follow-on write/exec referencing %LOCALAPPDATA%\Microsoft\GameDVR\ has already occurred (stage 3 — full RAT capability is live).
Investigation Checklist
- Blocked or executed? Check #event_simpleName — ProcessBlocked means Falcon stopped it, ProcessRollup2/SyntheticProcessRollup2 means it ran.
- Check SHA256HashData/MD5HashData against the Q1 known-sample list — a match means this is a confirmed detonation and skips the legitimate-tool ambiguity entirely.
- Confirm the child-process chain: does the xeno.exe hit have a javaw.exe/java.exe child within seconds? No child chain + no hash match = likely just the genuine Xeno tool (AUP matter, not RAT).
- Search the same aid/host for any hit on Q5 (Run key "Display Calibration"), Q6 (CMSTP from Java), or Q8 (GameDVR masquerade) in the following 5 minutes — any of these confirms stage 3 has landed and full RAT capability (keylogging, webcam, remote shell) is live.
- Search the same aid/host on Q7 for DNS/network activity to solthere[.]net, powercat[.]dog, or the *.ce953a0eb...xyz C2 root — confirms live C2 contact.
- Check the logged-on UserName and whether this is a managed corporate asset or a BYOD/personal device — shapes the containment and user-notification path.
- Check frequency environment-wide (groupBy ComputerName): a single host is a targeted/opportunistic infection; many hosts lighting up in a short window suggests a shared-download source (e.g., a compromised Discord server link) worth a broader user-comms push.
- Isolate if: execution confirmed (not just blocked) AND (hash match OR the stage-3/persistence/C2 chain above is present). Do not wait for webcam/keylogger confirmation — by the time that's visible the RAT is already fully live.
Pivot Queries
Query 1 — Confirm the full stage-1/stage-2 process chain on this host
>> YOU NEED: ComputerName (from the alert)
Alert timestamp (from the alert — set LogScale window to ±10 min)
>> FILL IN: ComputerName="REPLACE_WITH_HOSTNAME"Host-scoped
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ComputerName="REPLACE_WITH_HOSTNAME" | FileName=/^(xeno|javaw?|cmstp)(\.exe)?$/i | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, aid]) | sort(@timestamp, order=asc)
Environment-wide
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^(xeno|javaw?|cmstp)(\.exe)?$/i | CommandLine=/decompiler|GameDVR/i | groupBy([ComputerName], function=[count(as=Hits), collect(CommandLine)]) | sort(Hits, order=desc, limit=200)
Query 2 — Check for stage-3 persistence ("Display Calibration") on this host
>> YOU NEED: ComputerName (from the alert) >> FILL IN: ComputerName="REPLACE_WITH_HOSTNAME"
Host-scoped
#event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/ | ComputerName="REPLACE_WITH_HOSTNAME" | RegValueName="Display Calibration" | table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue, aid])
Environment-wide
#event_simpleName=/AsepValueUpdate|RegGenericValueUpdate/ | RegValueName="Display Calibration" | groupBy([ComputerName], function=count(as=Hits), limit=200) | sort(Hits, order=desc)
Query 3 — Check for live C2 contact on this host
>> YOU NEED: ComputerName (from the alert)
Alert timestamp (from the alert — set LogScale window to ±10 min)
>> FILL IN: ComputerName="REPLACE_WITH_HOSTNAME"Host-scoped
#event_simpleName=DnsRequest | ComputerName="REPLACE_WITH_HOSTNAME" | DomainName="solthere.net" or DomainName=/\.solthere\.net$/i or DomainName="powercat.dog" or DomainName=/\.powercat\.dog$/i or DomainName=/(^|\.)ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a\.xyz$/i | table([@timestamp, ComputerName, UserName, DomainName, aid])
Environment-wide
#event_simpleName=DnsRequest | DomainName="solthere.net" or DomainName=/\.solthere\.net$/i or DomainName="powercat.dog" or DomainName=/\.powercat\.dog$/i or DomainName=/(^|\.)ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a\.xyz$/i | groupBy([ComputerName], function=count(as=Hits), limit=200) | sort(Hits, order=desc)
Query 4 — Environment-wide frequency (single host vs. broad spread)
Environment-wide
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^xeno(\.exe)?$/i | ImageFileName=/\\Xeno\\workspace\\cache\\/i | groupBy([ComputerName], function=count(as=TotalHits), limit=500) | sort(TotalHits, order=desc)
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags md5,4bdaf7792e908f163ebef137854c571d,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,9930036e8f787674db39094e21413e77,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,9699bd6a448d0662a1e9e353223263b6,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,1a462c76efc4e73725b9e95c4a00fddb,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,7b96170259a376ea79411c5713beb396,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,2ead73ed62f1c2beb9043ce92e774e0b,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,0aadd62b535e683a5a2fe31fde546d07,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,26a94168fa25af0bcb46a18ede50af86,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,0d03faf1764297c908158da77c8ffcae,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,d123dbb5c5980bfeb22586197d2cc403,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor md5,163c8d117ef5a4e4e9c3e92a726af0eb,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor sha256,A9B4823A1B2C0702A1EB8A1BF18DB2D9C9604D2D2DD98A99F1D388BF7CFA71E3,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor sha256,A33A96CBD92EEF15116C0C1DCAA8FEB6EEE28A818046AC9576054183E920EEB5,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor sha256,C0C3A0331B57D10D23A172A79BDF13AB066255DE41774E5A19DD8A8E8446E1FA,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor domain,solthere.net,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor domain,powercat.dog,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer,campaign:FakeXenoExecutor domain,ce953a0eb08246617b7f849486c4b26a7af37e9d2e8f0e13b3ae1bf0da8a70a.xyz,detect,critical,2027-02-09,Fake Xeno / Powercat RAT-infostealer (base C2 root; NATO-phonetic subdomains also observed),campaign:FakeXenoExecutor
# Process chain: xeno.exe (from %LOCALAPPDATA%\Xeno\workspace\cache\) -> javaw.exe/java.exe
# referencing decompiler.exe within seconds of the parent's start
# Registry: Run or StartupApproved\Run value named exactly "Display Calibration"
# Process: cmstp.exe spawned with parent javaw.exe or java.exe
# File path: %LOCALAPPDATA%\Microsoft\GameDVR\{mscorlib|System.IO.Compression|System.Net.Http|
# System.EnterpriseServices|nvwgf2umx|avcodec-58|libcef}.dll (none legitimately live here)
# File names (host artifacts, not to be auto-blocked): -ntcache, SquirrelInteractive.bin, XenoIcon.jpg,
# instance.exe, RbxAnalytics.png (10-byte junk decoy)
Malware family / aliases : Fake Xeno Executor loader -> Java RAT/infostealer, tracked as "Powercat" (ThreatLocker, Mar 2026)
Obfuscator abused : Allatori (demo/commercial JAR obfuscator)
Lure vector : Trojanized build of the legitimate "Xeno" Roblox script executor
Distribution channels : Discord servers, gaming forums, compromised/impersonated accounts
Targeted platforms : Discord, Roblox, Minecraft (Feather/Lunar/Meteor/Modrinth/Prism/official),
Microsoft Store tokens, Exodus Wallet v26.1.5 (+ Atomic/Cake/SafePal/
TronWallet/Monero Wallet inventory checks)
Targeted browsers : Chrome, Edge, Brave, Opera, Opera GX, Vivaldi
# Software-inventory / ASR audit checklist (see Hardening §12 for full deployment steps)
1. Get-MpPreference | Select -Expand AttackSurfaceReductionRules_Ids
-> confirm rule 01443614-cd74-433a-b99e-2ecdc07bfc25 is present and its matching
AttackSurfaceReductionRules_Actions entry is 1 (Block) or 2 (Audit)
2. reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"
-> confirm EnableScriptBlockLogging = 1
3. Software-inventory sweep: flag any %LOCALAPPDATA%\Xeno\ or per-user JRE not sourced from a
managed deployment channel (Ninja/SCCM/Intune)
Detection Validation Gates
Telemetry Ready
Confirm ProcessRollup2/SyntheticProcessRollup2, DnsRequest, AsepValueUpdate/RegGenericValueUpdate, and JarFileWritten are enabled in the sensor policy for the target host groups. Identity Protection licensing is not required for this pack.
Benign Baseline
Run Q2, Q3, Q4, and Q8 once with a wide time window and no expectation of hits, to confirm zero baseline noise in your environment before relying on them operationally. Flag Q3 specifically if your fleet has developers who legitimately run Java decompiler tooling — that is the one query most likely to have a non-zero benign baseline.
Positive Tests (isolated/canary endpoint only, benign payloads only)
- Q5: write a registry value literally named
Display CalibrationunderHKCU\Software\Microsoft\Windows\CurrentVersion\Runon a test endpoint, confirm the query fires, then delete the test value. - Q6: from a test Java wrapper process on an isolated VM, launch
cmstp.exeagainst a benign.infprofile, confirm the query fires, then remove the test profile. - Q7: from a test endpoint, run
nslookup solthere.netornslookup powercat.dog— a bare DNS lookup is safe and does not require running any malicious code, and it should surface in the query within minutes. - Q1/Q2/Q3/Q8: do NOT detonate the real sample to validate these. Substitute the SHA256 of a known-benign test binary into Q1's hash list temporarily, or rely on the Q5/Q6/Q7 tests above as sufficient end-to-end validation of the detection pipeline.
Promotion
Q5 and Q6 are safe Detect→Block Custom IOA promotion candidates after a 14-day clean canary run. Q7 promotes to Block once you've confirmed your DNS/proxy layer doesn't already own domain blocking upstream. Q2 and Q3 stay in Detect-only mode indefinitely — both carry a documented legitimate-tool collision risk (see their FP notes) that makes Block mode inappropriate regardless of canary results.
Hardening — Tiered & Deployable
TTP: Fake Xeno Roblox Executor → Java RAT/Infostealer ("Powercat") Primary Mitigations: M1038, M1040, M1042, M1047, M1021, M1043, M1017
Block unknown/unsigned executables launched from user-writable AppData paths
This single control breaks the entire chain at its weakest point — every stage (xeno.exe, the JRE, decompiler.exe, the GameDVR JAR) runs from a user-writable AppData directory with no admin action required.
Framework: MITRE M1038 (Execution Prevention); Microsoft Defender Attack Surface Reduction rule 01443614-cd74-433a-b99e-2ecdc07bfc25 — "Block executable files from running unless they meet a prevalence, age, or trusted list criterion" (vendor guidance, Microsoft Learn ASR rules reference).
Verify/enable CrowdStrike Falcon "Suspicious Registry Operations" and Cloud Anti-Malware — Extra Aggressive in the sensor's prevention policy
Directly targets the AsepValueUpdate/RegGenericValueUpdate persistence write (Q5) and raises the ML bar against the obfuscated JAR payloads (Q1/Q3/Q8) at prevention time, not just detection time.
Framework: MITRE M1040 (Behavior Prevention on Endpoint).
Enable PowerShell Script Block Logging + Module Logging for standard (non-admin) users
Gives retroactive visibility into the hidden JRE-extraction command (Q4) and any attacker-issued Base64 PowerShell sent over the C2 channel — the single biggest telemetry gap flagged in the Coverage Map (T1059.001 attacker-issued commands).
Framework: MITRE M1042 (Disable/Remove Feature or Program) + M1047 (Audit); CIS Microsoft Windows 11 Benchmark §18.9.100 (Windows PowerShell); MS Security Baseline "Turn on PowerShell Script Block Logging".
Deploy DNS/web-proxy filtering with a newly-observed-domain / low-reputation category block, tuned to catch high-entropy hex-labeled .xyz-class infrastructure
Generic protective-DNS coverage would have caught this campaign's C2 root domain the moment it was registered, before any vendor published it by name — closes the gap for the *next* unnamed campaign, not just this one.
Framework: MITRE M1021 (Restrict Web-Based Content); ⚠ best-practice, no single formal benchmark item — cite CISA Protective DNS guidance.
Pilot Credential Guard + browser App-Bound Encryption enforcement (Chrome/Edge) on a canary ring
Raises the cost of the browser-cookie and DPAPI-credential theft this RAT performs (T1555.003); piloted first because Credential Guard can break legacy software hooking LSASS.
Framework: MITRE M1043 (Credential Access Protection); MS Security Baseline "Turn On Virtualization Based Security" / Credential Guard.
Deploy default-deny application allowlisting (WDAC/AppLocker) fleet-wide for endpoints without a legitimate need for unmanaged software installs
Closes the "any unsigned EXE from AppData can run" gap structurally, rather than relying on ASR heuristics alone; the durable fix for the entire attack-chain family, not just this campaign.
Framework: MITRE M1038 (Execution Prevention); CIS Windows Benchmark §18.x Application Control.
Stand up a recurring user-awareness track addressing gaming-related social-engineering lures (fake "undetected" cheat tools), specifically for BYOD/remote-work households with shared family devices
The lure works because it targets curiosity and a desire to bypass anti-cheat detection; a significant share of victims are minors on shared family computers per all three primary/secondary sources — awareness is the only control that reaches devices outside your management boundary entirely.
Framework: MITRE M1017 (User Training); ⚠ best-practice, no formal benchmark.
Deployable Playbooks
Step 1 — Block unsigned, low-prevalence executables from user-writable AppData paths (ASR rule)
What it does: Enables the Microsoft Defender Attack Surface Reduction rule that blocks execution of unsigned/low-prevalence executables — the exact category xeno.exe, the staged JRE launcher, and the GameDVR-dropped payload fall into.
Why it works: MITRE M1038 — this is prevention at the single weakest, earliest, and most consistent point in the entire attack chain.
Prerequisites: Windows 10 1709+ / Windows 11; Microsoft Defender Antivirus present and active (can run in passive/EDR-block mode alongside Falcon as primary AV — confirm your environment's AV-arbitration policy before enabling). Reboot required: No.
Stage 1: enable in Audit mode, confirm no legitimate business software gets flagged over 1-2 weeks, then flip to Block.
# Stage 1 — Audit mode (observe only, no blocking) Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 ` -AttackSurfaceReductionRules_Actions AuditMode # Stage 2 — after reviewing Windows Defender ASR audit events (Event ID 1122) for 1-2 weeks # with no legitimate business software flagged, promote to enforcement: Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 ` -AttackSurfaceReductionRules_Actions Enabled
GPO path (if applicable):
Computer Configuration > Administrative Templates > Windows Components > Microsoft Defender Antivirus > Microsoft Defender Exploit Guard > Attack Surface Reduction > Configure Attack Surface Reduction rules
Verify:
Get-MpPreference | Select-Object -ExpandProperty AttackSurfaceReductionRules_Ids
Rollback: Add-MpPreference -AttackSurfaceReductionRules_Ids 01443614-cd74-433a-b99e-2ecdc07bfc25 -AttackSurfaceReductionRules_Actions Disabled
Step 2 — Enable PowerShell Script Block Logging + Module Logging
What it does: Turns on Event ID 4104 (script block) and 4103 (module) logging so hidden/obfuscated PowerShell — including the JRE-extraction command this loader runs and any attacker-issued Base64 command sent later over the C2 channel — is captured in full, decoded text.
Why it works: MITRE M1042 + M1047 — directly closes the T1059.001 telemetry gap flagged in the Coverage Map for attacker-issued PowerShell.
Prerequisites: Windows PowerShell 5.0+ / PowerShell 7.x; delivered via GPO or direct registry push through your RMM tooling. Reboot required: No — new PowerShell sessions pick up the policy immediately; already-open sessions are unaffected until restarted.
Registry push (RMM/local) equivalent to the GPO below.
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging" /v EnableModuleLogging /t REG_DWORD /d 1 /f reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames" /v "*" /t REG_SZ /d "*" /f
GPO path (if applicable):
Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell > "Turn on PowerShell Script Block Logging" = Enabled; "Turn on Module Logging" = Enabled (Module Names = *)
Verify:
Get-WinEvent -LogName "Microsoft-Windows-PowerShell/Operational" -MaxEvents 5 # confirm 4104 events are populating
Rollback: reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" /v EnableScriptBlockLogging /f (repeat for the ModuleLogging key), or set the corresponding GPO back to Not Configured.
Deploying via your RMM
The scripts above are raw PowerShell/registry. To wrap them for RMM fleet deployment (admin check, error handling, custom-field writeback for compliance tracking), hand them to your RMM deployment tooling and ask for a deployable package.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the endpoint via Falcon Host Management the moment a Q1 hash match or a high-confidence behavioral hit (Q2+Q3 chain, Q5, Q6) fires. | SOC / IR lead | Falcon detection ID, contained-host timestamp |
| Isolate | RTR-collect the suspect artifacts (xeno.exe, decompiler.exe, the GameDVR-masquerading JAR, -ntcache, SquirrelInteractive.bin) before any deletion. Do not power off the host if broader spread across the environment is suspected. | IR analyst | RTR collection archive, file hashes |
| Eradicate | Kill the identified javaw.exe/java process tree; remove the "Display Calibration" value from both CurrentVersion\Run and Explorer\StartupApproved\Run. | IR analyst | Before/after registry export |
| Eradicate | Delete dropped artifacts: %LOCALAPPDATA%\Xeno\, %LOCALAPPDATA%\Microsoft\GameDVR\<masquerading name>, -ntcache, SquirrelInteractive.bin. Remove %LOCALAPPDATA%\Java\jre\ only after confirming it is not a pre-existing legitimate install. | IR analyst | Deleted-file inventory, timestamps |
| Eradicate | If Exodus Wallet v26.1.5 is present, treat app.asar as tampered — do not trust it. Block C2 indicators (§10 IOC CSV) at DNS/proxy/firewall. | IR analyst + network team | Firewall/DNS block-rule change ticket |
| Recover | From a clean device, rotate credentials for: Windows/AD (if reused), Discord (log out all devices, reset password, re-verify MFA), Roblox, Minecraft/Mojang, Microsoft account, all browser-saved logins, and any cryptocurrency wallets (move funds to a newly created wallet — treat the old seed as burned). | Affected user + identity team | Credential-rotation checklist, MFA re-enrollment log |
| Recover | For confirmed compromises involving keylogging, webcam access, or wallet tampering, the most reliable remediation is a clean OS reinstall after backing up only personal documents — not surgical cleanup. | Endpoint/desktop team | Re-image ticket, asset tag |
| Recover | Re-image or re-issue managed corporate assets. For BYOD, document the guidance given to the user and confirm whether corporate credentials were ever cached on the device during the exposure window. | IT asset management | BYOD exposure assessment note |
| Recover | Flag the affected identities for 30 days of anomalous-logon monitoring following credential rotation. | SOC | Watchlist entry, 30-day review date |
Detection Coverage Map
| Technique | Behavior | CQL | Custom IOA | Coverage |
|---|---|---|---|---|
T1204.002 | Fake loader / known-sample execution | Q1, Q2 | IOA-2 (Detect only) | Good |
T1036.008 | JAR-as-EXE / JAR-as-DLL masquerade | Q3, Q8 | — | Good |
T1059.001 | Hidden PowerShell JRE staging | Q4 | — | Partial |
T1059.001 | Attacker-issued PowerShell / interactive shell over C2 | — | — | GAP |
T1547.001 / T1112 | Run-key persistence "Display Calibration" | Q5 | IOA-1 (Block candidate) | Good |
T1548.002 | CMSTP UAC bypass from a Java parent | Q6 | IOA-3 (Block candidate) | Good |
T1071.001 / T1568.002 | C2 domains and DGA-style WebSocket root | Q7 | IOA-4 (Detect first) | Good |
T1105 / T1620 | Payload transfer / reflective in-memory load | Q7 (partial) | — | Partial |
T1497.001 / T1622 | Sandbox and debugger evasion checks | — | — | GAP |
T1056.001 / T1113 / T1125 | Keylogging, screenshot streaming, webcam capture | — | — | GAP |
T1555.003 / T1528 / T1005 | Browser, Discord, Roblox/Minecraft, Microsoft Store credential theft | — | — | GAP |
T1554 | Exodus wallet app.asar tampering | — | — | GAP |
Coverage summary: 5 of 12 mapped technique rows have Good coverage, 2 Partial, 5 GAP. The GAP rows are concentrated entirely in the RAT's surveillance and credential-theft subsystem (keylogging, screenshot/webcam capture, browser/Discord/Roblox/Minecraft/wallet credential theft) and in-process JVM behavior (sandbox evasion, reflective class loading) — none of which standard Falcon process/file/registry/network telemetry observes directly. This is an honest capability boundary, not a missing query: §7 (Native Audit-Log Hunts) documents the best available partial mitigations (Sysmon, Sensitive Process Access if licensed, DNS-layer DGA heuristics), and §12 (Hardening) closes the loader-execution gap upstream of all of it.
Priority gap: T1555.003/T1528/T1005 (credential and account theft) is the highest-impact GAP — it is the actual monetization step for the attacker and the actual harm to the victim, and it has no direct CQL detection surface in a standard Falcon deployment.
Hunt Summary Ticket
TITLE: Fake Xeno Roblox Executor — Java RAT/Infostealer ("Powercat")
SEVERITY: High (active, ongoing campaign since Jan 2026; full remote-access + surveillance
capability; disproportionately impacts minors on shared family/BYOD devices)
SCOPE: Windows endpoints — consumer, BYOD, and employee-owned gaming devices; any host
where third-party Roblox script executors are used or tolerated under AUP
HYPOTHESIS: If this campaign is active in our environment, we should see a process named
xeno.exe launched from a staged AppData workspace, followed by a javaw.exe/java.exe
child referencing decompiler.exe, a Run-key value literally named "Display
Calibration", and/or DNS resolution of solthere[.]net, powercat[.]dog, or the
ce953a0eb...[.]xyz C2 root.
QUERIES: Q1 (hash match) -> Q2 (loader path) -> Q3 (decompiler.exe) -> Q4 (hidden PS JRE
extraction) -> Q5 (Display Calibration persistence) -> Q6 (CMSTP UAC bypass) ->
Q7 (C2 domains) -> Q8 (GameDVR DLL masquerade)
DO FIRST: Run Q1 (hash, zero FP) and Q5 (registry value name, zero FP) across the full 180d/
30d window — both are exact-match, low-noise, and either alone confirms the campaign
is present without needing the ambiguous Q2/Q3 filename-collision queries.
FINDINGS: [Populate after running the queries in your tenant — Claude cannot execute CQL.
Expected positive result: any Q1 or Q5 hit; or a Q2 hit corroborated by a same-host
Q3/Q4 hit within seconds.]
GAPS: Sandbox/debugger evasion (T1497.001/T1622), reflective in-memory payload loading
(T1620), keylogging/screenshot/webcam capture (T1056.001/T1113/T1125), and browser/
Discord/Roblox/Minecraft/wallet credential theft (T1555.003/T1528/T1005/T1554) have
NO standard Falcon telemetry coverage — see Coverage Map (S15) and Native Audit-Log
Hunts (S7) for partial mitigations (Sysmon, Sensitive Process Access, DNS-layer DGA
heuristics).
ACTIONS: Deploy Q1/Q5 as Custom IOA rules in Block mode after a 14-day clean canary run
(IOA-1); deploy Q6 similarly (IOA-3); deploy Q7 in Detect mode, promote to Block
once DNS/proxy-layer coverage is confirmed (IOA-4); keep Q2/Q3 in Detect-only
indefinitely due to legitimate-tool collision.
OWNER: HuntPack
VERSION: v0.1 — 2026-08-09Changelog
References
| Tier | Source | Used For | Access Date |
|---|---|---|---|
| T2 | BleepingComputer | Campaign overview, recency confirmation, capability summary; explicitly names Bitdefender as originating researcher | 2026-08-09 |
| T1 | Bitdefender Labs | PRIMARY technical writeup — full attack chain, C2 URLs/domain, 11 MD5 hashes, file paths, persistence mechanism, capability deep-dive | 2026-08-09 |
| T1 | ThreatLocker Threat Intelligence | PRIMARY earlier-variant technical writeup (Mar 2026) — original "Powercat" naming, SHA256 hashes, powercat[.]dog domain, confirms C2 root domain is stable across campaign lifetime | 2026-08-09 |
| T2 | GBHackers | Corroborating summary + re-published Bitdefender IOC table | 2026-08-09 |
| T2 | GBHackers | Corroborating summary, earlier publication date (Aug 4) for timeline cross-check | 2026-08-09 |
| T2 | Cyber Press | Corroborating summary; explicit defender guidance line ("hunt for suspicious Java execution from %LOCALAPPDATA%") | 2026-08-09 |
| T2 | ThreatsEye Journal | Independent timeline reconstruction (Jan/Mar/Aug 2026 milestones) corroborating the campaign duration | 2026-08-09 |
| T3 | MalwareTips Forums | Community discussion of the Bitdefender report; independently-written incident-response checklist used to inform the Containment Runbook (§14) | 2026-08-09 |
All sources fetched and saved verbatim to XenoExecutor-RAT-Hunt-sources/ on 2026-08-09 for provenance. No prompt-injection or instruction-like content was observed in any fetched source.