Contacts
dasdadasdas

Salat Stealer: Campanha ativa identificada no Brasil.

A ZenoX analisou uma amostra de uma campanha ativa disseminando o Salat Stealer. O Salat é um malware sofisticado que combina um stealer completo de informações com capacidades de trojan de acesso remoto (RAT). A ameaça opera através de três camadas distintas de proteção: um loader customizado em Rust que decripta o payload utilizando um gerador linear congruencial (LCG) de 64 bits, uma camada de compressão UPX, e um payload final escrito em Go (versão 1.22.0) contendo a funcionalidade maliciosa real.

O malware tem como alvo uma ampla gama de dados sensíveis, incluindo credenciais salvas de mais de 30 navegadores baseados em Chromium e Gecko, carteiras de criptomoedas de mais de 40 provedores, tokens de sessão do Discord, Steam e Telegram, e informações de sistema coletadas via consultas WMI. Ele suporta as três gerações de criptografia de dados do Chrome: DPAPI legácy, AES-256-GCM com master key (Chrome 80-126) e a nova App-Bound Encryption (Chrome 127+).

Além do roubo de dados, o malware fornece ao operador acesso remoto completo ao sistema comprometido: streaming e captura de tela em tempo real, keylogging com rastreamento de contexto de janela, monitoramento de clipboard, gravação de webcam e microfone via ffmpeg, shell reverso interativo, e capacidades de download/upload de arquivos. Também funciona como proxy SOCKS5, permitindo ao atacante rotear tráfego através das máquinas infectadas.

A comunicação com o servidor de comando e controle (C2) foi projetada para evadir monitoramento de rede tradicional. O malware resolve o domínio do C2 através de DNS-over-HTTPS (DoH) utilizando endpoints do Cloudflare e Google DNS, tornando o domínio C2 invisível em logs de DNS convencionais. A comunicação ocorre sobre os protocolos WebSocket e QUIC (UDP), dificultando ainda mais a detecção em nível de rede.

Key Findings

Empacotamento e Evasão: O malware utiliza três camadas de proteção — loader Rust com criptografia LCG de 64 bits, compressão UPX e payload final em Go 1.22. A execução é inteiramente em memória via reflective loading, sem gravação em disco. Após o carregamento, os headers do PE são apagados da memória (anti-dump). O binário carrega um certificado digital falso da Zoom Video Communications e um PDB que imita um serviço legítimo do Windows (TaskHost).

Carteiras de Criptomoedas: Alveja mais de 40 wallets entre extensões de navegador e apps desktop (MetaMask, Exodus, Phantom, Trust Wallet, Coinomi, Binance, Atomic Wallet, TonKeeper, entre outras).

Roubo de Aplicações: Extrai tokens do Discord (incluindo Canary/PTB), dados do Steam (tokens, arquivos VDF) e sessões do Telegram Desktop (pasta tdata).

Capacidades RAT: Captura e streaming de tela em tempo real via GDI, keylogger com contexto de janela ativa (SetWinEventHook), gravação de webcam e microfone via ffmpeg, shell reverso interativo, download e execução de arquivos arbitrários, proxy SOCKS5 com tunelamento P2P para pivoting, e rotinas de autodestruição que sobrescrevem e deletam o binário do disco.

Comando e Controle: Resolve o domínio C2 via DNS-over-HTTPS (Cloudflare, Google DNS), tornando-o invisível em logs DNS tradicionais. Comunicação primária via WebSocket com QUIC/UDP como fallback. Implementa rotação automática de endpoints e seleção de melhor método de conexão entre quatro estratégias.

Persistência e Escalação: Cria tarefas agendadas com múltiplos gatilhos (boot, logon, diário, ociosidade) via taskmaster, além de gravar na chave de registro HKCU Run. Escala privilégios impersonando SYSTEM via token do LSASS e RtlAdjustPrivilege. Encerra processos de navegadores para liberar locks nos bancos SQLite antes da extração.

Reconhecimento: Coleta HWID via MachineGuid, perfila o sistema via WMI (SO, CPU, GPU), enumera periféricos (webcams, microfones, drives) e monitora atividade do usuário (tempo ocioso, janela ativa).

Análise Reversa

A análise técnica aprofundada da amostra maliciosa identificada como caceta_exe.bin, um artefato de 3,45 MB classificado como PE32 executável GUI para arquitetura Intel x86.

A amostra revelou-se um malware multicamada de alta sofisticação que combina um
info-stealer abrangente com capacidades próximas ao de um RAT (Remote Access Trojan).

A arquitetura do malware é composta por três estágios distintos: um loader desenvolvido em Rust responsável pela decriptação e carregamento em memória do payload, uma camada intermediária de compressão UPX, e o payload final escrito em Go 1.22.0 contendo toda a lógica maliciosa. Cada camada foi analisada individualmente, com extração bem-sucedida do payload final de 11,6 MB a partir da reversão do algoritmo criptográfico do loader.

A análise identificou capacidades ofensivas que incluem roubo de credenciais de mais de 30 navegadores, exfiltração de mais de 40 carteiras de criptomoedas, captura de tela e keylogging em tempo real, gravação de webcam e microfone, shell reverso, proxy SOCKS5, e comunicação C2 via DNS-over-HTTPS sobre protocolos WebSocket e QUIC. O timestamp de compilação do loader (10/03/2026) indica uma preparação ou teste para uma futura campanha no território brasileiro, uma vez que “caceta” é um nome pouco sugestivo para uma campanha ativa.

Embora o nome seja chamativo, no código do malware foi identificado uma ampla gama de comentários com o nome real do malware sendo “Salat Stealer”, um malware vendido como MaaS.

Visão Geral da Arquitetura:

O binário analisado opera em um modelo de três estágios encadeados. O primeiro estágio (loader) é responsável exclusivamente por decriptar e carregar o segundo estágio em memória. O segundo estágio é o payload comprimido com UPX. O terceiro estágio é o malware funcional, um binário Go com 9.877 funções catalogadas na pclntab, das quais 332 pertencem ao pacote main e implementam diretamente a lógica malicios, abaixo, segue o fluxo de tools usadas análise do dropper.

O dropper em Rust utiliza um certificado válido do Zoom Video Communications, aplicativo para chamadas de vídeo em tempo real, tal estratégia é emplementada para a evasão de defesas.

Ferramentas (Dropper Rust)VersãoFinalidade
Python 3 (script pe_analyze.py)3.xParsing de estruturas PE, extração de seções, cálculo de entropia, extração de strings e IOCs
IDA Disassembler9.xDisassembly x86 da seção .text para identificação do algoritmo de decriptação
Python 3 (script decrypt_payload.py)3.xImplementação e execução do algoritmo LCG de 64 bits para decriptação do payload
FLOSS String Analyzer / DIE / file (coreutils)Extração avançada de strings ofuscadas (FLOSS), detecção de packer/compilador (DIE) e identificação inicial do tipo de arquivo (file)
hashlib (Python stdlib)Cálculo de hashes SHA-256, MD5 e SHA-1

Abaixo, seguem ferramentas utilizadas para análise do payload em Golang:

Ferramentas (Stealer em Go)VersãoFinalidade
Python 3 (script pe_analyze.py)3.xAnálise estrutural do PE desempacotado, extração de imports, seções e constantes criptográficas
IDA Disassembler9.xDisassembly de funções-chave do payload Go para reconstrução de lógica
Python 3 (parsing pclntab)3.xExtração manual da tabela pclntab do Go: resolução de nomes de funções, entry points e metadata
Python 3 (extração de IOCs)3.xCategorização de strings por funcionalidade: SQL queries, URLs, paths de navegadores, wallets, APIs
strings / FLOSS String AnalyzerExtração bruta de strings ASCII (mínimo 6/8 caracteres) e recuperação de strings ofuscadas ou codificadas em stack
Ghidra + GolangAnalyzerExtension11.xEngenharia reversa assistida do binário Go: recuperação de símbolos, análise de tipos, decompilação de funções e suporte a runtime Go via extensão especializada

Algorítmo de Decriptação:

O loader apresenta 4 seções, sendo a .rdata a mais relevante com 3,29 MB de dados e entropia de 7,99 (próxima ao máximo teórico de 8,0), indicando conteúdo comprimido, onde posteriormente identificamos a utilização do cargo como gerenciador de pacotes do Rust.

Através do disassembly da seção .text, foram identificadas referências cruzadas entre as strings de debug do loader e o código executável. As strings de debug presentes no binário (em texto claro na .rdata) documentam o fluxo interno do loader:

  • [DEBUG] Payload loaded. Size: %d bytes — confirma carregamento do payload
  • [INFO] MZ signature valid. Calling MemoryLoadLibrary… — reflective loading
  • [DEBUG] Detected x86 payload — detecção de arquitetura (x86)
  • [DEBUG] Detected x64 payload — detecção de arquitetura (x64)
  • [INFO] Anti-Dump: Headers erased — proteção anti-dump pós-carregamento
  • [INFO] Entry point found: %x. Spawning payload thread… — execução via CreateThread
  • payload_debug.log — nome do arquivo de log (gravação condicional)

Após a identificação do loop de decriptação, a análise instrução por instrução revelou um LCG (Linear Congruential Generator) de 64 bits operando como gerador de keystream, com isso, têm-se a lógica do pseudocódigo do LCG:

Em golang, nós podemos ter algo aproximado da implementação do LCG como:

Fluxo Pós-Decrypt:

Após decriptar o payload, o loader executa a seguinte sequência (confirmada via strings de debug e análise de calls):

  • Valida assinatura MZ
  • Loga “MZ signature valid. Calling MemoryLoadLibrary…”
  • Resolve APIs via PEB walk (fs:[0x30] em 0x402FB2) — técnica de resolução dinâmica que evita imports diretos
  • Chama MemoryLoadLibrary — reflective loading do PE decriptado sem gravação em disco
  • Percorre os headers do PE carregado para localizar o OEP (Original Entry Point)
  • Loga “Anti-Dump: Headers erased” — apaga os primeiros bytes do PE na memória (proteção anti-dump)
  • Cria nova thread no OEP via CreateThread
  • Entra em loop de keep-alive no thread principal

A decriptação foi implementada em Python (decrypt_payload.py) e validada com sucesso: o resultado começa com a assinatura MZ seguida de uma assinatura PE válida.

Estágio 2 – Stealer em GO (unpacked):

O payload decriptado revelou-se um binário PE32 empacotado com UPX, identificável pelas seções características UPX0, UPX1 e UPX2. A seção UPX1 contém o código comprimido com entropia 7,99 e ratio de compressão de 28,25%. A descompressão com upx -d expandiu o binário de 3,29 MB para 11MB.

SeçãoTamanho VirtualTamanho RawEntropiaFlags
UPX00x867000 (8,4 MB)0 (vazio)0EXEC, READ, WRITE
UPX10x325000 (3,1 MB)0x324A007,99IDATA, EXEC, READ, WRITE
UPX20x1000 (4 KB)0x2001,47IDATA, READ, WRITE

O entry point do malware orquestra a seguinte sequência de inicialização, identificada via análise de calls no disassembly na função principal (main.main):

os.Executable — obtém o caminho do próprio binário
golang.org/x/sys/windows.(*LazyProc).Call — chama SetProcessDPIAware para configuração de display
main.checkDupe (0x008885E0) — verifica se já existe uma instância via gow32.CreateMutex, consultando múltiplos caminhos com os.Expand(“$LOCALAPPDATA\\…”) e os.Expand(“$APPDATA\\…”)
main.isAdmin (0x0087F7A0) — verifica privilégios via windows.AllocateAndInitializeSid com SECURITY_BUILTIN_DOMAIN_RID + DOMAIN_ALIAS_RID_ADMINS, seguido de CheckTokenMembership
main.staticinstall (0x00886370) — copia o binário para localização persistente
main.newTask (0x00887480) — cria scheduled task via taskmaster com múltiplos triggers
main.Steal (0x0088F000) — executa o roubo completo de dados
main.initConnection (0x0087FF20) — estabelece conexão WebSocket com o C2main.(*wsSess).Start (0x008A2F59) — inicia sessão de controle remoto, aguardando

Persistência e escalada de privilégios:

Nesta etapa, o artefato busca garantir sua execução contínua no host e elevar seu contexto de segurança para manipular processos críticos do sistema.

O malware utiliza o método main.newTask para estabelecer um pé firme no sistema (Footprint). Através da biblioteca ou interface taskmaster no github, ele é capaz de criar Scheduled Tasks altamente adaptáveis. A análise identificou referências a múltiplos gatilhos (Triggers), sugerindo uma estratégia de redundância para execução:

  • Boot/LogonTrigger: Garante a execução logo após a inicialização ou login do usuário.
  • Daily/IdleTrigger: Executa o payload em intervalos diários ou quando o sistema está ocioso, minimizando a chance de detecção pelo usuário.
  • EventTrigger: Permite que o malware “acorde” em resposta a eventos específicos do Windows.

Para operar sem restrições, o malware tenta elevar seus privilégios de usuário comum para NT AUTHORITY\SYSTEM através de uma técnica de impersonação de token:

Habilitação de Privilégios: A função main.enablePrivilege utiliza a API nativa RtlAdjustPrivilege para adquirir o SeDebugPrivilege, necessário para interagir com processos de outros usuários e do sistema.
Targeting do LSASS: O componente main.findLsassProcess enumera os processos ativos no sistema (via CreateToolhelp32Snapshot) para localizar o PID do processo lsass.exe.
Duplicaçãode Token: Uma vez localizado o LSASS, o método main.getSystemToken utiliza as APIs DuplicateTokenEx e ImpersonateLoggedOnUser. Isso permite que o malware “se passe” pelo sistema, obtendo as permissões necessárias para, por exemplo, realizar o dump de credenciais ou manipular headers PE na memória sem bloqueios de segurança.

main.Steal – Função de roubo de credencial:

A função orquestradora central do artefato atua como o motor de coleta (Stealer), sendo responsável por enumerar e extrair informações sensíveis de diversas aplicações.

O malware utiliza a função os.Expand para realizar a resolução dinâmica de variáveis de ambiente do Windows, como %LOCALAPPDATA% e %APPDATA%. Essa técnica permite que o malware localize de forma precisa os diretórios de perfil de usuários, independentemente do nome do usuário ou da versão do sistema operacional.

A execução segue um fluxo sequencial, acionando módulos específicos para cada alvo:

Browsers (Chromium & Gecko): Através das funções main.getChrome e main.getGecko, o malware realiza o dump de bancos de dados SQLite contendo senhas salvas, cookies de sessão, histórico de navegação e cartões de crédito.
Comunicações (Discord): A função main.getDiscord foca na extração de tokens de autenticação (Discord Tokens), permitindo que o atacante assuma o controle da conta da vítima sem necessidade de senha ou MFA.
Gaming (Steam): O módulo main.getSteams busca por arquivos de configuração e credenciais da plataforma Steam, visando o inventário e acesso a contas de jogos.
Criptoativos (BC1 & BC2): As funções main.getBC1 e main.getBC2 implementam lógica para detecção de carteiras e endereços de Bitcoin, sugerindo um foco financeiro direto.

main.getChrome:

Orquestrador central especializado na extração de segredos de navegadores baseados em Chromium.

  1. Recuperação de Master Keys (main.GetChromiumMasterKeys)
    – Parsing: Localiza o arquivo Local State e extrai a encrypted_key via JSON.
    – Decriptação Base: Utiliza DPAPI (CryptUnprotectData) para chaves convencionais.
    – Evasão Chrome 127+: Consulta a tabela meta via SQL para identificar novos métodos de criptografia.
    – App-Bound Bypass: Emprega a interface COM IElevator (main.Elevate) para descriptografar chaves protegidas por privilégios de processo.
  2. Extração de Dados (Login, Cookies, Tokens)
    – Preparação: Copia bases (Login Data, Cookies, Web Data) para %TEMP% para contornar file locks.
    – Queries SQL: Executa comandos SELECT via go-sqlite3 para coletar credenciais, sessões, autofills e tokens de serviço.
    – Decriptação de Payload: Processa campos criptografados utilizando o algoritmo AES-256-GCM (main.decryptAesGcm256).

Navegadores alvo (paths extraídos do binário com offsets):
– Local\Google\Chrome\User Data (0x005826B7)
– Local\Microsoft\Edge\User Data (0x005835C8)
– Local\BraveSoftware\Brave-Browser\User Data (0x0058629D)
– Roaming\Opera Software\Opera Stable (0x00587D03)
– Roaming\Opera Software\Opera GX Stable (0x0058A155)
– Local\Vivaldi\User Data, Local\Thorium\User Data, Local\Iridium\User Data (0x0057CB5C)
– Local\Yandex\YandexBrowser\User Data (0x005887D0)
E mais 23 navegadores variantes regionais.

Módulo Gecko Stealer: Resumo Técnico
Focado na extração de dados de navegadores baseados em Mozilla (NSS).

  1. Extração de Chaves (main.GetGeckoMasterKey)
    Database: Consulta key4.db (nssPrivate) para obter blobs de chaves.
    Criptoanálise: Utiliza Parser ASN.1 e decriptação via 3DES ou AES-128-CBC para derivar a chave mestre.
  2. Coleta de Dados
    Logins: Recupera credenciais do logins.json via queries na metaData.
    Cookies: Extrai sessões do banco moz_cookies.
  3. Alvos (Profiles em %APPDATA%)
    Principais: Firefox, Thunderbird, Pale Moon, Waterfox e SeaMonkey.
    Variantes: IceDragon, Cyberfox, Mercury, BlackHawk e Kotatogram.

Comunicação C2, Resiliência DNS e Keylogging:

Este componente gerencia a conexão do malware com sua infraestrutura externa, priorizando a evasão de defesas de rede através de protocolos cifrados.

1. Resolução de Endpoint via DoH (main.getBestMethod):
O malware utiliza DNS-over-HTTPS (DoH) para ocultar consultas DNS em tráfego HTTPS legítimo, dificultando o bloqueio por firewalls ou inspeção de pacotes (DPI). Ele testa quatro métodos em sequência:
•Método 1 & 3: Consultas via Cloudflare DoH (1.1.1.1).
•Método 2: Consulta via Google DoH (dns.google).
•Método 4 (Fallback): Resolução DNS tradicional caso os serviços de DoH falhem.

2. Estabelecimento de Conexão e Persistência:
•WebSocket (main.initConnection): Após resolver o IP, o malware estabelece um canal WebSocket, permitindo comunicação fullduplex e persistente com o servidor de comando.
•Rotação de C2 (main.changeEndpoint): Implementa lógica de redundância para rotacionar entre diferentes infraestruturas de C2 caso a conexão principal seja derrubada ou bloqueada.
•Gestão de Fluxo (main.c2Server): Função responsável por processar as ordens recebidas (ex: novos payloads ou comandos de exfiltração).

Demais funções para Keylogging e C2:

FunçãoEndereçoTamanhoDescrição
main.startKeylogger0x008769C0~416 bytesInicia processo filho com flag de keylog, chamando os/exec.Command
main.runKeylogger0x0087DE80~1056 bytesLoop principal do keylogger
main.keyPressCallback0x0087D830~1616 bytesCallback registrado via SetWinEventHook; captura cada tecla pressionada
main.windowChangeCallback0x0087D640~384 bytesDetecta troca de janela ativa para contextualizar as teclas capturadas (registra qual aplicativo/site estava aberto)
main.specialKeyName0x0087CCF0~2192 bytesTabela de mapeamento de teclas especiais (Enter, Backspace, PrintScreen, etc.)
main.periodicFlush0x0087D7C0~112 bytesEnvia buffer de teclas periodicamente ao C2

Dependências utilizadas em importação (Go):

PacoteFuncionalidade no malware
github.com/ncruces/go-sqlite3Leitura dos bancos SQLite dos navegadores
github.com/tetratelabs/wazeroRuntime WebAssembly (utilizado pelo go-sqlite3)
github.com/gorilla/websocketComunicação WebSocket com o C2
github.com/quic-go/quic-goTransporte QUIC/UDP alternativo
github.com/capnspacehook/taskmasterCriação de scheduled tasks (persistência)
github.com/StackExchange/wmiConsultas WMI para reconhecimento
github.com/go-ole/go-oleAutomação COM/OLE (IElevator)
github.com/lxn/winBindings Win32 API (screenshots, janelas)
github.com/nfnt/resizeRedimensionamento de imagens (screenshots)
github.com/andygrunwald/vdfParser Valve Data Format (dados Steam)
github.com/buger/jsonparserParsing JSON rápido (Local State, configs)
github.com/rodolfoag/gow32CreateMutex e utilitários Win32
github.com/rickb777/dateManipulação de datas
golang.org/x/crypto/chacha20poly1305Criptografia ChaCha20-Poly1305 (TLS/QUIC)
golang.org/x/sys/windowsSyscalls Windows (tokens, privilégios, SIDs)

IOC’s

Hashes de arquivos

CamadaSHA-256MD5SHA-1
Loader (Rust)f9d2cde030680a3a98c0ac0c5382d349783ce80f04b7d9d8f2d4d688dcebe91ecad7968cf3a15c183ad56b1fb041d669a9ea8c7464fdcf6913eee1ce7f9fd0c82b21e5c4
Payload decriptado (UPX)fe516af74599ad02d28bd28e37cc95fe22087b6d2bb2140517786a13282c911cbb3c343a9372eca207eaf5765c4e57897c42a378def8acab5a94d225ba4bbb7244a08b11
Payload final (Go)8504f75d15c65179753680756cea02f192c2759b478d220be3fa25c9544dad74

Import hashes

CamadaImpHash
Loader Rust8ffa7dc224163693c37e87d3a8721f45
Payload Go9f8577af3b56dbdad5b554c5839df89b

Artefatos  de rede:

TipoIndicadorContexto
DoH endpointhttps://1.1[.]1.1/dns-queryCloudflare — resolução do domínio C2
DoH endpointhttps://dns.google/resolveGoogle — resolução do domínio C2
DoH endpointhttps://cloudflare-dns.com/dns-queryCloudflare alt — resolução do domínio C2
Content-Typeapplication/dns-jsonHeader usado nas requisições DoH
ProtocoloWebSocket (TCP)Canal primário de C2
ProtocoloQUIC (UDP)Canal alternativo de C2
ProtocoloSOCKS5Proxy reverso / pivoting

Artefatos

TipoIndicadorContexto
PDBTaskHost_c805c8f8.pdbPath PDB do loader
Certif.Zoom Video Communications, Inc.Certificado digital falso embutido
Arquivo${TEMP}\ffmpeg.exeffmpeg baixado para gravação de mídia
Arquivopayload_debug.logLog de debug do loader (gravação condicional)
ArquivoSteamTokens.txtTokens Steam exfiltrados
RegistryHKLM\SOFTWARE\Microsoft\Cryptography\MachineGuidLido para fingerprinting
RegistryHKCU\Software\Microsoft\Windows\CurrentVersion\RunPersistência via Run key
CaminhoC:\Windows\System32\restore\MachineGuid.txtBackup do MachineGuid
CaminhoC:\Windows\SysWOW64\restore\MachineGuid.txtBackup alternativo

MITRE ATT&CK

TáticaIDTécnicaProcedimento
ExecutionT1129Shared ModulesMemoryLoadLibrary — reflective loading do PE decriptado sem gravação em disco
ExecutionT1059.003Windows Command ShellShell reverso interativo via main.(*wsSess).startShell executando cmd.exe
PersistenceT1053.005Scheduled Taskmain.newTask cria tasks via taskmaster com triggers de boot, logon e idle
PersistenceT1547.001Registry Run KeysEscrita em HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Privilege EscalationT1068Exploitation for Priv. Escalationmain.Elevate usa interface COM IElevator do Chrome/Edge/Brave
Privilege EscalationT1134.001Token Impersonation/Theftmain.impersonateSystem duplica token SYSTEM do LSASS via DuplicateTokenEx
Defense EvasionT1027.002Software PackingTripla camada: LCG 64-bit + UPX + binário Go embutido em .rdata
TáticaIDTécnicaProcedimento
Defense EvasionT1620Reflective Code LoadingPE carregado em memória via MemoryLoadLibrary sem tocar o disco
Defense EvasionT1622Debugger EvasionIsDebuggerPresent verificado; headers do PE apagados da memória (anti-dump)
Credential AccessT1555.003Credentials from Web BrowsersSenhas via SQL em Login Data (Chromium) e key4.db (Firefox)
Credential AccessT1539Steal Web Session Cookiemain.getChromeCookies / getGeckoCookies decriptam cookies de sessão
Credential AccessT1003.001LSASS Memorymain.findLsassProcess via CreateToolhelp32Snapshot; duplica token do LSASS
DiscoveryT1082System Information DiscoveryWMI: Win32_OperatingSystem, Win32_Processor, Win32_VideoController
DiscoveryT1057Process Discoverymain.processes enumera via CreateToolhelp32Snapshot + Process32FirstW
CollectionT1056.001Keyloggingmain.runKeylogger com hook SetWinEventHook; contexto por janela ativa
CollectionT1113Screen Capturemain.getScreen via GDI GetDIBits; streaming contínuo em tempo real
CollectionT1119Automated Collectionmain.Steal orquestra todos os módulos de coleta
Command and ControlT1071.001Web ProtocolsWebSocket (gorilla/websocket)
Command and ControlT1071.004DNSDNS-over-HTTPS
Command and ControlT1095Non-Application Layer ProtocolQUIC/UDP (quic-go) como alternativa ao WebSocket
ExfiltrationT1041Exfiltration Over C2 ChannelDados compactados em ZIP