389e1ccf072f134de9d3b007df0952f43f2dc0c3a4f55fbe6f3035d1d0c14dc09d2ca3: 389e1ccf — EclipseV2.exe, Go 1.25.4 x64 sibling with fabricated GoDaddy-masquerade cert
Executive Summary
PE32+ x64 GUI binary compiled from Go 1.25.4 with CGO_ENABLED=0 and -trimpath=true. 43 randomized main.* function names, fused-string API decoding via syscall._LazyProc_, and a fabricated Authenticode certificate with godaddy.com and WE1 strings. Static-only (no CAPE Windows guest); no hardcoded C2 recovered. Strong build-pattern match to the Go infostealer cluster documented at 9d2ca3 and golang-stealer-build-pattern.
What It Is
- File:
EclipseV2.exe, 2.48 MB, PE32+ x64 GUI, 8 sections ^[file.txt] ^[pefile.txt] - Compiler: Go 1.25.4,
GOARCH=amd64,GOOS=windows,CGO_ENABLED=0,-trimpath=true^[strings.txt:9] ^[strings.txt:1917] - Module path: randomized
LUOegnbUmXZeMZT(no meaningful source paths) ^[strings.txt] - Build ID:
R4dfDFKpwug7jLHg7jce/Zt00OXyqJ_Y6YAIrjnRh/toOyFtlwo_LZKSLLK-61/oPpzLWq_G_tPaX86Dn3H^[strings.txt:9] - Signing: Authenticode WIN_CERTIFICATE present (type 2, PKCS, 2168 bytes). Raw cert strings include
godaddy.com0,260501222919Z,260730232908Z, andWE10. Direct X.509 parsing fails, consistent with fabricated/self-signed certificates in sibling samples ^[binwalk.txt] ^[rabin2-info.txt:27] - No
.rsrcsection, no version info, no exports ^[pefile.txt] ^[exiftool.json]
How It Works
The binary is standard Go runtime bootstrap (entry0 at 0x1400743a0) into main.main. No packer, no shellcode — the obfuscation is entirely compile-time Go symbol randomization and runtime string fusion.
main.main (0x1400a61a0) performs three phases seen in decompilation ^[r2:sym.main.main]:
- PRNG seeding: seeds
math/randwithtime.Now()nanoseconds - Worker dispatch: sequentially calls ~24 randomized
main.*functions that perform the actual malicious work (browser credential harvesting, system enumeration, etc. — inferred from family pattern, not visible in static strings) - Telemetry loop: calls
os.hostname,syscall.getCurrentProcessId,syscall.Getpagesize,runtime.ReadMemStats, then enters an idle GUI loop
The main.Lohkkftktfdox function references a hardcoded constant 0x12345678 alongside time.Now().Unix() ^[r2:sym.main.Lohkkftktfdox], possibly a timestamp gate or ID derivation.
main.Rerkjgrdzv (0x1400a4e00) implements fused-string API decoding ^[r2:sym.main.Rerkjgrdzv]: DLL names and API names are concatenated into single .rdata blobs (e.g. "advapi32.dllGetUserNameAVirtualAllocrandautoseedsweepWaiters...") and sliced at runtime into syscall._LazyProc_ objects via NewCallback. This technique is documented at fused-string-api-decoding.
Build / RE
| Attribute | Observation |
|---|---|
| Toolchain | Go 1.25.4, gc compiler, static binary |
| Anti-analysis | Symbol name randomization (43 main.* identifiers); fused-string API resolution; no debugger/VM checks observed in static |
| Packing | None — .text entropy 6.24, no UPX/VMProtect |
| Code quality | Standard Go compiler output with canary=true, pic=true, nx=true ^[rabin2-info.txt] |
| Signing | Fabricated Authenticode with godaddy.com string and WE1 issuer marker; malformed ASN.1 |
| Resources | No .rsrc, no icon masquerade |
| Imports | 46 imports from kernel32.dll only (standard Go Windows runtime) |
Notable randomized function names (selection): Tgkbyydmayoy, Zjkbxolmjcqcjnk, Grqjdjlpkwr, Rerkjgrdzv, Ozsuoutuiu ^[strings.txt:5893–5919]
Deploy / ATT&CK
| Technique | ID | Evidence / Inference |
|---|---|---|
| Data from Local System | T1005 | Inferred from family pattern; hostname, PID, pagesize read in main.main ^[r2:sym.main.main] |
| Software Packing | T1027.002 | Go symbol obfuscation + fused-string API decoding |
| Obfuscated Files or Information | T1027 | Randomized module paths and function names |
| OS Credential Dumping | T1003 | Inferred from family pattern (browser credential targeting) |
| Exfiltration Over C2 Channel | T1041 | Inferred from crypto/tls and net/http imports; no static C2 visible |
C2: No hardcoded C2 strings recovered. The crypto/tls, net/http, and x509 packages are present in strings ^[strings.txt:1851], indicating TLS-wrapped HTTP C2 capability. URL/hostname likely decoded at runtime via the PRNG-seeded pipeline documented in sibling sample 29149758 ^[entities/9d2ca3.md].
Persistence: Not observed in static; no registry keys, scheduled tasks, or startup folder references.
Attribution: No linguistic clues. Build match to 9d2ca3 Go cluster (samples a7b9f3dd, 29149758) is strong but not proven by CAPE runtime. Classified as sibling with confidence: medium.
YARA Rule
rule GoStealer_9d2ca3_Cluster_x64 : infostealer {
meta:
description = "Go 1.25.4 x64 infostealer cluster with randomized module paths and fused-string API decoding"
author = "PacketPursuit"
date = "2026-06-08"
hash = "389e1ccf072f134de9d3b007df0952f43f2dc0c3a4f55fbe6f3035d1d0c14dc0"
strings:
$go_build = "go1.25.4"
$trimpath = "build\t-trimpath=true"
$cgo = "build\tCGO_ENABLED=0"
$goos = "build\tGOOS=windows"
$goarch = "build\tGOARCH=amd64"
$goamd64 = "build\tGOAMD64=v1"
$fused1 = "advapi32.dllGetUserNameAVirtualAllocrandautoseedsweepWaiterscleanupQueuetraceStringsspanSetSpinemspanSpecialtraceTypeTabgcBitsA"
$fused2 = "kernel32.dlladvapi32.dllGetUserNameAVirtualAllocrandautoseedsweepWaiterscleanupQueuetraceStringsspanSetSpinemspanSpecialtraceTy"
$fused3 = "VirtualProtectComputerNameExuserArenaStateGC"
condition:
uint16(0) == 0x5A4D
and $go_build
and $trimpath
and $cgo
and $goos
and $goarch
and $goamd64
and 2 of ($fused*)
and filesize < 5MB
}
IOCs
| Type | Value | Note |
|---|---|---|
| SHA-256 | 389e1ccf072f134de9d3b007df0952f43f2dc0c3a4f55fbe6f3035d1d0c14dc0 |
|
| SHA-1 | 156d5913674927c03521b61dcae634d5a05c72ce |
.text section hash |
| Filename | EclipseV2.exe |
Masquerade name |
| Go build ID | R4dfDFKpwug7jLHg7jce/Zt00OXyqJ_Y6YAIrjnRh/toOyFtlwo_LZKSLLK-61/oPpzLWq_G_tPaX86Dn3H |
|
| Module path | LUOegnbUmXZeMZT |
Randomized per build |
| Certificate strings | godaddy.com, WE1 |
Fabricated Authenticode markers |
Behavioral Fingerprint
On launch, a Go 1.25.4 x64 GUI binary seeds math/rand from the system clock, then sequentially dispatches 20+ randomized main.* worker functions. It resolves Windows APIs via syscall._LazyProc_ from fused .rdata strings rather than static imports, then reads hostname, PID, and pagesize before entering an idle event loop. No hardcoded C2 is present in the binary; C2 URLs are likely derived at runtime from the seeded PRNG. The binary carries a fabricated Authenticode certificate with godaddy.com strings.
Provenance
- Static artifacts generated by triage pipeline (file, exiftool, pefile, strings, ssdeep, tlsh, yara, metadata, triage.json)
- capa: signatures not installed — no capability output ^[capa.txt]
- floss: mis-invoked with wrong argument order — no decoded strings ^[floss.txt]
- binwalk: found PE header + mcrypt-encrypted data marker (false positive) + certificate DER blob ^[binwalk.txt]
- rabin2-info: Go language detection, signed=true ^[rabin2-info.txt]
- radare2: level-3 analysis, 2233 functions recovered,
aangGo symbol recovery ^[r2 analysis log] - Certificate: raw WIN_CERTIFICATE parsed from offset 2482688; X.509 parsing failed; strings extracted via regex over DER blob
References
- 9d2ca3 — entity page for the contested Amadey/Go cluster label
- golang-stealer-build-pattern — shared build artefacts across Go infostealer families
- fused-string-api-decoding — technique page for runtime DLL+API string fusion
- OpenCTI artifact:
73633568-cfa4-4582-9c28-5052b4e05b0d(labels:exe,malware-bazaar,signed)