UNOPLAY.ME - DISCORD MALWARE (HADES)
1. Attack Vector & Front-End Delivery
The infection chain originated from a domain impersonating an online multiplayer card game:
- Primary Lure URL:
https://unoplay.me/download/ - Hosting Infrastructure: Hostinger AS47583 (IPs:
93.127.179.240,77.37.83.120) - Direct Payload Mirror: Dropbox CDN (
https://dl.dropboxusercontent.com/scl/fi/fgw8s8ooovxntjlyapwp6/UnoApp.exe?rlkey=r5bm8tx14s30drgltwncveegs&st=6lj5bf8e&dl=1)
The website provided a functional multiplayer lobby where visitors selected nicknames and custom avatars. Once inside, the host used social engineering to convince the victim that the web client was only a waiting room. When the host clicked "Start Game", the client triggered an automated notification:
The host started the game. Continue in the UnoPlay app.
Simultaneously, the operator reiterated in chat: "You need to download it."
2. Payload Anatomy & Static Analysis
The downloaded executable presented the following specifications:
- Filename:
UnoApp.exe - Filesize: 124,557,270 bytes (~118.8 MB)
- MD5:
8a96906b58c6f587b9d004d10b037655 - SHA-256:
034d830703c6462ef75b1db62ac98b2c7778a3271c45d116352d3aa7c64c704b - Architecture: NSIS wrapping an Electron runtime (v41.0.3, x64).
Deconstruction of the Electron Archive
Extracting resources/app.asar revealed that the author avoided plain JavaScript to bypass heuristic antivirus engines. The core logic was compiled into V8 bytecode:
- Bytecode File:
app.protected.jsc(3,265,000 bytes) - Compilation Utility: Bytenode v1.5.7
- Native Node Bindings:
better-sqlite3.node&sqlite3: Used for querying local SQLite databases (browser history, cookies, credentials).koffi.node: C FFI bridge used to call native Windows API functions (advapi32.dll,ncrypt.dll,crypt32.dll) directly from memory.node.napi.node(datavault-win): Custom binary component interfacing with Windows DPAPI and token manipulation APIs.socket.io-client&ws: Interactive real-time remote control and live desktop video streaming.
Cryptographic String Table
All operational strings within app.protected.jsc were encrypted using AES-256-CBC. Static analysis of the initialization routines recovered the master key:
- Algorithm: AES-256-CBC
- Key (Hex):
d38c802ec12fe7e435baba71104a02bb0a79fc4b027ccb83e363744b38bee770 - Chrome CNG DPAPI Hash:
CCF8A1CEC56605B8517552BA1A2D061C03A29E90274FB2FCF59BA4B75C392390
Decryption of the 688 embedded strings identified the binary as a customized build of the HADES Infostealer & Remote Access Trojan (RAT).
Reconstructed 24-Module Source Code Architecture
By mapping bytecode segment boundaries and decrypting local constant pools, we reverse engineered the entire original source tree into 24 distinct JavaScript modules (now open-sourced in the repository under decompiled_malware/source_code/):
config.js: Master configuration containing C2 endpoints, Telegram ID, buyer license, and path definitions for 15 browser families.core/WinApi.js&core/Privilege.js: FFI bindings to Windows kernel and security tokens (SeDebugPrivilege,AdjustTokenPrivileges,DuplicateTokenEx).crypto/KeyDecryptor.js&crypto/DataDecryptor.js: AES-GCM and DPAPI decryptors with Chrome v127+ App-Bound bypass.services/AntiVM.js: Comprehensive environment checks against hypervisors, sandboxes, and security analysts.services/ApiSender.js: HTTP POST exfiltration dispatcher to C2 endpoints.services/BrowserDataCollector.js: Recursive credential and cookie scraper for Chromium and Gecko profiles.services/CommandExecutor.js: Interactive Socket.IO RAT and wiper engine.services/Discord.js: Token extractor, relationship scraper, anddesktop_coreinjector.utils/applySystemLockdown.js&utils/disableTaskManager.js: Ransomware screen locker and explorer shell execution killer.utils/terminateAndRemoveBrowsers.js: Browser process termination and User Data wiping routine.utils/wallet.js: Targeted scraper for 20+ cryptocurrency wallets and browser extensions.utils/GetHWID.js,utils/Logger.js,utils/NetworkInfo.js: Fingerprinting and telemetry utilities.
3. Malware Capabilities & Internal Mechanics
A. Browser Credential & Session Exfiltration
The malware targets 15 browser families (Chrome, Edge, Brave, Opera, Opera GX, Vivaldi, Yandex, Slimjet, Orbitum, Atom, Torch, Amigo, CocCoc, Uran, Firefox).
- Chrome App-Bound Encryption Bypass: The malware interacts with
ncrypt.dllto duplicate elevated tokens and decrypt Chrome v127+ credentials using container hash:CCF8A1CEC56605B8517552BA1A2D061C03A29E90274FB2FCF59BA4B75C392390 - Local Staging: Extracted data is compressed into
%LOCALAPPDATA%\hades_cache\logs.zip. - Execution Log: Runtime state is written to
%LOCALAPPDATA%\hades_log.txt("--- HADES LOGGER INITIALIZED ---").
B. Cryptocurrency Wallet Theft
The wallet.js module systematically searches for desktop cryptocurrency wallets (Exodus exodus.wallet, Atomic leveldb, Electrum) and targets specific browser extension keystores by extension ID:
- MetaMask:
nkbihfbeogaeaoehlefnkodbefgpgknn - Coin98:
bfnaoomepdephakmegedneabnneijbbe - Trust Wallet:
egjidjbpgmcnheetpkhadkkclpchoofn - Binance Chain Wallet:
efbglgjekebbhclcjgreakbbghbcaffg
C. Discord Hooking & QR Code Blinding
The binary inspects %APPDATA%\Discord (including Canary, PTB, and Vesktop) and patches desktop_core/index.js with a persistent webhook listener. To prevent users from using mobile QR authentication (which bypasses credential entry), the malware injects SVG replacement code:
<svg height="160" viewBox="0 0 37 37" width="160"><rect width="37" height="37" fill="#ffffff"/></svg>
This renders the QR login box completely white, forcing victims to manually input credentials and 2FA recovery codes, which are intercepted immediately.
D. Remote Access Trojan (RAT) & Browser Wiper Protocol
The malware maintains a real-time bidirectional Socket.IO connection to the C2 server for interactive remote control, exposing the following remote commands:
windows-lock: Enforces registry lockout (DisableTaskMgr = 1,NoControlPanel = 1), terminatesexplorer.exe, downloadskilit.png, and renders an unclosable full-screen ransom notification.deletebrowsers: Destructive wiper mode. Force-kills all browser processes, pauses 3 seconds (timeout /t 3 /nobreak), and recursively deletes all User Data directories in%LOCALAPPDATA%.screen: Initiates live desktop screen streaming back to the operator.screenshot: Captures an immediate desktop snapshot and uploads via/api/v1/capture/submit.-Command: Arbitrary remote command execution viapowershell -ExecutionPolicy Bypass -Command "...".reinject: Re-applies Discord or browser hooks if removed by security software.
E. Anti-Analysis & Hypervisor Detection
The AntiVM.js module performs multi-layered pre-execution checks:
- Hypervisors: Checks BIOS manufacturer strings for
innotek,oracle corporation,vbox,proxmox, and searches for driver artifactC:\Windows\System32\drivers\vmtray.dll. - Resolution Check: Queries primary screen width via PowerShell (
[System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width); aborts if width is under 800 pixels. - Sandbox Usernames: Blocks execution on known analysis accounts:
LIWCHIIM,BRUNO,PATEX. - Antivirus Scanning: Executes WMIC query against
Win32_Productscanning for security suites (Kaspersky, Norton, McAfee, Bitdefender, Avast, AVG).
F. Ransomware Lockscreen Artifacts (kilit.png)
Forensic inspection of the downloaded lockscreen image (https://i.hizliresim.com/oojtro9.png) revealed key authoring metadata:
- Software Metadata Chunk:
Paint.NET 5.1.11(authored on a Windows workstation). - Local Filename:
kilit.png(Turkish for "lock"). - Lockscreen Text:
[SYSTEM ALERT] YOUR ENTIRE SYSTEM AND ALL FILES ARE LOCKED. EVERYTHING WILL BE SOLD ON ONLINE MARKETS IF YOU DO NOT RESPOND. [RECOVERY UNAVAILABLE]
4. Network Telemetry & C2 Infrastructure
| Parameter | Value | Description |
|---|---|---|
| C2 Host | ytfg6bx9mvkh.hellodcuser.com |
Primary Command & Control server (Apex: hellodcuser.com) |
| C2 IP Addresses | 93.127.179.240, 77.37.83.120 |
Hostinger International Ltd (AS47583, Lithuania/Cyprus) |
| Registrar | NameSilo, LLC | Registration date: June 17, 2026 at 14:01:20 UTC |
| x-tg-id | 8690153935 |
Immutable 64-bit Telegram user ID receiving victim log archives |
| x-license-key | B31C6E241AC846728DA9C1FAC4936651CFFB944D143AB816276BCC6DA0284787 |
HADES MaaS commercial customer license token |
| System Mutex | HADES_zz_390E413A8CCC2D4B43FEF926519C2070 |
Operator build tag (zz) |
REST API Exfiltration Endpoints
All exfiltration HTTP POST requests require three mandatory headers (x-tg-id, x-license-key, x-hwid); missing headers return the hardcoded Turkish error: "❌ Eksik parametre: adminID, licenseKey ve hwid zorunludur."
POST /api/v1/passwords/report— Transmits decrypted browser passwords (saved intoallpassword.txt).POST /api/v1/discord/tokens/report— Transmits Discord tokens, user badges, and verified billing emails.POST /api/v1/discord/friends/report— Scrapes Discord relationships for secondary social engineering.POST /api/v1/discord/clients/register— Registers successful Discord client injections.POST /api/v1/anti-vm/report— Telemetry reporting sandbox detection events.POST /api/v1/capture/submit— Uploads desktop screen captures and webcam frames.POST /api/v1/exfiltrations/submit— Uploads complete ZIP archives (logs.zip).
5. The Cloud Database Pivot (Supabase Telemetry)
Reverse engineering the client-side JavaScript on unoplay.me revealed that lobby synchronization was managed entirely by Supabase:
- Project Reference ID:
myvuxkwbjpdkxaaonded - REST URL:
https://myvuxkwbjpdkxaaonded.supabase.co - Exposed API Key:
sb_publishable_PQ3I5cbposewZF-1T-s--Q_SH89IrU_ - Auth Settings: Twilio SMS provider integration and email authentication enabled.
Because the tables lacked Row-Level Security (RLS) read restrictions, we queried the REST endpoint and dumped the entire operational dataset across the campaign lifespan:
unoplay_rooms: 59 records (active through late September 7 UTC)unoplay_room_members: 144 recordsunoplay_messages: 224 records
6. Forensic Evidence & Threat Actor Attribution
A. Direct Confession & Real Identity
At 23:40 UTC on September 6, 2026, the operator created room 9274M2F under his real identity:
- Operator Handle:
turkay(Türkay) - Session ID:
host_B76TXKQTC645R4LTY4H5NFVDHXQ4 - Associate:
wwd(guest_TSTXZQQPQY3K5MG7TK2U2DJGGPAQ)
[2026-09-06 23:40:26] turkay: naber (what's up)
[2026-09-06 23:40:32] turkay: sovme la essek (don't curse, donkey)
[2026-09-06 23:40:39] turkay: bura bizim anonim yer ("this is our anonymous place")
[2026-09-06 23:40:47] turkay: burdan gizli verileri aktarcaz ("we will exfiltrate the secret data from here")
[2026-09-06 23:40:51] turkay: ayiktin ("you get it?")
In an earlier room (VU4EJQ3, created at 23:11 UTC), associate qwe confirmed the operator's name in plain text:
[2026-09-06 23:12:12] qwe: alalhını sıkeyım turkay
B. Social Engineering Personas & Lures
The operator rotated through several female gamer personas (clove, Nadja, Lina, cccccc, ffe, yuy):
- Windows Environment Enforcement: In room
832S43F, victimmarcostated he was on mobile. The operator refused to start:clove: telefondamısın (are you on phone?) marco: Evt pc kapalı (yes, PC is off) clove: pcden oynanıyor bu ("this is played on PC") - Fake Voice Chat Hook: In room
E84MYSW, Turkish victimssecrewandkaanasked for voice chat:secrew: SES NERDE (where is voice?) cccccc: OYUN BASLAYINCA ACILIYOR ("Voice chat opens once the game starts") - Discord Redirection: In room
N6ZPG6M, operator pivoted victimPaulout-of-band to Discord to maintain pressure.
C. Linguistic & Turkish Origin Artifacts
- Hardcoded Turkish slang in bytecode:
aynenenai(Turkish: "aynen enayi" — "exactly, sucker"). - UAC elevation failure message:
Admin yetkisi yok, temizlik yapılamıyor. - Mandatory parameter check:
❌ Eksik parametre: adminID, licenseKey ve hwid zorunludur. - Operating hours peaked between 15:00 UTC and 23:45 UTC, directly correlating to 18:00 – 02:45 Turkish Standard Time (UTC+3).
D. Comprehensive Campaign Metrics
- Total Unique Civilian Nicknames: 48 across 78 guest sessions.
- High-Risk Victims (Game Reached Playing Status): 44 unique civilian nicknames (72 distinct sessions) across 29 completed attack rooms (92.3% of joined users).
- Early Evaders: 4 users who disconnected prior to game launch.
7. Judicial Subpoena Targets & Remediation
The completed forensic dossier established actionable subpoena targets for law enforcement (Emniyet Genel Müdürlüü Siber Suçlarla Mücadele Daire Başkanlığı, USOM, FBI IC3, Interpol):
- Telegram Legal (ID
8690153935): Subpoena for registered phone number (MSISDN), account creation timestamp, registration IP address, and login history. - NameSilo, LLC (Domain
hellodcuser.com): Account subscriber records, payment transaction details, and DNS modification IP logs. - Hostinger International Ltd (IPs
93.127.179.240,77.37.83.120): VPS customer identity, payment receipts (crypto/credit card), and SSH connection logs (/var/log/auth.log). - Supabase, Inc. (Project
myvuxkwbjpdkxaaonded): Project owner email, linked GitHub/Google developer profile, and dashboard management IP audit trails. - Dropbox Abuse: Terminated malicious mirror for file ID
fgw8s8ooovxntjlyapwp6.
8. Analytical Conclusions & Code Repository
This case highlights a common asymmetry in contemporary cybercrime: while the adversary deployed commercial crimeware evasion (V8 Bytenode compilation, AES string encryption, Chrome CNG DPAPI bypasses), operational security collapsed completely at the architecture and communication layers:
- They hardcoded client-accessible Supabase credentials without Row-Level Security.
- They exposed their real handle (
turkay) during initial testing and explicitly confessed their exfiltration intent in recorded chat records. - They left permanent, immutable identifiers (Telegram ID
8690153935and MaaS licenseB31C6E...) embedded directly inside the compiled binary.