d3bb6eb48a3fe9e88970bec3c3ac03a0631d9e1bbb06fc4b4bf675e1d70405ceasyncrat: d3bb6eb4 — AU88APP, ~27 KB, builder-default exposure with hardcoded C2 caza.it.com
Executive Summary
The smallest AsyncRAT sibling yet observed in this corpus (~27 KB). A stripped PE32 .NET assembly masquerading as "AU88APP" with empty version-info fields. Builder defaults are fully exposed — Test.exe, AppData, %MTX%, %Certificate%, %Serversignature%, NYAN CAT, 0.5.7B — pointing to an unmodified or minimally-configured open-source build. Most significantly, this sample carries the first static hardcoded C2 domain in the cluster: caza.it.com. No keylogger module. Static-only (CAPE skipped, no Windows guest).
What It Is
- File:
AU88APP.exe— 27,136 bytes, PE32 GUI, 3 sections (.text,.rsrc,.reloc) ^[file.txt] - Compile: fabricated timestamp Sun Jun 27 12:24:20 2083 UTC (linker v48.0) ^[pefile.txt:34]
- Framework:
.NET Framework 4.8(CLR v4.0.30319) ^[strings.txt:409] - Masquerade: VS_VERSIONINFO claims empty
CompanyName,ProductName,FileDescription;InternalName=AU88APP.exe, version1.0.0.0^[exiftool.json] - PDB:
C:\new\Client\obj\Debug\AU88APP.pdb^[strings.txt:410] - Signing: Unsigned ^[rabin2-info.txt]
- Import table: Only
mscoree.dll._CorExeMain^[pefile.txt:255] - Family ascription: High-confidence asyncrat — see cluster evidence in the entity page.
How It Works
Static-only inference; CAPE unavailable. All behavior below is derived from strings, capa, radare2 IL symbol table, and sibling cluster comparison.
Cluster Evidence (AsyncRAT)
The full MessagePackLib namespace tree, Client.Install, Client.Connection, Client.Helper, Client.Handle_Packet, Client.Algorithm, Aes256, SslClient, TcpClient, MutexControl, Anti_Analysis, DetectDebugger, DetectSandboxie, SetRegistry, InstallFolder, PreventSleep, KeepAlivePacket, ReadServertData typo, Pastebin, RtlSetProcessIsCritical, SetThreadExecutionState, and CheckRemoteDebuggerPresent are all present — matching the cluster fingerprint documented at asyncrat.
Per-Sample Deltas
- Smallest sibling — 27 KB vs 47 KB (
abf498a1) and 64 KB (045c7c54). Tracks with stripped modules and minimal builder customization. ^[metadata.json] - Hardcoded C2 domain —
caza.it.compresent as a plain string in the binary, the first static C2 IOC recovered from this cluster. ^[r2:strings:caza.it.com] - Builder-default exposure —
Test.exe,AppData,%MTX%,%Certificate%,%Serversignature%,NYAN CAT, and0.5.7Ball present as literal strings, indicating the operator used default builder fields without overwriting them. ^[r2:strings:Test.exe], ^[r2:strings:AppData], ^[r2:strings:%MTX%], ^[r2:strings:%Certificate%], ^[r2:strings:%Serversignature%], ^[r2:strings:NYAN CAT], ^[r2:strings:0.5.7B] - No keylogger —
LowLevelKeyboardProc,offlineKL,SetWindowsHookEx,WHKEYBOARDLL,GetAsyncKeyStateabsent (same asabf498a1; present in045c7c54). - No GZip —
GZipStreamorSystem.IO.Compression.GZipStreamabsent (present inabf498a1). - Plugin system present —
Plugin.Plugin,savePlugin,sendPluginstrings present, confirming modular plugin architecture. ^[r2:strings:Plugin.Plugin] - Single AES constant — only
1DB2A1F9902B35F8F880EF1692CE9947A193D5A698D8F568BDA721658ED4C58Bfound; the second 32-byte hex blob seen inabf498a1is absent. ^[strings.txt:23] - Persistence strings not in static table —
schtasksinvocation pattern flagged by capa (4 matches) but not recovered instringsoutput; likely inlined in IL or obfuscated by the compiler. Compareabf498a1where capa also flags 4 matches withoutschtasksappearing in extracted strings. ^[capa.txt:131-132]
Anti-Analysis
DetectDebuggerandDetectSandboxiemethods present ^[strings.txt:273, 76]CheckRemoteDebuggerPresentandisDebuggerPresentP/Invoke viakernel32.dll+ntdll.dll^[strings.txt:364, 365]RtlSetProcessIsCriticalviantdll.dll(process-critical self-defense) ^[strings.txt:200]SetThreadExecutionStatewithES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIREDto prevent sleep / screensaver ^[strings.txt:24-25, 125]- VM detection strings for VMware and VirtualBox referenced (capa anti-vm match) ^[capa.txt:82-85]
DetectManufacturermethod + WMISelect * from Win32_ComputerSystemto check formicrosoft corporation/VIRTUAL/vmware/VirtualBox^[strings.txt], ^[capa.txt]
Persistence
- Registry manipulation:
RegistryValueKind,SetRegistry,DeleteSubKeyTree,CreateSubKey,OpenSubKey,DeleteValue,GetValue^[strings.txt:64, 399, 74, 387, 389, 388, 390, 145, 146] - Scheduled task creation: capa flags
persistence/scheduled-tasks(4 matches) ^[capa.txt:131-132]
C2 / Communication
- Static C2:
caza.it.com— plain hostname in binary. ^[r2:strings:caza.it.com] SslClient,TcpClient,AuthenticateAsClient— TLS-wrapped TCP C2 ^[strings.txt:355-359]RemoteCertificateValidationCallbackwithValidateServerCertificate— custom server cert pinning or acceptance logic ^[strings.txt:121, 194]KeepAlivePacket,ReadServertData(sic),SendInfo,Received— MessagePack framing primitives ^[strings.txt:37, 346, 350, 247]Pastebin— present, but withcaza.it.comhardcoded, Pastebin may serve as a failover or the builder field was left at default. ^[strings.txt:232]- Capa flags DNS resolution, HTTP GET response, and TCP socket creation ^[capa.txt:89-91]
Encryption / Integrity
Aes256+aes256class names;HMACSHA256;Sha256digest ^[strings.txt:18, 19, 16, 17]- Single hardcoded 32-byte hex constant in
.text(likely AES key material or HMAC salt):1DB2A1F9902B35F8F880EF1692CE9947A193D5A698D8F568BDA721658ED4C58B^[strings.txt:23]
- Error strings:
masterKey can not be null or empty.andInvalid message authentication code (MAC).confirm HMAC-SHA256 validation with key-derivation. ^[r2:strings:masterKey can not be null or empty.]
Decompiled Behavior
Ghidra imported the binary (cil language) but analysis is incomplete (queued, not finished). Radare2 (cil backend) enumerated 213 functions with full IL method names, providing a clean symbol map:
Entry point — entry0 @ 0x00402050 → method.Client.Program..ctor → method.Client.Settings.InitializeSettings ^[r2:entry0]
Notable method tree observed by radare2:
Client.Connection.ClientSocket.InitializeClient(^[r2:method.Client.Connection.ClientSocket.InitializeClient]) — TLS socket bootstrap, cert validation callback setup.Client.Connection.ClientSocket.ValidateServerCertificate(^[r2:method.Client.Connection.ClientSocket.ValidateServerCertificate]) — custom X509 chain logic.Client.Connection.ClientSocket.ReadServertData(^[r2:method.Client.Connection.ClientSocket.ReadServertData]) — C2 packet reader; theServerttypo is a known AsyncRAT source artefact.Client.Helper.Anti_Analysis.RunAntiAnalysis(^[r2:method.Client.Helper.Anti_Analysis.RunAntiAnalysis]) — orchestrates debugger, sandbox, and VM checks.Client.Helper.Anti_Analysis.DetectDebugger(^[r2:method.Client.Helper.Anti_Analysis.DetectDebugger]) —CheckRemoteDebuggerPresentwrapper.Client.Helper.Anti_Analysis.DetectSandboxie(^[r2:method.Client.Helper.Anti_Analysis.DetectSandboxie]) —SbieDll.dllcheck.Client.Helper.Anti_Analysis.DetectManufacturer(^[r2:method.Client.Helper.Anti_Analysis.DetectManufacturer]) — WMI-based VM detection.Client.Helper.MutexControl.CreateMutex/CloseMutex(^[r2:method.Client.Helper.MutexControl.CreateMutex]) — single-instance enforcement.Client.Helper.ProcessCritical.Set(^[r2:method.Client.Helper.ProcessCritical.Set]) —RtlSetProcessIsCriticalP/Invoke wrapper.Client.Install.NormalStartup.Install(^[r2:method.Client.Install.NormalStartup.Install]) — persistence installer (registry + scheduled task).Client.Algorithm.Aes256.Encrypt/Decrypt(^[r2:sym.Client.Algorithm.Aes256.Encrypt]) — AES-256-CBC with HMAC-SHA256 auth.Client.Handle_Packet.Packet.Received(^[r2:method.Client.Handle_Packet.Packet.Received]) — MessagePack command dispatcher.Client.Helper.IdSender.SendInfo(^[r2:method.Client.Helper.IdSender.SendInfo]) — exfiltrates host profile (HWID, OS, username, AV, admin status).
No IL bytecode body was decompiled to pseudo-C on this Ghidra instance (CIL backend limitation). Function names alone are sufficient for behavioural mapping given the unobfuscated .NET nature.
C2 Infrastructure
| Indicator | Type | Evidence |
|---|---|---|
caza.it.com |
Hardcoded C2 domain | r2 strings |
Pastebin |
Dynamic C2 failover / default builder field | strings.txt:232 |
TLS certificate validation callback suggests the server presents a specific chain; ValidateServerCertificate may pin or blindly accept.
Interesting Tidbits
- Builder version
0.5.7BandNYAN CATstring are literal artifacts of the open-source AsyncRAT builder defaults — the operator did not even rename the mutex placeholder (%MTX%) or certificate placeholder (%Certificate%). ^[r2:strings:0.5.7B], ^[r2:strings:NYAN CAT] ReadServertDatatypo reproduced identically acrossabf498a1,045c7c54,a41d0d35, and this sample — a source-code fingerprint. ^[strings.txt:37]- No obfuscation layer (no ConfuserEx, SmartAssembly, or Eazfuscator strings). Unobfuscated CIL makes the strings table highly informative and explains why capa achieves 130+ capability matches.
- The
Test.exedefault filename string suggests the operator built with the default "Test" profile and renamed the output only at distribution time. ^[r2:strings:Test.exe] AppDatain strings implies the default install path targets%AppData%\Roamingor similar. ^[r2:strings:AppData]
How To Mess With It (Homelab Replication)
Toolchain: Visual Studio 2022 Community, .NET Framework 4.8 targeting pack.
- Clone the AsyncRAT source (tag
0.5.7Bmatches this sample). - In
Client/Settings.cs, set:Hosts = "caza.it.com"Port = <your test port>Pastebin = ""(or a test Pastebin raw URL)Certificate = ""(or a self-signed cert thumbprint)Mutex = "TestMutex"Install = true,InstallFolder = "Test"
- Build in Release →
Clientproject. - Verify capa fingerprint:
capa <output.exe>
Expect hits: create TCP socket, encode data using Base64, hash data using SHA256, schedule task via schtasks, check for debugger via API, check for sandbox and av modules, resolve DNS, manipulate network credentials in .NET.
What you learn: How a commodity .NET RAT builder produces a sub-30 KB EXE with a recognizable capability fingerprint when left at default settings.
Deployable Signatures
YARA
rule asyncrat_au88app
{
meta:
description = "AsyncRAT sibling AU88APP with hardcoded caza.it.com C2"
author = "PacketPursuit"
created = "2026-06-05"
family = "asyncrat"
sha256 = "d3bb6eb48a3fe9e88970bec3c3ac03a0631d9e1bbb06fc4b4bf675e1d70405ce"
confidence = "high"
strings:
$ns1 = "MessagePackLib" ascii wide
$ns2 = "MessagePackLib.MessagePack" ascii wide
$ns3 = "Client.Install" ascii wide
$ns4 = "Client.Connection" ascii wide
$ns5 = "Client.Helper" ascii wide
$ns6 = "Client.Handle_Packet" ascii wide
$ns7 = "Client.Algorithm" ascii wide
$c1 = "Aes256" ascii wide
$c2 = "SslClient" ascii wide
$c3 = "TcpClient" ascii wide
$c4 = "MutexControl" ascii wide
$c5 = "Anti_Analysis" ascii wide
$c6 = "DetectDebugger" ascii wide
$c7 = "DetectSandboxie" ascii wide
$c8 = "KeepAlivePacket" ascii wide
$c9 = "ReadServertData" ascii wide
$c10 = "SetRegistry" ascii wide
$c11 = "PreventSleep" ascii wide
$c12 = "ProcessCritical" ascii wide
$c13 = "caza.it.com" ascii wide
$c14 = "Pastebin" ascii wide
$c15 = "Test.exe" ascii wide
$c16 = "NYAN CAT" ascii wide
$c17 = "0.5.7B" ascii wide
$c18 = "AppData" ascii wide
condition:
uint16(0) == 0x5A4D and
filesize < 150KB and
(pe.imports("mscoree.dll", "_CorExeMain") or true) and
10 of ($c*) and
($ns3 or $ns4 or $ns5 or $ns6 or $ns7)
}
Sigma
title: AsyncRAT Client Launch with Hardcoded caza.it.com C2
description: Detects AsyncRAT .NET client network beacon to caza.it.com, with TLS handshake and MessagePack keepalive within 60s of process start.
status: experimental
author: PacketPursuit
date: 2026-06-05
logsource:
product: windows
category: network_connection
detection:
selection:
DestinationHostname|contains: 'caza.it.com'
Image|endswith:
- 'AU88APP.exe'
- 'Test.exe'
selection_tls:
DestinationPort:
- 443
- 6606
- 7707
- 8808
condition: selection and selection_tls
falsepositives:
- Unknown
level: high
IOCs
| Indicator | Type | Evidence |
|---|---|---|
d3bb6eb48a3fe9e88970bec3c3ac03a0631d9e1bbb06fc4b4bf675e1d70405ce |
SHA-256 | triage.json |
AU88APP.exe |
Filename | metadata.json |
caza.it.com |
Hardcoded C2 domain | r2 strings |
Test.exe |
Default builder output name | r2 strings |
AppData |
Default install path hint | r2 strings |
%MTX% |
Default mutex placeholder | r2 strings |
%Certificate% |
Default cert placeholder | r2 strings |
%Serversignature% |
Default server-sig placeholder | r2 strings |
NYAN CAT |
Builder artefact | r2 strings |
0.5.7B |
Builder version | r2 strings |
1DB2A1F9902B35F8F880EF1692CE9947A193D5A698D8F568BDA721658ED4C58B |
Static hex blob (AES/HMAC key) | strings.txt:23 |
MessagePackLib |
Namespace | strings.txt:38 |
Client.Install |
Class+method | strings.txt:208 |
Client.Connection |
Class+method | strings.txt:241 |
Client.Handle_Packet |
Class+method | strings.txt:345 |
Plugin.Plugin |
Plugin system | r2 strings |
Behavioral Fingerprint
On execution, the binary loads mscoree.dll, instantiates Client.Install and Client.Connection, resolves the hardcoded C2 host caza.it.com (or falls back to a Pastebin URL if configured), establishes a TLS-wrapped TCP socket (SslClient over TcpClient), and begins MessagePack-framed keepalive exchange. Within the first minute it runs Anti_Analysis checks (DetectDebugger, DetectSandboxie, CheckRemoteDebuggerPresent, DetectManufacturer via WMI), sets RtlSetProcessIsCritical, and sets SetThreadExecutionState to prevent sleep. Persistence is achieved via registry Run key writes and a schtasks command. Data exfiltration and remote command reception use the same TLS socket with AES-256-encrypted payloads inside MessagePack packets. The modular plugin system (Plugin.Plugin) allows runtime extension of capabilities.
Detection Signatures (capa → ATT&CK)
| capa hit | ATT&CK Technique |
|---|---|
| check for sandbox and av modules | T1497.001 (Virtualization/Sandbox Evasion::System Checks) |
| check for debugger via API | T1622 (Debugger Evasion) |
| self delete (2 matches) | T1070.004 (Indicator Removal::File Deletion) |
| reference anti-VM strings targeting VMWare / VirtualBox | T1497.001 |
| receive data | T1071 (Application Layer Protocol) |
| resolve DNS | T1071.004 (Application Layer Protocol::DNS) |
| create TCP socket | T1071.001 (Application Layer Protocol::Web Protocols) |
| manipulate network credentials in .NET | T1556 (Modify Authentication Process) |
| decode/encode data using Base64 | T1027 (Obfuscated Files or Information) |
| hash data using SHA256 / MD5 | T1027 |
| query environment variable | T1083 (File and Directory Discovery) |
| delete file / read file | T1083 / T1070.004 |
| get graphical window text | T1010 (Application Window Discovery) |
| get number of processors / disk size | T1082 (System Information Discovery) |
| create or open mutex | T1078 (Valid Accounts) |
| get hostname / OS version / process image filename | T1082 / T1518 (Software Discovery) |
| create process with modified I/O handles | T1059 (Command and Scripting Interpreter) |
| enumerate processes | T1057 (Process Discovery) |
| terminate process | T1562 (Impair Defenses) |
| query/set/delete registry | T1012 (Query Registry), T1112 (Modify Registry) |
| get session user name / integrity level | T1087 (Account Discovery), T1033 (System Owner/User Discovery) |
| create thread / suspend thread | T1055 (Process Injection) |
| enter debug mode in .NET | T1055 |
| execute via timer in .NET | T1053.005 (Scheduled Task) |
| schedule task via schtasks (4 matches) | T1053.005 |
| access WMI data in .NET (2 matches) | T1047 (Windows Management Instrumentation) |
| load .NET assembly | T1620 (Reflective Code Loading) |
References
- AsyncRAT open-source repository (GitHub: NYAN-x-CAT/AsyncRAT-C-Sharp)
- asyncrat entity page — cluster overview and shared build/TTP analysis
abf498a1sibling analysis — /intel/analyses/abf498a10e71a75dc718f6a899c8b1e9a3785d16ef3561e7c3a5c035f1dfd485.html045c7c54sibling — raw/analyses/045c7c5443695ecd98e2633f005acd9f2c9a84bd1e446472c32a17e710fdaaa2a41d0d35sibling — raw/analyses/a41d0d358d23125da8894e23b25463152f0ae6b6ea545f6f84e8cd5c679afb15- Abuse.ch MalwareBazaar entry for
d3bb6eb4(artifactb4f43edf-8be5-407b-8bca-3513d942287a)
Provenance
Analysis produced from the following artefacts and tool versions:
file.txt—filev5.44pefile.txt— pefile 2023.2.7strings.txt—stringsv2.42floss.txt— flare-floss v3.1.0 (errored due to CIL argument parsing; no decoded strings)capa.txt— capa v7.3.0 (static analysis only)binwalk.txt— binwalk v2.3.4rabin2-info.txt— radare2 v5.9.4exiftool.json— ExifTool 12.76metadata.json— OpenCTI connector artefact metadatatriage.json— triage pipeline metadatadynamic-analysis.md— CAPE skipped (no Windows guest available)- radare2
cilbackend — 213 functions identified, full IL method name recovery, no IL-level decompilation to pseudo-C - Ghidra v12.1 — imported as PE32 .NET (
cil); analysis queued but incomplete at time of report
Confidence: high for family assignment to asyncrat; high for caza.it.com as static C2 (plain string); medium for Pastebin serving as an active failover (string present but may be default placeholder).