GuLoader
GuLoader is a shellcode-based downloader/loader malware family active since at least 2019 and still under active development. It is commonly memory-resident and is used to deliver a wide range of commodity malware, including Agent Tesla, NetWire, FormBook, NanoCore, Parallax RAT, Remcos, XLoader, LokiBot, 404Keylogger, AsyncRAT, VenomRAT, XWorm, Lumma, Vidar, and VIPKeylogger. Reported delivery vectors include phishing attachments and lures, embedded macros in malicious Word documents, NSIS self-extracting installers, VBScript- and PowerShell-based chains, malicious LNK/URL/WebDAV workflows, compromised websites using fake CAPTCHA/ClickFix social engineering, and exploitation of WinRAR CVE-2023-38831 via crafted archives.
Across reporting, GuLoader is associated with financially motivated cybercrime activity and has also appeared in broader intrusion chains used by groups including Bluebottle/OPERA1ER and campaigns attributed to Storm-0249 infrastructure delivery. It has targeted businesses, including Italian and international firms, banks in Francophone African countries, and general Windows users reached through phishing or compromised websites.
Technically, GuLoader commonly uses encrypted shellcode and executes largely in memory. Variants include VB/VB6 wrappers, VBScript-based loaders, and NSIS-packaged samples. It dynamically resolves APIs, decrypts shellcode in multiple stages, and can inject shellcode into a donor process created in a suspended state; RegAsm.exe has been specifically observed as a donor process, and other legitimate processes such as ieinstal.exe, aspnet_regbrowsers.exe, and aspnet_compiler.exe have appeared in related delivery chains. Observed injection and hollowing-related APIs and techniques include CreateProcessInternalW, NtMapViewOfSection, NtWriteVirtualMemory, WriteProcessMemory, MapViewOfSection, and NtResumeThread. Later-stage shellcode has been observed using WinINet APIs such as InternetOpenUrlA to contact command-and-control infrastructure and download follow-on payloads.
GuLoader incorporates extensive anti-analysis and anti-debugging features. Reported behaviors include anti-VM and anti-sandbox checks using ZwQueryVirtualMemory, CPUID hypervisor checks, RDTSC timing checks, EnumWindows window-count checks, QEMU artifact checks, EnumDeviceDrivers, and installed-product enumeration via MsiEnumProductsA/MsiGetProductInfo. Anti-debugging includes patching DbgBreakPoint, modifying DbgUiRemoteBreakin behavior, calling NtSetInformationThread with ThreadHideFromDebugger, checking debug registers DR0-DR5 for hardware breakpoints, and scanning for software breakpoint bytes such as 0xCC. Newer variants also use vectored exception handler (VEH)-based control-flow obfuscation, deliberately raising access violations, single-step exceptions, and int3 breakpoints, then altering EIP at runtime to hinder disassembly and debugging.
Observed infrastructure and indicators directly mentioned in the content include autum-path[.]vo8xalon[.]in[.]net, UNC path \autum-path[.]vo8xalon[.]in[.]net\05fe317c-0981-4de2-bc8a-930d369db441\ck-3d, 188[.]114[.]96[.]7, 188[.]114[.]97[.]7, bsc-testnet[.]drpc[.]org, data-seed-prebsc-1-s1[.]bnbchain[.]org, hxxp://178.73.192[.]15/ca1.exe, Google Drive URLs used to host shellcode/payloads, holzbrenzii[.]com, corwineagles[.]com, onionmail[.]org SMTP infrastructure, and sample hashes including d55259bcf47af7e645ab7b003aa2cd4071cb36c6, 5fcfdf0e241a0347f9ff9caa897649e7fe8f25757b39c61afddbe288202696d5, and 350c7cdc9d10c12ae1c490890975e387421616170f710ebbf9fa6d29fbf4b7dc. The content also notes GuLoader campaigns exfiltrating stolen data through SMTP, Telegram, and FTP when paired with delivered stealers such as Agent Tesla and VIPKeylogger.
Hunt this family in your stack
Mallory pivots from this family to the IOCs, detections, and named campaigns that touch your stack, and pages you when something new lands.
Vulnerabilities exploited
1 CVE Mallory has correlated with this family across public research and vendor advisories. Each row links to the full Mallory page for that vulnerability.
Cybercriminals exploited this vulnerability to deliver various malware families, including DarkMe and GuLoader, by crafting ZIP archives with spoofed extensions, which were then distributed on trading forums. | Group-IB Threat Intelligence unit discovered a zero-day vulnerability, CVE-2023-38831, in WinRAR, a popular compression tool. Cybercriminals exploited this vulnerability to deliver various malware families, including DarkMe and GuLoader, by crafting ZIP archives with spoofed extensions.
Groups observed using it
2 distinct threat actors attributed by public researchers. Open in Mallory to see the full evidence chain and overlapping campaigns.
Earlier this April, the Redmond-based company warned of several phishing campaigns leveraging tax-related themes to deploy malware such as Latrodectus, AHKBot, GuLoader, and BruteRatel C4 (BRc4). The phishing pages, it added, were delivered via RaccoonO365, with one such campaign attributed to an initial access broker called Storm-0249.
"...Visual Basic loaders —including the Guloader malware dropper discovered by Proofpoint on December 2019."
Techniques & procedures
31 distinct techniques documented for this family, organized by ATT&CK tactic.
Resource Development
1 technique
Resource Development
Initial Access
4 techniques
Initial Access
The attack targets users who arrive at a legitimate-looking website through a Google search, with no phishing email or suspicious link involved... Malicious code hidden in the site’s WordPress backend quietly waits to activate under the right conditions.
The campaign chains a compromised WordPress site... Every layer is built to appear legitimate, giving most traditional defenses no reason to intervene.
Execution
8 techniques
Execution
The purpose of this code is to call the PowerShell interpreter and pass it the code of the script collected in the “pa0” variable as a parameter.
When executed, it establishes a connection to an external file share, typically via WebDAV, to download an LNK or VBS file.
When executed, the LNK/VBS executes a BAT or CMD file that downloads a Python installer package and a series of Python scripts leading to malware installation.
The content repeatedly mentions malicious macros in Word/Excel documents, such as "enable macros," "embedded macros," and "macro-enabled documents."
The command calls rundll32.exe... pointing it to a remote DLL hosted by the attacker over a UNC path. The DLL loads directly into memory with no file written to disk.
The overlay tells the user to press Win+R, Ctrl+V, and Enter... the victim runs it willingly, believing it to be a routine check.
In some cases, the malware was named to trick the user into thinking it was a PDF file, e.g.: fiche de poste.exe ... fiche de candidature.pdf.exe
An attacker can edit that struct in order to manipulate execution on that address by setting the RIP (on x64) register, when resuming from that exception. | On Windows, as specified in MSDN documentation, it is possible to programmatically handle a specific exception by registering a VECTORED_EXCEPTION_HANDLER (VEH), which will manage the execution to handle that condition.
Persistence
2 techniques
Persistence
Across the content, malware repeatedly 'adds Registry Run keys', 'creates Registry entries', 'modifies the Windows Registry', or 'overwrites registry keys' to maintain persistence.
The content repeatedly describes malware and threat actors establishing persistence by adding values under HKCU/HKLM\Software\Microsoft\Windows\CurrentVersion\Run or RunOnce, and by placing executables, scripts, or .lnk files in the Startup folder. | Examples include AppleSeed creating 'HKCU\Software\Microsoft/Windows\CurrentVersion\RunOnce', AvosLocker executed via the RunOnce Registry key, NanoCore creating a RunOnce key, and Raspberry Robin setting a RunOnce key.
Privilege Escalation
4 techniques
Privilege Escalation
The RegAsm process will be spawned in a suspend mode which indicates process hollowing injection... This instruction will write a second shellcode to the RegAsm process.
The DLL loads directly into memory with no file written to disk and no prompt shown.
The RegAsm process will be spawned in a suspend mode which indicates process hollowing injection... the first shellcode creates the RegAsm process and injects a second shellcode into it with a unique variation of the Process Hollowing injection.
The content repeatedly describes malware and threat actors establishing persistence by adding values under HKCU/HKLM\Software\Microsoft\Windows\CurrentVersion\Run or RunOnce, and by placing executables, scripts, or .lnk files in the Startup folder. | Examples include AppleSeed creating 'HKCU\Software\Microsoft/Windows\CurrentVersion\RunOnce', AvosLocker executed via the RunOnce Registry key, NanoCore creating a RunOnce key, and Raspberry Robin setting a RunOnce key.
Stealth
12 techniques
Stealth
Next, we see a function named 602F54 ... responsible for accessing the process environment block (PEB) and returning an API call.
The RegAsm process will be spawned in a suspend mode which indicates process hollowing injection... This instruction will write a second shellcode to the RegAsm process.
The DLL loads directly into memory with no file written to disk and no prompt shown.
The RegAsm process will be spawned in a suspend mode which indicates process hollowing injection... the first shellcode creates the RegAsm process and injects a second shellcode into it with a unique variation of the Process Hollowing injection.
The content repeatedly describes threat actors and malware deleting files, tools, scripts, logs, droppers, staged data, and artifacts from compromised systems to cover tracks, remove evidence, or self-delete.
The command calls rundll32.exe, a trusted signed Windows tool... Because rundll32.exe is a Microsoft-signed binary, it clears SmartScreen without any warning.
Malware also uses this technique for anti-analysis, an issue we explored in a previous blog post about an advanced anti-analysis techniques discovered in GuLoader.
Now, this register holds the API call EnumWindows ... After we step over the call to EnumWindows, we see the line: cmp eax,c. Using this line the shellcode determines if there are at least 12 ... windows in the machine. If not, the process will be terminated. | Next, we see the function 602038, if we step over it and we’ll see the string “ C:\Program Files\qqa\qqa.exe ”. This is because 602038 functionality is to search whether the Qemu gues agent is located on the machine. | Inside the function 601F28, there is another routine that consists of two anti-analysis mechanisms. Time cheks using RDTSC (Read Time-Stamp Counter), and anti-VM using CPUID. | The function will use the API call ZwQueryVirtualMemory ... scan the process’s memory... Each one of them will represent a string that is related to a Virtual Machine product ... If one of these strings will be found ... the process will create the previously mentioned message box.
Inside the function 601F28, there is another routine that consists of two anti-analysis mechanisms. Time cheks using RDTSC (Read Time-Stamp Counter), and anti-VM using CPUID.
the script allocates 2 memory areas, downloads the data from the link to Google Drive, and saves it to a temporary file “%APPDATA%\Umig.For”.
An attacker can edit that struct in order to manipulate execution on that address by setting the RIP (on x64) register, when resuming from that exception. | On Windows, as specified in MSDN documentation, it is possible to programmatically handle a specific exception by registering a VECTORED_EXCEPTION_HANDLER (VEH), which will manage the execution to handle that condition.
In the next two calls, we see a call to 602F54 which resolves NtSetInformationThread... The second argument is ThreadHideFromDebugger (11), which in this case will cause the process to crash if it's working under a debugger. | In its first lines, the shellcode gets the function DbgBreakPoint ... writes the byte 90 into it... Then, the shellcode will do the same with DbgUiRemoteBreaking ... every time a breakpoint will be happening the process will be terminated. | In this technique, the shellcode will get the API call to be executed from the EAX register ... and will inspect if any software breakpoints assign to it. If it has any software breakpoint, it will have one of the breakpoint opcodes(for example, 0xCC which means INT 3). | The shellcode will compare any of these registers to the number 0, if one of them is not 0 that means there is a hardware breakpoint. In this case, the shellcode will jump ... and the process will be terminated.
Defense Impairment
1 technique
Defense Impairment
Discovery
5 techniques
Discovery
Malware also uses this technique for anti-analysis, an issue we explored in a previous blog post about an advanced anti-analysis techniques discovered in GuLoader.
Now, this register holds the API call EnumWindows ... After we step over the call to EnumWindows, we see the line: cmp eax,c. Using this line the shellcode determines if there are at least 12 ... windows in the machine. If not, the process will be terminated. | Next, we see the function 602038, if we step over it and we’ll see the string “ C:\Program Files\qqa\qqa.exe ”. This is because 602038 functionality is to search whether the Qemu gues agent is located on the machine. | Inside the function 601F28, there is another routine that consists of two anti-analysis mechanisms. Time cheks using RDTSC (Read Time-Stamp Counter), and anti-VM using CPUID. | The function will use the API call ZwQueryVirtualMemory ... scan the process’s memory... Each one of them will represent a string that is related to a Virtual Machine product ... If one of these strings will be found ... the process will create the previously mentioned message box.
Inside the function 601F28, there is another routine that consists of two anti-analysis mechanisms. Time cheks using RDTSC (Read Time-Stamp Counter), and anti-VM using CPUID.
Using other pre-computed hashes, the shellcode searches for installed products with the API MsiEnumProducA and MsiGetProductInfo.
In the next two calls, we see a call to 602F54 which resolves NtSetInformationThread... The second argument is ThreadHideFromDebugger (11), which in this case will cause the process to crash if it's working under a debugger. | In its first lines, the shellcode gets the function DbgBreakPoint ... writes the byte 90 into it... Then, the shellcode will do the same with DbgUiRemoteBreaking ... every time a breakpoint will be happening the process will be terminated. | In this technique, the shellcode will get the API call to be executed from the EAX register ... and will inspect if any software breakpoints assign to it. If it has any software breakpoint, it will have one of the breakpoint opcodes(for example, 0xCC which means INT 3). | The shellcode will compare any of these registers to the number 0, if one of them is not 0 that means there is a hardware breakpoint. In this case, the shellcode will jump ... and the process will be terminated.
Command and Control
2 techniques
Command and Control
Exfiltration
1 technique
Exfiltration
IOCs tracked for this family
59 indicators attributed across vendor reports, sandbox runs, and researcher write-ups. Full values are available in Mallory.
IPs, domains, and DNS infrastructure linked to this family.
File hashes (MD5, SHA-1, SHA-256) from samples and reports.
Other indicator types observed in public reporting.
Recent activity
65 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.
A shellcode-based, memory-resident loader/downloader attributed via C2 infrastructure in this campaign. It is described as running entirely in memory and commonly used to drop infostealers such as Lumma and Vidar and remote access tools including Remcos and AgentTesla.
Mentioned as a malware family that uses the resource section to hide payloads.
Gremlin stealer uses the resource section to mirror the tactics of several high-profile malware families that frequently use this area for payload obfuscation, including: Agent Tesla, GuLoader, LokiBot, Quasar RAT.
GuLoader is referenced as malware that uses hardware breakpoints and vectored exception handling as an anti-analysis technique to manipulate execution flow without noisy memory patching.
The version that knows your environment.
Match every observed IP, domain, and hash against your live telemetry.
Named campaigns wielding this family, with evidence pinned to each claim.
CVEs this family uses for access and lateral movement.
YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.
Every documented technique, ranked by evidence weight.
Reddit, Mastodon, and CTI community discussion around this family.