← ALL FILES REPAIR · Analysis
WebRAT Go Stealer Analysis
Malware analysis · 2026-11-01 · static + sandbox run

WebRAT Go Stealer Analysis

Verdict: maliciousGo infostealer and remote-access tool. Primary C2 sa1atik.cn, with TON-domain fallback.

Sample

File
cd9c972e…2a0067.exe (from ZIP, password infected)
SHA-256
cd9c972e46b2cf283be8227c67417a4c5bb2009fc91a14b0845f20d86e2a0067
MD5
1eeff92eb40e0409bab1e159c2e629bb
Type
PE32 GUI, x86, 12.5 MB, 6 sections, Go 1.24
Size of analysis
5,526 procedures · 22,713 strings · 300 main.* functions recovered

How it was analyzed

1 · TriageUnzipped into an isolated directory. strings showed Go packages, stealer routines and TON/Steam helpers.
2 · rea / GhidraFirst import timed out at 330 s. With a 30-minute limit it finished. Ghidra's Go parser failed on this binary, so no main.* names were applied.
3 · GoReSymRecovered 300 main.* names with addresses. rea decompile-all then decompiled 0x8cd9f0 to 0x8eba90 by address.
4 · Config decryptionmain.dec is a multi-stage routine (XOR key array, 129-dword table, rotates, 0x9e3779b9). Static reading was not enough.
5 · Sandbox runRan under Wine in an empty network namespace for about two minutes, dumped memory, killed it. The decrypted config was in the dump.

Command-and-control chain

Primaryhttps://sa1atik.cn/sa1at/
The sample tried this first; the lookup failed because the network was off.
Fallback 1webratxaye1.ton
Resolved through tonapi.io and the ton.access.orbs.network API (runGetMethod).
Fallback 2remoteadministratortool.ton
tonapi.io/v2/dns/…/resolve
Name lookupsDNS over HTTPS via dns.google, 1.1.1.1 and cloudflare-dns.com. Transport includes HTTP/2, HTTP/3 (QUIC) and websockets.

Code paths also show a Steam-profile decoder (decodeSteam) and a tg:// link finder, which suggests two more places the server address can be hidden. I did not observe either being used.

Capabilities

Credential and data theft

  • Chrome, Edge, Brave, Yandex and other Chromium logins, cookies, autofill
  • Chrome app-bound key (GetAppBoundKey, decryptAPPB)
  • Firefox-family NSS store (key4.db, nssPBE)
  • Discord tokens, Steam, Telegram tdata, Ethereum keystore, many wallet extensions

Privilege and access

  • Finds LSASS and impersonates SYSTEM (findLsassProcess, impersonateSystem)
  • DuplicateUserTokenFromSessionID, Elevate
  • Reports Admin rights: to the server

Surveillance

  • Keylogger (runKeylogger, klog)
  • Screenshots (getScreen, sendScreen), active window title
  • Host profile: HWID, GPU, GEO, user time, build ID and version

Remote control

  • doTask loop with shellCommand, executeCommand, downloadFile
  • SOCKS-style proxy and forwarding code
  • RDP libraries, ffmpeg.exe and 7z.exe fetched from GitLab

Defense impairment (script in memory)

  • Add-MpPreference -ExclusionPath for Program Files, AppData, LocalAppData
  • reagentc /disable turns off Windows recovery reset
  • EnableLUA = 0 disables UAC

Persistence and cleanup

  • staticinstall and a CurrentVersion\Run string suggest autorun
  • Suicide suggests self-delete
  • Neither was confirmed in the sandbox run

Indicators of compromise

TypeValueSource
SHA-256cd9c972e46b2cf283be8227c67417a4c5bb2009fc91a14b0845f20d86e2a0067observed
Domainsa1atik.cnobserved memory + failed lookup
URLhttps://sa1atik.cn/sa1at/observed
TON domainwebratxaye1.tonobserved
TON domainremoteadministratortool.tonobserved
URLhttps://tonapi.io/v2/dns/remoteadministratortool.ton/resolveobserved
URL prefixhttps://gitlab.com/webrat1/importantfiles/-/raw/main/observed
Files7z.exe · 7z.dll · ffmpeg.exe · MSTSCLib.dll · AxMSTSCLib.dll in %TEMP%observed in script
RegistryHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA = 0observed in script
Commandreagentc /disableobserved in script
BehaviorUnknown Go binary spawns powershell.exe, taskkill /F /PIDfrom strings

Not recorded: the real IP of sa1atik.cn and the content the TON domains resolve to, because the sandbox had no network. Treat the Defender exclusions, UAC change and GitLab downloads as capability evidence: the script was in memory, but Wine could not run it.

ATT&CK mapping

TechniqueEvidenceConfidence
T1555.003 Credentials from web browsersChromium and Gecko decryption routines, app-bound keycode + strings
T1134 Access token manipulationimpersonateSystem, DuplicateUserTokenFromSessionIDcode + strings
T1056.001 KeyloggingrunKeylogger, klogcode + strings
T1113 Screen capturegetScreen, sendScreencode + strings
T1568 Dynamic resolutionTON DNS, DoH lookupsobserved
T1102 Web serviceGitLab staging, Steam decoderobserved / inferred
T1059.001 PowerShellEmbedded script, powershell.exeobserved
T1562.001 Impair defensesAdd-MpPreference -ExclusionPathobserved in script
T1112 Modify registryEnableLUA = 0observed in script
T1490 Inhibit system recoveryreagentc /disableobserved in script
T1105 Ingress tool transferGitLab downloads, downloadFileobserved in script
T1560 Archive collected datazipAddFS, 7z.execode + strings
T1021.001 Remote Desktop ProtocolMSTSCLib, AxMSTSCLibinferred
T1547.001 Registry run keysCurrentVersion\Run stringinferred

YARA rules

Two rules. The first matches the executable on disk. The second matches decrypted config and the dropper script in a process dump.

webrat_go.yar · YARA 4
rule MAL_WebRAT_Go_Stealer_Nov2026
{
    meta:
        description = "Go-based WebRAT-style infostealer / RAT (TON + DoH C2 resolution, Chromium app-bound key theft, keylogger)"
        author      = "analysis via rea + GoReSym + sandbox run"
        date        = "2026-11-01"
        sha256      = "cd9c972e46b2cf283be8227c67417a4c5bb2009fc91a14b0845f20d86e2a0067"
        reference   = "local analysis"

    strings:
        // Go symbol names present in pclntab
        $f1 = "main.decodeFromTonAddress" ascii
        $f2 = "main.tryTonResolve" ascii
        $f3 = "main.GetAppBoundKey" ascii
        $f4 = "main.findLsassProcess" ascii
        $f5 = "main.impersonateSystem" ascii
        $f6 = "main.runKeylogger" ascii
        $f7 = "main.decodeSteam" ascii
        $f8 = "main.DecryptGecko" ascii
        $f9 = "main.staticinstall" ascii

        // operator log / status strings
        $s1 = "steal finished!" ascii
        $s2 = "SSLPIN DISABLED" ascii
        $s3 = "CONN BEST ENABLED" ascii
        $s4 = "found tg:// url" ascii
        $s5 = "bestConnMethod" ascii
        $s6 = "NO PREAPPBENCKEY ERR" ascii
        $s7 = "FOUND BC: GOT RESULT" ascii

        // resolver / lookup endpoints stored in clear
        $r1 = "https://dns.google/resolve?name=" ascii
        $r2 = "SELECT a11, a102 from nssPrivate" ascii

    condition:
        uint16(0) == 0x5A4D and filesize < 30MB and
        (
            ( 5 of ($f*) ) or
            ( 4 of ($s*) and 2 of ($f*) ) or
            ( $r1 and $r2 and $f3 )
        )
}

rule MAL_WebRAT_Go_Stealer_Memory_Config
{
    meta:
        description = "Decrypted C2 config and dropper script in process memory or a memory dump"
        sha256      = "cd9c972e46b2cf283be8227c67417a4c5bb2009fc91a14b0845f20d86e2a0067"
    strings:
        $c1 = "sa1atik.cn" ascii wide
        $c2 = "webratxaye1.ton" ascii wide
        $c3 = "remoteadministratortool.ton" ascii wide
        $c4 = "gitlab.com/webrat1/importantfiles" ascii wide
        $p1 = "Add-MpPreference -ExclusionPath" ascii wide
        $p2 = "reagentc /disable" ascii wide
        $p3 = "EnableLUA" ascii wide
    condition:
        any of ($c*) or all of ($p*)
}

Validation

TargetRuleResult
Original sampleNov2026match (all 9 function and 7 status strings hit)
Memory dump of the runMemory_Configmatch
/usr/bin, /usr/local/bin, Wine librariesbothno matches
GoReSym (a benign Go binary)bothno match

The static rule keys on Go symbol names, so a rebuild with garble or stripped symbols will evade it. The status strings and DoH endpoint give a second route. Test against a larger clean corpus before deploying it as a blocking rule.

What to do

Block

  • sa1atik.cn at DNS and proxy
  • Alert on .ton lookups through tonapi.io from endpoints
  • GitLab webrat1 path

Hunt

  • SHA-256 above
  • 7z.exe, ffmpeg.exe, MSTSCLib.dll in %TEMP%
  • Defender exclusions on AppData and Program Files
  • Unexpected EnableLUA=0

If a host ran it

  • Treat browser, Discord, Steam, Telegram and wallet credentials as stolen
  • Rotate from a clean device; revoke sessions
  • Move wallet funds
  • Reimage; recovery reset may be disabled

Limits of this analysis