blog@jarscanner:~#

Malware Analysis of “CrowControl” Remote Access Trojan.

This report provides a detailed technical analysis of the CrowControl malware sample. The analysis covers its PyInstaller based installation process, WebSocket command-and-control, credential theft, remote access functionality, surveillance features, fake application presets, and anti analysis mechanisms. The sample is a Windows Remote Access Trojan (RAT) and credential stealer designed to establish persistent unauthorized remote control over compromised systems.

The supplied agent source was extracted from a PyInstaller compiled executable. A separate decompilation and analysis of embedded modules such as grabber.pyc confirms theft of Google Chrome saved passwords and Discord authentication tokens.


1. Executive Summary

The analyzed CrowControl sample is a Python based Windows Remote Access Trojan distributed as a PyInstaller executable, Although CrowControl may also come in Jar files, sadly at the time of this analysis I did not have a JAR sample due to them being available for only paid memberships. The malware establishes a WebSocket connection to a configurable command-and-control server and provides the operator with interactive control over the infected machine.

The hardcoded C2 endpoint for this MaaS is:

ws://manage.gleeze.com:3000

After connecting, the agent sends a register_agent message containing the victim’s hostname, operating system, screen resolution, monitor information, startup status, public IP address, geographical information, persistent device identifier, and a builder assigned userToken.

CrowControl provides screen streaming, remote mouse and keyboard input, CMD and PowerShell command execution, file browsing and exfiltration, file upload, process listing and termination, webcam capture, microphone capture, keylogging, Chrome password theft, Discord token theft, live chat, wallpaper changes, audio playback, system shutdown/restart, application blocking, and remote self deletion.

The malware also contains a strong persistence mechanism. When running as a frozen PyInstaller executable it copies itself into a hidden %LOCALAPPDATA% directory under a system like name, creates a hidden backup copy, deploys a VBScript watchdog, registers a hidden Scheduled Task, and adds a registry Run-key fallback. The watchdog is designed to restore the executable if it is deleted and restart the malware if the process is killed.

CrowControl includes multiple fake application presets intended to disguise the initial execution and make it seem like a legitimate software. These include a cheat client, cracked software installer, Discord Nitro generator, PC optimizer, cryptocurrency brute-forcer, skin changer, fake hacking tool, GTA VI downloader, and Minecraft modpack installer.


2. File Metadata and Indicators of Compromise

2.1 Sample Information

Item Value
Malware Family CrowControl
Classification Remote Access Trojan / Credential Stealer
Platform Windows
Language Python
Packaging PyInstaller executable
Agent Source agent.pyc
Grabber Module grabber.pyc
Agent Source Size 119,658 bytes
Agent Source Lines 2,360
Default C2 ws://manage.gleeze.com:3000
Default C2 Port 3000/TCP
Startup Task CrowControlAgent

2.2 Host and Network IOCs

Indicator Type Purpose
ws://manage.gleeze.com:3000 Network Default WebSocket C2
manage.gleeze.com Domain Default C2 hostname
3000/TCP Port Default C2 port
CrowControlAgent Scheduled Task Startup persistence
svc_helper.vbs File Watchdog script
_svchlp.xml File Temporary task XML
CrowControl_task.xml File Startup task XML
cc_cleanup.bat File Self deletion script
%APPDATA%\CrowControl\device.id File Persistent device identifier
%LOCALAPPDATA%\RealtekAudioPlayer\blocked_apps.json File AppBlocker state
HKCU\Software\Microsoft\Windows\CurrentVersion\Run Registry Persistence fallback
127.0.0.1:29847 Local Socket Single instance mechanism

2.3 Disguised Identities

CrowControl can install itself using several system-like identities.

Executable Directory / Task Identity
EdgeUpdate.exe MicrosoftEdgeUpdate
GoogleCrashHandler.exe GoogleCrashReporter
RealtekHDAudio.exe RealtekHDAudioService
IntelRSTService.exe IntelRapidStorageTech
NVDisplay.Container.exe NVDisplayContainer
OneDriveStandaloneUpdater.exe OneDriveService
MsMpEng.exe WindowsDefenderSvc
DiscordUpdater.exe DiscordService
SteamService.exe SteamClientService
AdobeARM.exe AdobeUpdateManager

The Scheduled Task name can be formed by appending Watchdog, for example MicrosoftEdgeUpdateWatchdog, GoogleCrashReporterWatchdog, or WindowsDefenderSvcWatchdog.


3. Execution Flow

CrowControl implements a multi stage installation and execution flow. The visible executable may display a fake application interface while a copied background agent is installed and launched separately.

3.1 Stage 1: PyInstaller Entry Point

The main entry point checks:

getattr(sys, "frozen", False)

and references sys._MEIPASS, both standard PyInstaller runtime artifacts.

The agent supports:

--server
--no-admin-check
--boot-delay
--skip-preset

3.2 Stage 2: Hidden Installation

The malware selects one of its disguised identities and creates an installation under %LOCALAPPDATA%.

%LOCALAPPDATA%\MicrosoftEdgeUpdate\EdgeUpdate.exe
%LOCALAPPDATA%\MicrosoftEdgeUpdate\.sys\EdgeUpdate.exe
%LOCALAPPDATA%\MicrosoftEdgeUpdate\.sys\svc_helper.vbs

The executable is copied into both the main path and the hidden .sys backup directory. The directories and files are assigned hidden/disguised attributes to reduce visibility.

3.3 Stage 3: Watchdog and Persistence

The generated svc_helper.vbs watchdog waits after launch, checks if the main executable still exists, restores it from the backup if necessary, queries WMI for the malware process, and relaunches the agent when it is no longer running.

A hidden Scheduled Task executes:

wscript.exe //B //Nologo "%LOCALAPPDATA%\MicrosoftEdgeUpdate\.sys\svc_helper.vbs"

The task contains a logon trigger and a repeating time trigger. CrowControl additionally writes a fallback value under:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

A separate startup helper creates the task CrowControlAgent and launches the agent with:

--no-admin-check --skip-preset

3.4 Stage 4: C2 Registration

The background agent connects to the configured WebSocket server and sends:

register_agent

with fields including:

deviceId
hostname
os
resolution
startup
userToken
monitor_count
monitors
ip
country
country_code
city
lat
lng

The embedded USER_TOKEN is UUID formatted and is sent inside the WebSocket registration JSON.

After registration the malware waits for JSON commands and dispatches them to its RAT functions.


4. Social Engineering and Fake Application Presets (trojan)

CrowControl contains multiple fake application interfaces that can be selected through the builder. These interfaces simulate real software behavior while the RAT executes in the background.

Preset Disguise
hackingclient Cheat / hacking client
crackedsoftware Cracked software installer
nitrogenerator Discord Nitro generator
pcoptimizer PC optimizer
cryptobrute Cryptocurrency brute-forcer
skinchanger Game skin changer
skidtool Fake hacking utility
gta6downloader GTA VI downloader
minecraftmodpack Minecraft modpack installer

The supplied configuration contains:

PRESET_TYPE = none
PRESET_GAME = Fortnite
PRESET_SOFTWARE = AimBot Pro
PRESET_THEME = matrix

The cheat client displays fake initialization, license validation, and fabricated anti-cheat/injection errors. The Nitro generator creates random discord.gift/... strings and labels them as valid or invalid. The crypto preset fabricates BTC, ETH, and SOL wallet balances. Other presets simulate installation, downloading, optimization, or mod setup.

This design allows different CrowControl builds to appear unrelated even though they share the same underlying RAT code and C2 protocol.


5. Credential Theft

The recovered grabber.pyc module confirms direct credential theft. The agent remotely invokes:

grabber.grab_all()

after receiving the command:

grab_tokens

and returns the data through the existing WebSocket as:

grabbed_tokens

The grabber returns:

{
    "passwords": grab_chrome_passwords(),
    "discord_tokens": grab_discord_tokens()
}

5.1 Chrome Password Theft

CrowControl reads:

%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Local State

to obtain Chrome’s os_crypt.encrypted_key.

It then targets:

%USERPROFILE%\AppData\Local\Google\Chrome\User Data\default\Login Data

The database is copied into the temporary directory as:

ChromeData.db

and queried with:

SELECT origin_url, username_value, password_value FROM logins

The malware uses Windows CryptUnprotectData and contains an AES-GCM decryption path for Chromium protected password values.

Recovered entries contain:

url
username
password

5.2 Discord Token Theft

CrowControl searches Discord and Chromium data for authentication tokens.

paths include:

%APPDATA%\discord
%APPDATA%\discordcanary
%APPDATA%\Lightcord
%APPDATA%\discordptb
%APPDATA%\Opera Software\Opera Stable
%APPDATA%\Opera Software\Opera GX Stable
%LOCALAPPDATA%\Amigo\User Data
%LOCALAPPDATA%\Torch\User Data
%LOCALAPPDATA%\Kometa\User Data
%LOCALAPPDATA%\Orbitum\User Data
%LOCALAPPDATA%\CentBrowser\User Data
%LOCALAPPDATA%\7Star\Sputnik\Default
%LOCALAPPDATA%\Vivaldi\Default

The decompiled path list is truncated after the Vivaldi entry, so the original bytecode may contain additional targets.

For each application CrowControl searches:

Local Storage\leveldb

and reads .ldb and .log files looking for:

dQw4w9WgXcQ:

The matched Base64 data is decrypted using the application’s Chromium encryption key when available.

5.3 Credential Exfiltration

The grabber does not contain a separate exfiltration service. Stolen passwords and tokens are returned through the CrowControl WebSocket C2. For this build the default destination is:

ws://manage.gleeze.com:3000

6. Remote Access and Surveillance

CrowControl provides command surface for interactive remote access.

Capability Implementation
Screen Capture Windows GDI + mss
Mouse / Keyboard pyautogui
Webcam OpenCV VideoCapture
Microphone PyAudio
Keylogging External keylogger module
CMD Shell cmd.exe /c
PowerShell Shell powershell.exe -ExecutionPolicy Bypass
File Browser List/download/upload/delete/rename
Folder Theft ZIP archive returned over C2
Process Control psutil process listing and killing
System Information CPU/RAM/disk/network/OS/user/IP/geo
Live Chat Tkinter chat window
App Blocking Repeated process termination
Shutdown / Restart Windows shutdown commands
Wallpaper SystemParametersInfoW
Audio Windows Media Player COM via PowerShell
Message Boxes MessageBoxW
Self Destruct Removes persistence and deletes files

6.1 Screen and Input Control

CrowControl uses Windows GDI functions such as:

GetDC
CreateCompatibleDC
CreateCompatibleBitmap
BitBlt
GetDIBits
DrawIconEx

and also uses mss for screen capture. Frames are converted to JPEG and sent through the C2.

Relevant values include:

CAPTURE_FPS = 12
JPEG_QUALITY = 45
MAX_FRAME_W = 1280
MAX_FRAME_H = 720
SCREEN_FPS = 12
SCREEN_QUALITY = 50

Remote input is performed with pyautogui, supporting mouse movement, clicking, scrolling, key presses, and typing. The sample disables PyAutoGUI’s normal fail-safe:

pyautogui.FAILSAFE = False

6.2 Webcam and Microphone

The webcam is opened with:

cv2.VideoCapture(0, cv2.CAP_DSHOW)

and frames are JPEG encoded before being Base64 encoded and sent as webcam_frame.

The microphone stream uses 16-bit mono PCM at 16 kHz and sends Base64 encoded chunks as:

mic_chunk

6.3 Remote Shell and Files

CMD commands execute through:

cmd.exe /c <command>

and a PowerShell path uses:

powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command <command>

File operations include:

fs_list
fs_download
fs_download_folder
fs_delete
fs_rename
fs_upload

The maximum configured file size is 256 MiB.


7. Network Communication Indicators

CrowControl uses a WebSocket based C2 protocol with JSON messages.

7.1 Default C2

ws://manage.gleeze.com:3000

The use of ws:// rather than wss:// means the default configuration does not request TLS for the WebSocket connection.

7.2 C2 Data Types

The same connection is used for registration, commands, and stolen data.

Observed message strings include:

register_agent
registered
grabbed_tokens
keylogger_data
webcam_frame
mic_chunk
terminal_output
fs_file_data
ps_list_data
sys_info_data

Binary data such as screenshots, webcam frames, files, and microphone chunks is commonly Base64 encoded before being placed into JSON. Base64 is encoding rather than encryption.

7.3 Operator Commands

audio_play
audio_play_data
audio_stop
chat_close
chat_message
chat_open
fs_delete
fs_download
fs_download_folder
fs_list
fs_rename
fs_upload
get_blocked_apps
get_monitors
get_startup_status
grab_tokens
input
keylogger_start
keylogger_stop
mic_start
mic_stop
open_url
ps_kill
ps_list
rdp_key
rdp_mouse
rdp_start
rdp_stop
rdp_type
restart
self_destruct
set_blocked_apps
set_startup
set_wallpaper
show_msgbox
shutdown
stream_mode
subscribe
switch_monitor
sys_info
terminal_close
terminal_input
terminal_open
unsubscribe
webcam_start
webcam_stop

7.4 Public IP / Geolocation Services

CrowControl also contacts:

http://ip-api.com/json/
https://ipapi.co/json/
https://api.ipify.org

8. Anti Analysis and Evasion Techniques

Technique Implementation Effect
VM System Checks WMI manufacturer/model/BIOS strings Detects common virtual machines
VM Registry Checks VMware, VirtualBox and Microsoft VM keys Detects guest tools
VM Process Checks vmtoolsd.exe, vboxservice.exe, qemu-ga.exe, etc. Detects analysis environments
Analysis Process Checks Includes wireshark.exe and sandbox process names Avoids monitored systems
MAC OUI Checks VMware, VirtualBox, Hyper-V, QEMU prefixes Detects virtual NICs
Resource Checks Low CPU and RAM heuristic Detects lightweight sandboxes
Masquerading Microsoft/Google/Realtek/NVIDIA/etc. names Blends into AppData
Hidden Files Hidden/system attributes Reduces visibility
Silent Exceptions Broad exception swallowing Hides failures
Fake Application UI Configurable decoy software Social engineering
PyInstaller Packaging Bundles Python runtime and modules Complicates casual inspection
Watchdog Recovery Restores/restarts deleted or killed agent Increases persistence

9. MITRE ATT&CK Mapping

Technique ID CrowControl Behavior
User Execution: Malicious File T1204.002 Fake applications encourage execution
Masquerading T1036 System-like executable and directory names
PowerShell T1059.001 Remote PowerShell execution
Windows Command Shell T1059.003 CMD execution and cleanup batch
Visual Basic T1059.005 VBScript watchdog
Scheduled Task T1053.005 Hidden logon/repeating persistence
Registry Run Keys T1547.001 HKCU Run fallback
Hidden Files and Directories T1564.001 Hidden install and backup
Virtualization/Sandbox Evasion T1497.001 VM checks
Process Discovery T1057 Process enumeration
System Information Discovery T1082 CPU/RAM/OS/hostname/user collection
System Network Configuration Discovery T1016 Local/public IP collection
File and Directory Discovery T1083 Remote file browsing
Input Capture: Keylogging T1056.001 Keylogger control
Credentials from Web Browsers T1555.003 Chrome saved password theft
Steal Web Session Cookie / Token T1539 Discord authentication token theft
Screen Capture T1113 GDI/MSS screen capture
Audio Capture T1123 Microphone streaming
Video Capture T1125 Webcam streaming
Data from Local System T1005 File and credential collection
Ingress Tool Transfer T1105 Remote file upload
Application Layer Protocol: Web Protocols T1071.001 WebSocket JSON C2
Exfiltration Over C2 Channel T1041 Files, credentials and surveillance data
File Deletion T1070.004 Self destruct
System Shutdown/Reboot T1529 Remote shutdown/restart

10. Detection and Mitigation Recommendations

10.1 YARA Detection Rule

The following YARA rule targets extracted or unpacked CrowControl content.

rule CrowControl_RAT_Unpacked {
    meta:
        description = "Detects unpacked CrowControl RAT and credential stealer artifacts"
        severity = "critical"

    strings:
        $c1 = "CrowControl Agent" ascii wide
        $c2 = "CrowControl remote-control agent" ascii
        $c3 = "ws://manage.gleeze.com:3000" ascii

        $p1 = "svc_helper.vbs" ascii wide
        $p2 = "System Service Watchdog" ascii wide
        $p3 = "--no-admin-check" ascii
        $p4 = "--skip-preset" ascii

        $g1 = "grab_tokens" ascii
        $g2 = "grabbed_tokens" ascii
        $g3 = "ChromeData.db" ascii wide
        $g4 = "dQw4w9WgXcQ:" ascii
        $g5 = "Local Storage\\leveldb" ascii wide

        $k1 = "keylogger_start" ascii
        $k2 = "keylogger_data" ascii

    condition:
        5 of them
}

10.2 Endpoint Detection

Endpoint monitoring should look for a sequence similar to:

PyInstaller-like EXE
    ->
copy into hidden %LOCALAPPDATA% directory
    ->
create hidden .sys backup
    ->
write svc_helper.vbs
    ->
create Scheduled Task
    ->
write HKCU Run value
    ->
connect to manage.gleeze.com:3000

The following process pattern is especially suspicious when launched from a user AppData path:

wscript.exe //B //Nologo <path>\svc_helper.vbs

10.3 Credential Theft Detection

Chrome theft can be detected by monitoring non-browser processes accessing:

Google\Chrome\User Data\Local State
Google\Chrome\User Data\default\Login Data

followed by creation of:

%TEMP%\ChromeData.db

Discord token theft can be detected by suspicious access to:

Discord\Local Storage\leveldb

or equivalent Chromium LevelDB directories.

10.4 Network Detection

Network monitoring should prioritize:

DNS: manage.gleeze.com
TCP: destination port 3000
Protocol: WebSocket

If payload inspection is possible, CrowControl-specific JSON strings such as register_agent, grabbed_tokens, keylogger_data, webcam_frame, mic_chunk, and terminal_output provide stronger signatures.

fun fact

CrowControl is extremely vibecoded from start to finish, From frontend to actual payload and they have fake “Live Session Feed” for some reason lol:

image image


-thank you for reading