Pesquisa GReAT

Argamal: Um malware oculto em jogos de hentai

Em abril de 2026, descobrimos uma nova campanha de malware direcionada ao público de jogos adultos, também conhecidos como “jogos de hentai”. Uma vez iniciados, os jogos infectados instalam um novo implante malicioso, até então desconhecido, na máquina do usuário, que baixa e executa um trojan após alguns dias de atraso, resultando no comprometimento total do sistema e concedendo aos invasores amplas capacidades de controle remoto sobre a máquina da vítima. Denominamos essa família de malware como “Argamal”.

Esse malware persiste na máquina da vítima usando o sequestro de COM, substituindo a entrada InprocServer32 pela DLL do loader de Calibração do sistema de cores do Windows. Essa tarefa é acionada quando o usuário faz login, fazendo com que o malware seja executado na inicialização.

As soluções da Kaspersky detectam essa ameaça como Trojan.Win32.Termixia.*, Trojan.Win32.Agent.*, HEUR:Trojan.Win32.Argamal.gen e HEUR:Trojan-Downloader.Win32.Argamal.gen.

Detalhes técnicos

Histórico

Em abril deste ano, como parte do monitoramento contínuo de dados de telemetria, encontramos algumas DLLs suspeitas. Após uma análise mais aprofundada, descobrimos que várias versões dessas DLLs existiam desde 2024.

As DLLs foram geradas por diferentes jogos, escritos por diferentes engines de jogos e linguagens de programação, incluindo RenPy (Python), RPG Maker MV (JavaScript) e outros. No entanto, eles tinham algo em comum: todos eram jogos de hentai. Procuramos as fontes de distribuição e encontramos vários sites que hospedavam capturas de tela de jogos e links para download. Esses links redirecionavam os usuários para o PixelDrain, um serviço de transferência de arquivos gratuito.

Catálogo de jogos adultos

Catálogo de jogos adultos

Além desses sites, os jogos trojanizados também foram distribuídos por diferentes rastreadores de torrent, incluindo o AniRena.

Torrent de jogo malicioso no AniRena

Torrent de jogo malicioso no AniRena

Entrega

Tanto os sites dedicados quanto os torrents entregaram um arquivo comprimido contendo o jogo infectado.

Conteúdo do arquivo comprimido do jogo

Conteúdo do arquivo comprimido do jogo

Dentro desse arquivo comprimido, havia arquivos de jogo legítimos e funcionais, além de uma DLL ffmpeg modificada (SHA1: 42add9475e67a1ccc6a6af94b5475d3defc01b85), que importava a função DllGetClassObject de um arquivo chamado natives2_blob.bin. Como o jogo precisa do ffmpeg.dll para ser executado corretamente, a biblioteca é carregada assim que ele é iniciado pelo usuário.

Executor de scripts

O arquivo natives2_blob.bin (SHA1: edce72f59e4c1d136cd1946af70d334c19df858d) é uma DLL que executa o script PowerShell codificado em Base64 quando carregado.

O código do arquivo natives2_blob.bin

O código do arquivo natives2_blob.bin

Esse script PowerShell (que chamaremos de Stage1) faz verificações básicas em ambientes controlados, por exemplo, verifica a existência da pasta Sandboxie em Arquivos de Programas e do Procmon64 na lista de processos. Se todas as verificações indicarem que o processo não está sendo executado em um ambiente controlado, ele prossegue para estabelecer persistência.

O Stage1 define a variável de ambiente MI_V (e também MI_V2 nas novas versões do malware) para o usuário atual, atribuindo a ela outro script PowerShell codificado em Base64 (que chamaremos de Stage2). Depois disso, ele define a chave de registro InprocServer32 em HKCU\SOFTWARE\Classes\CLSID{722D0F89-B69C-4700-AE8C-4A44350E4876} para um nome de arquivo DLL aleatório em um subdiretório aleatório de %USER%\AppData\Local e a subchave ShellFolder para outro nome de arquivo DLL aleatório no mesmo local. O Stage1 também cria uma tarefa programada, que será executada três dias depois. Essa tarefa inicia o Stage2 e é executada uma única vez.

O Stage2 é um script downloader de payload. Ele obtém nomes de arquivos DLL gerados anteriormente do registro e baixa um payload criptografado chamado zaesdl.dat do GitHub usando bitsadmin.exe. O payload baixado é salvo no arquivo settings.dat no subdiretório aleatório escolhido anteriormente do %USER%\AppData\Local. O Stage2 o descriptografa usando AES-CBC com a chave zbcd1j9234r670eh e IV igual à chave. O payload descriptografado é então salvo em um arquivo DLL já especificado na subchave do registro ShellFolder.

O payload descriptografado é definido como InprocServer32 em HKCU\SOFTWARE\Classes\CLSID\{B210D694-C8DF-490D-9576-9E20CDBC20BD}, que é um objeto COM usado pela tarefa programada \Microsoft\Windows\WindowsColorSystem\Calibration Loader. Essa tarefa é executada sempre que um usuário faz login, permitindo que o malware seja executado durante a sessão de cada usuário.

Antes de sair, o Stage2 também remove a tarefa programada que o iniciou e as alterações feitas sob a chave de registro HKCU\SOFTWARE\Classes\CLSID\{722D0F89-B69C-4700-AE8C-4A44350E4876}, além de desativar a variável de ambiente MI_V (e também MI_V2 nas novas versões do malware).

Agente malicioso

As versões iniciais do payload se autodescriptografavam usando a chave XOR rotativa 0xB0C1D4E9, na qual a chave de descriptografia do bloco i + 1 é o conteúdo criptografado do bloco i, sendo que cada bloco criptografado possui tamanho de 4 bytes. As versões mais recentes do agente não fazem isso.

As amostras que encontramos utilizam criptografia de strings: elas aplicam uma substituição simples com uma chave que corresponde, posição por posição, ao seguinte alfabeto: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$./:<>*&~. O processo de descriptografia consiste em encontrar a posição de cada símbolo das strings criptografadas na chave e substituí-lo pelo símbolo que ocupa a mesma posição no alfabeto.
Durante a nossa investigação, encontramos as seguintes chaves usadas:

  • 17htUno/I3L&fK2H#yapE@b5NqZ$Q4xmeF.s96uB>jkdWCPvAgD*XwO:iR~TMrV0YGl8z<JSc
  • 71htUno/I3L&fK2H#aypE@b5NqZ$Q4xmeF.s96uB>jdkWCPvAgD*XwO:iR~TMrV0YGl8z<JSc
  • E1hUtno/IL3&fK2H#ypa7@b5NqZ$Q4xmeF.s69uB>jkdWCvPAgD*XwO:iR~TrMV0YGl8z<JcS

Todos os símbolos que não são usados na chave permanecem inalterados.

Descriptografia de strings

Descriptografia de strings

O payload verifica a presença das seguintes soluções de segurança usando a saída do comando tasklist:

  • Kaspersky
  • Avast
  • McAfee
  • BitDefender
  • MalwareBytes
  • +36 outras soluções
Lógica de detecção da solução de segurança

Lógica de detecção da solução de segurança

O payload em si é um RAT com ampla funcionalidade. O servidor de C2 padrão é o asper1[.]freeddns[.]org nas versões anteriores ou o Winst0[.]kozow[.]com nas versões mais recentes do payload. Ambos os domínios apontam para 186[.]158.223.35. Também encontramos outro endereço IP para o primeiro C2 nos registros pDNS, mas não detectamos o seu uso. O endereço C2 pode ser alterado com base na resposta C2 ou se algumas condições forem atendidas. Por exemplo, se a localidade padrão do usuário for definida como “zh-CN”, o RAT definirá seu endereço C2 como country1[.]ignorelist[.]com. Durante a maior parte da nossa investigação, esse domínio apontou para 127[.]0.0.1, mas a partir de 26 de abril, ele também passou a apontar para 186[.]158.223.35.

O payload envia sinais de verificação via UDP para a porta 57441 do servidor de C2. Esses sinais de verificação contêm informações sobre soluções de segurança detectadas, hora de inicialização do sistema, horário da última atividade de entrada, informações sobre a arquitetura, endereço IP da máquina e nome de usuário.

O C2 pode responder ao sinal de verificação. Com base nessa resposta, o payload pode executar ações diferentes. Abaixo está a lista completa de comandos disponíveis.

Primeiro byte da resposta Descrição
0x31 Executar DLL no sistema
0x57 Enviar solicitação UDP para o endereço especificado
0x55 Abrir arquivo ou link da resposta
0x50 Coletar informações sobre o sistema infectado (por exemplo, lista de processos e arquitetura)
0x53 Executar o comando da resposta usando ShellExecuteW
0x52 Executar o arquivo especificado na resposta usando WinExec
0x42 Excluir o arquivo especificado na resposta
0x41 Atualizar o domínio C2
0x59 Obter novo payload: conectar-se à porta C2 63559/UDP, obter uma nova DLL e atualizar o caminho COM no registro

O C2 também pode definir uma flag na resposta que ativará o modo RAT estendido. Nesse modo, o payload se comunica com o servidor de C2 usando a porta 3747/TCP.

As comunicações TCP são criptografadas usando uma cifra de substituição simples. Cada caractere é substituído usando um mapeamento fixo definido pela chave:

Essa chave corresponde posição por posição à sequência de caracteres ASCII padrão:

Em outras palavras, cada caractere no conjunto ASCII é substituído pelo caractere na mesma posição na string da chave.

As solicitações e respostas C2 são divididas em duas partes, começando com um caractere de espaço. A primeira parte é um comando e a segunda parte geralmente é um argumento.

Após a conexão e antes de receber informações do C2, o malware envia metadados sobre a máquina infectada usando o comando NOOP. Os metadados incluem um contador de ciclos de execução, metadados de unidades montadas, horário da última atividade de entrada e dados sobre configurações de exibição.

Com base no comando C2, o malware pode executar comandos na máquina infectada, efetuar ações de reinicialização e desligamento, controlar o cursor, fazer capturas de tela, compactar arquivos em arquivos comprimidos, enviar arquivos para outros servidores especificados pelo C2 e controlar totalmente a máquina. A lista completa de comandos é a seguinte:

Controle do sistema

  • KILL REBOOT: Reinicia o sistema infectado
  • KILL POWER: Encerra o sistema infectado
  • KILL SELF: Igual ao comando QUIT (descrito abaixo)
  • KILL ME: Encerra o processo que executa o malware

Vigilância

  • SCREEN / SCREEN9: faz uma captura de tela, salva-a no arquivo ~wra1269.tmp e a envia ao C2

Operações de arquivo

  • DELETE <nome do arquivo>: exclui o arquivo especificado
  • DELDIR <nome do diretório>: exclui o diretório especificado
  • REN <caminho do arquivo 1>#<caminho do arquivo 2>: move o arquivo especificado
  • MAKDIR <caminho>: cria o diretório
  • ZIPFILE <nome do arquivo ou da pasta> / ZIPFOLDER <nome do arquivo ou da pasta>: compacta o arquivo/pasta especificado em um arquivo .zip
  • TAR <nome do arquivo ou da pasta> / TAR2 <nome do arquivo ou da pasta>: compacta o arquivo/pasta especificado em um arquivo .tar
  • GETFILEDATE <nome do arquivo>: envia a data da última modificação do arquivo
  • SETFILEDATE <nome do arquivo>: define a data da última modificação do arquivo
  • GETFILEACC <nome do arquivo>: envia a data do último acesso ao arquivo
  • DWLOAD <nome do arquivo>: envia o arquivo ao C2
  • UPLOAD <nome do arquivo>#<endereço C2>: carrega o arquivo no servidor de C2 especificado

Reconhecimento

  • USER: envia o nome de usuário
  • KALIVE: envia o contador de ciclos de execução
  • IDLE: envia o número de segundos decorridos desde a última atividade de entrada
  • DRIVES: envia informações sobre unidades montadas
  • FOLDEX <tipo de pasta>: envia o caminho completo para um diretório do tipo especificado:
  • – type = 0x63: diretório temporário
  • – type = 0x64: \Google\Chrome\User Data\Default\ na pasta AppData\Local
  • – type = 0x65: \Downloads\ no diretório inicial do usuário
  • – type = 0x66: \Microsoft\Excel\XLSTART\ na pasta AppData
  • – type = 0x67: pasta AppData
  • LFILES <caminho da pasta>: lista e envia caminhos para todos os arquivos no diretório
  • OSVER: envia informações sobre o usuário, nome do host, arquitetura e versão do SO
  • COMPILERDATE: envia uma constante hardcoded no RAT, por exemplo, 25.10.2025

Controles gerais

  • DSOCKE: recria o socket TCP keep-alive
  • QUIT: notifica o C2 sobre o encerramento, fecha o socket e interrompe o processo
  • RUNHID <comando> / RUN <comando>: executa o comando especificado no ShellExecuteW
  • RUNDOS <comando>: executa o comando especificado no CreateProcessW
  • RUNTASK <comando>: cria, executa e exclui a tarefa que executa o comando especificado
  • SKEY <código da tecla>: pressiona a tecla especificada
  • MOUSE FREEZE: congela o movimento do mouse
  • MOUSE <comando>: clica no botão do mouse especificado ou define a posição do cursor para as coordenadas especificadas

Outros métodos de distribuição

Também detectamos outros métodos de distribuição para o RAT durante a pesquisa. Em vez de aplicar um patch no FFmpeg e baixar o payload do GitHub, os atacantes incluíram o payload principal como libpython64.dat ou outro arquivo com nome semelhante no diretório lib\py3-windows-x86_64 do jogo. Este arquivo .dat foi carregado por uma das bibliotecas usadas no jogo, que recebeu um patch para esta finalidade.

Em outro caso, o invasor postou um arquivo DLL malicioso (downloader de payload) em um fórum do jogo, disfarçado como um cheat.

Infraestrutura

Durante a nossa pesquisa, encontramos a seguinte infraestrutura usada neste ataque.

Domínio IP Visto pela primeira vez ASN
asper1[.]freeddns[.]org 181[.]116.218.56 16 de setembro de 2024 11664
186[.]158.223.35 1° de julho de 2025 11664
country1.ignorelist[.]com 186[.]158.223.35 10 de setembro de 2025 11664
127[.]0.0.1 11 de novembro de 2025
Winst0.kozow[.]com 186[.]158.223.35 26 de abril de 2026 11664

Vítimas

De acordo com a nossa telemetria, há centenas de indivíduos infectados com esse malware, sendo que a maioria das vítimas está localizada na Rússia, Brasil, Alemanha e Vietnã.

Distribuição de vítimas (download)

Atribuição

Com base no idioma dos comentários no código, nos dados de infraestrutura e em outros fatos, há chances de que o desenvolvedor da cadeia do downloader fale espanhol.

Os invasores por trás desse ataque usam o espanhol para nomear variáveis e fazer comentários. Por exemplo, o script de entrega decodificado em base64 contém as seguintes linhas:

Parte do script PowerShell usado na entrega do payload

Parte do script PowerShell usado na entrega do payload

Além disso, o código JavaScript do site que distribui jogos infectados contém nomes de variáveis, nomes de função e comentários em espanhol:

Código JavaScript do site malicioso

Código JavaScript do site malicioso

É importante notar que os payloads de malware usados neste ataque escolhiam 127.0.0.1 como seu servidor de C2 quando a localidade padrão da vítima estava definida como “zh-CN”, não visando, portanto, usuários chineses. Isso pode indicar que o invasor está associado a um grupo cibercriminoso que fala chinês ou usa payloads desenvolvidos por um grupo que fala chinês. No entanto, nós ainda achamos ser pouco provável que o desenvolvedor dessas cadeias de entrega seja falante de chinês.

Conclusões

O trojan Argamal é um novo RAT, destinado ao público de jogos adultos. Durante a nossa análise, percebemos que o payload recebeu um fluxo constante de atualizações, teve novos recursos adicionados e diferentes bugs corrigidos, bem como alterações na infraestrutura, o que nos faz acreditar que o invasor por trás desse malware continuará a desenvolvê-lo e aprimorá-lo. É provável que o objetivo da campanha seja o roubo de dados e credenciais. No entanto, o RAT permite que o atacante tenha controle total do dispositivo e execute as atividades maliciosas que desejar.

No cenário de desenvolvimento atual, ficou muito mais fácil criar um malware graças à ampla disponibilidade de guias detalhados, ferramentas e recursos de automação. Como resultado, é cada vez mais importante não apenas detectar malware conhecido, mas também identificar ameaças novas e em evolução à medida que elas surgem. As soluções da Kaspersky detectaram a atividade maliciosa nos estágios iniciais do ataque e impediram a sua execução. Essas soluções ajudam a proteger os dispositivos, identificando ameaças conhecidas, o comportamento do software e suas ações, fornecendo proteção abrangente contra malware.

Indicadores de comprometimento

Hashes de arquivo
Payloads RAT:
76253fb55aed707440e808ea78e7101318436b1c
1405a3c5e0aeb08012484134e16cdec4ab29b4a4
535f4337f261b6da20a3c614eb13270bed2d533a
d2cb0d7a9ad2b5d4ea7c2da8aec62beb37cf36d6
e05f1767c2a337910ed75e90288838d6d0541164
dad26f61da7b8bccc78364411812be74c025b475
29f1d346a6e71774c7dad25b90f446b2974393df
e815a9b418d09c2d4bcd074c2c0bc21406eeb22f
17f8f8f34dfa737f36182fed7ff9e9814a114058
954722b0c9c678b1313d1f8b204e102842dc5889
69331cfdac792dc79240e6a6bb6e803eabd70beb
901cfa97b1baaf908fd4a02bb52d970f576c4193
5f1f3689bcf23de1b280b5f35712946da0f7978f
c2d9d48b3b10bd58cdf5df9463e3ffcd60533ff3
2423a5bf0fa7cb9ec09211630a5488629499691b
ae4601a19d28332a3ec6ac31b385cdf53be53450

Downloaders de trojan:
9803604ec45f31f9ef75bcca1e1310d8ac1fc3a6
edce72f59e4c1d136cd1946af70d334c19df858d
02819d200d1424882af81cb504b3e8614b32397a

Domínios e IPs
asper1[.]freeddns[.]org
Winst0[.]kozow[.]com
country1[.]ignorelist[.]com
186[.]158.223.35

Repositórios do GitHub usados na campanha
hxxps://github[.]com/gmz159/u
hxxps://github[.]com/DnyP/files
hxxps://github[.]com/DnyP/p

Argamal: Um malware oculto em jogos de hentai

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Relatórios

GoPix, o trojan bancário que vive na memória

Os especialistas do Kaspersky GReAT descrevem o GoPix, trojan bancário brasileiro sem precedentes, que usa implantes apenas em memória, man-in-the-middle via arquivos Proxy AutoConfig (PAC) e malvertising via Google Ads.