IntroductionIn late April 2026, a client reached out to us for incident response support after discovering a miner running on users’ computers. We later discovered that the malware was being distributed via illegal movie and TV show streaming sites. The infection chain leveraged a fake update for a video player plugin. When the user attempted to watch a video, the player displayed a message saying the plugin version was outdated and asking to install an update to continue.Clicking the link downloaded a ZIP archive with the following contents:The archive contained a legitimate executable, HLS Installer.874.exe, alongside a malicious DLL. Launching the EXE triggered a DLL side-loading mechanism, injecting the malicious module into a legitimate program process and executing code within its context. The library contained the logic for deploying the miner and establishing persistence on the device.At the time of the investigation, the infection risk was associated with two pirated video sites in the .ru and .top TLDs.Link to previous campaignsThe current incident does not appear to be an isolated case. After analyzing the infection vector and the logic of the DLL, we concluded that this activity is a continuation of a campaign involving pirated digital libraries, which was previously described by another cybersecurity company.The delivery mechanism for the malicious archive has remained virtually unchanged. Previously, the archive was downloaded in parts from the domain file[.]ipfs[.]us[.]69[.]mu, but this domain was unavailable at the time of our investigation. Instead, the threat actor employed a new website, urush1bar4[.]online.The structure of the archive has also been preserved: inside is a legitimate executable and a large malicious DLL (see the screenshot below).In the course of our research, we also discovered a blog post by NTT Security describing a similar delivery method for a malicious archive. In that instance, the threat actors displayed a fake browser crash page (shown below) while simultaneously downloading an archive to the device with a name starting with chromium-patch-nightly.This scenario resembles the current scheme involving the fake video player plugin update. Given the previously described activity, it’s safe to assume that this campaign has been active since at least 2022. Throughout this entire period, the threat actor has been updating both the downloadable malware and individual parts of the infection mechanism.Potential distribution scaleAs in previous episodes of the campaign, infections occur via highly popular websites. As of late April 2026, sites linked to the campaign typically displayed extremely high monthly traffic. For instance, the audience for the smallest of the free digital libraries stood at 11,000 users, while the largest reached 4.7 million. For pirated movie and TV show streaming sites, this figure ranged from 2.1 million to 27.4 million. In April, the total number of visits to websites where the malware described in this study was detected reached 40 million.The popularity of these sites increases the potential scale of the miner’s distribution. Furthermore, the campaign is not limited to a single type of platform: the malicious archive is being distributed through both online digital libraries and movie and TV show streaming sites. This broadens the potential range of victims and makes it more difficult to attribute the threat to a single infection vector.The downloadable archiveThe current version of the downloadable malware is a ZIP archive containing a legitimate EXE file and a malicious DLL. When the executable runs, the library side-loads into its process, triggering the malicious logic.The technical analysis that follows covers the current version of this malware. This version was first observed in April 2025 and has been distributed unmodified for over a year.DLL analysisMost of the data inside the DLL carries no meaningful weight and was randomly generated just to inflate the file size and impede analysis.Amidst the large volume of junk code inside the DLL, there is a single function that triggers a stack overflow during execution:Based on the code, the size of the stackBuf buffer on the stack is only 64 bytes, and the SmashStack function overwrites this buffer without validating the length of the input data.This overflow constructs a ROP chain that decrypts the next stage. After decryption, it transfers execution to code located within the modified DOS header of the PE file:The header was intentionally modified to make it into valid shellcode:pop r10push r10call $+5pop rcx sub rcx, 9mov rax, rcxadd rax, 5C1000hcall raxretnThis shellcode passes control to a function located at offset 0x5C1000 from the base of the PE file. This function then reflectively loads the same PE file into memory.Going forward, we will refer to this decrypted PE file as the main module.Main moduleThe module’s behavior across its different operational stages is detailed below:The main module is a modified fork of the SilentCryptoMiner project. We have previously analyzed miners leveraging this project in other posts: Scam Information and Event Management and Undercover miner: how YouTubers get pressed into distributing SilentCryptoMiner as a restriction bypass tool. However, this specific fork has not been documented anywhere before, which is why we decided to break down its unique features in detail in this article.Upon an initial run, the main module checks whether it has permission to proceed with execution. To do this, it collects the following data from the victim’s device:Processor informationThe serial number of the C:/ driveWhether the process was launched with elevated privilegesThe process start time in Unix timestamp formatThe information is transmitted as a single large DNS query using the DNS tunneling technique. An example of the DNS query is shown below:The attackers disguise the DNS query as legitimate traffic through low-level packet crafting and by using a domain name ending in microsoft.com. However, the IP address to which the query is actually sent has no relation to Microsoft.DNS query crafting codeThe execution of the main module proceeds only if the following byte sequence is detected in the response: 01 02 03 04. Following a successful check, the main module launches, and the subsequent logic is adjusted depending on whether the process has elevated privileges on the compromised host.Let’s look at both scenarios: 1. The process is launched with elevated privileges. In this case, preparatory steps precede the miner launch:The malware adds Windows Defender exclusions for EXE and DLL files, as well as for the %USERPROFILE%, %PROGRAMDATA%, and %WINDIR% folders.It kills Microsoft’s Malicious Software Removal Tool (MSRT) by calling ZwSetInformationFile with the FileDispositionInformation type, which causes the mrt.exe file to be deleted upon closing. To prevent MSRT from being automatically installed during the next update, the DontOfferThroughWUAU parameter is created with a value of 1 under the HKLM\Software\Policies\Microsoft\MRT registry key.Automatic hibernation and sleep mode are disabled for when the device is running on both AC power and battery.powercfg /x -hibernate-timeout-ac 0powercfg /x -hibernate-timeout-dc 0powercfg /x -standby-timeout-ac 0powercfg /x -standby-timeout-dc 0This is done to maximize the miner’s potential runtime on the device.Next, to achieve persistence, a copy is created in the C:\ProgramData\Google\Chrome directory, after which the GoogleUpdateTaskMachineQC service is registered and configured to launch automatically at system startup.Finally, four reflexive loads are executed: the components are injected directly into the memory of the target processes without writing to disk, having bypassed standard Windows loading mechanisms. Each implant is injected into its own host process:RAT agent → into conhost.exeWatchdog → into explorer.exeCPU miner → into explorer.exeGPU miner → into explorer.exe, but only if a discrete GPU is present in the system. This is verified by enumerating all display adapters in the system. 2. The process is launched with standard privileges. In this scenario, the miner begins repeatedly triggering User Account Control (UAC) prompts until it is successfully executed with elevated privileges. The workflow is as follows:Upon initial execution, a copy is made to the %USERPROFILE%\AppData\Roaming\Sandboxie directory and relaunched from there. Simultaneously, an attempt is made to launch it with elevated privileges via UAC.If execution occurs from the Sandboxie folder:Persistence is configured for the miner copy in this folder by adding an entry to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.Every three minutes, an attempt is made to launch with elevated privileges via UAC until the GoogleUpdateTaskMachineQC service is successfully installed.A successful installation requires all of the following conditions to be met:The GoogleUpdateTaskMachineQC service exists in the system.The Start value for this service is set to 2 (Automatic).The ImagePath value points to a file in the C:\ProgramData\Google\Chrome folder.This file exists on disk.WatchdogThe purpose of this component is to ensure the uninterrupted operation of the miner. At the very beginning of its execution, it copies all files from the C:\ProgramData\Google\Chrome folder and encrypts the contents of each file using a cyclic XOR algorithm with the key AFeIboiOmImJS2ypJU0pTpAO61SELkUc. After that, the encrypted contents are written into the process memory, and the following structure is created in memory for each file:class FileContainer{wchar_t* fullPath; // full path to filesize_t* ptrSize; // pointer to file sizeuint8_t* xorEncryptedFile; //pointer to buffer containing encrypted file contents};As soon as the contents of all files are saved in memory, Watchdog enters an infinite loop, where every five seconds, it checks the integrity of the installed GoogleUpdateTaskMachineQC service, just as the main module does. If the service is found to be incorrectly installed, the miner overwrites its files in the C:\ProgramData\Google\Chrome path with the contents acquired at startup.To successfully remediate the miner, this module, which runs inside the explorer.exe process, must be terminated first.RAT agentThis module provides remote control capabilities via four commands, which are described at the end of this section. The command-and-control addresses used to receive these commands follow this format:http://{domain}.space/index.php?authorization=1http://{domain}.site/index.php? backup versionThe {domain} is calculated based on the current date. The process starts with the current year, then adds the zone identifier for the current month. All 12 months are divided into four zones. Finally, the word microsoft is appended to the resulting string. This final string is used as the input for subsequent double hashing using the MurmurHash64 algorithm. The hash output is the domain for the implant to communicate with.At the time of writing this, the following domains were registered:2025, April-July → 5d14vnfb[.]space2025, August-November → r7mvjl67[.]space2025, December → zgj1tam9[.]space2026, January-March → jeaw520i[.]space2026, April–July → qdmagva5[.]spaceAn example of a request to the C2 server is provided below:As can be seen, the request contains an encrypted body consisting of data encrypted via AES-CBC with the key 0123456789abcdef0123456789abcdef and the initialization vector 000102030405060708090a0b0c0d0e0f. The data contains a list of installed programs on the system, along with processor information and the serial number of the C: drive.This information is likely used by the backend to check for virtual or debugging environments.The first 16 bytes of the server response body represent the initialization vector for the AES-CBC algorithm with the key 0123456789abcdef0123456789abcdef, while the remaining bytes are the data encrypted with this algorithm. The decrypted data contains a malicious payload, as well as its RSA-SHA256 signature (sign):struct PLAINTEXT{ uint32_t len_payload; uint8_t payload[len_payload]; uint32_t len_sign; uint8_t sign[len_signature]; }The authenticity of the message is verified via the sign signature using the server’s public key, which is embedded in the executable.Inside the malicious payload is a 4-byte code that determines the subsequent behavior of the program, along with additional data whose meaning depends on the code.The table below lists the four remote control commands for the RAT agent module.CodePurpose1Execution of an arbitrary command2Reflexive execution of the provided PE file within the explorer.exe process3Execution of the provided shellcode4ExitThe minersDepending on whether a discrete GPU is present in the system, either the CPU miner alone or a combination of the CPU and GPU miners is launched. The CPU miner is based on XMRig, while the GPU miner supports multiple algorithms.Upon initial execution, both miners attempt to retrieve their startup configuration from a remote server. The potential addresses are listed below:“{domain}.strangled.net”“{domain}.ignorelist.com”“{domain}.ftp.sh”“{domain}.zanity.net”As with the RAT agent component, the server address is generated from the current date — in this case, the server address changes every week. This results in quite a large number of domains for the 2020–2030 period; however, all of them point to the same IP address: 107[.]172[.]212[.]235. The first available domain out of the four potential domains listed above will be used.The algorithm for retrieving the configuration from the server is completely identical to that used by the RAT agent, with the sole exception that th1s1sth3key0f4n1ntere5t1ngw0rld is used as the AES-CBC key in this scenario, and the configuration resides within the payload. The retrieved configuration is encrypted via AES-CBC using the key UXUUXUUXUUCommandULineUUXUUXUUXU and the initialization vector UUCommandULineUU. The encrypted data is then converted into a base64 string, which is passed as a command-line parameter to launch the miner inside the explorer.exe process through process hollowing.ConclusionOur investigation focused on an ongoing campaign distributing miners via popular illegal content sites. The threat actors leverage a variety of sites, ranging from online libraries to movie and TV show streaming platforms. There is no telling what channels they will use to distribute the malicious archive in the future. However, the current case shows that users visiting pirated websites continue to take a serious risk.Our products detect this malware with the following Generic verdicts:HEUR:Trojan.Win64.DllHijack.genMEM:Trojan.Win32.SEPEH.genIndicators of CompromiseMalicious archive download URLurush1bar4[.]onlineMalicious DLL libraries:6A0FE6065D76715FEEBC1526D456DB737F624407AE489324E96A708A09C17E6F02A43B3423367B9DDDC24CC7DFC070DFRAT C&C:5d14vnfb[.]spacer7mvjl67[.]spacezgj1tam9[.]spacejeaw520i[.]spaceqdmagva5[.]spaceConfiguration retrieval address107[.]172[.]212[.]235UnamWebPanel control panel addressesm4yuri[.]onlinekristina[.]quest