Содержание статьи
Формат модификаций
Скачав несколько модов, я обнаружил два формата данных: файлы с расширением ts4script
и package
. Первым делом я попробовал открыть их через 7-Zip, и ts4script
оказался обычным ZIP-архивом, содержащим скомпилированные файлы Python с расширением .pyc. Файл package
тоже оказался архивом, но проприетарным. Открыв его в Hex-редакторе, видим первые четыре байта DBPF
— очевидная сигнатура. Я загуглил «dbpf file format» и нашел подробное описание его внутреннего устройства.
Есть несколько инструментов для распаковки package
, но проще всего оказалось работать с ним в Sims 4 Studio. Открываем пакет как новый проект и видим список лежащих в архиве ресурсов. Он включает в себя текстуры, меши, анимации, файлы локализаций и прочие ассеты. В основном содержит настройки в формате XML. Исполняемого кода здесь нет.

Код сосредоточен в файлах ts4script
. Малварь распространяется через них, поэтому поддержку скриптов на свой страх и риск надо включать в настройках игры. Однако у большинства игроков скрипты включены по умолчанию, так как ими пользуются все сложные модификации. При этом я не считаю отключение скриптов стопроцентной защитой от вирусов. Парсеры лежащих в package
файлов тоже могут содержать ошибки, как я это показывал в недавней статье про GTA Vice City, а значит, могут привести к исполнению произвольного кода.
Создание скриптовых модов
Чтобы понять ограничения виртуальной машины, надо создать собственный ts4script
. Благо для этого есть фанатский SDK, предоставляющий все инструменты для сборки. Сначала поставим Python 3.7. Именно эта версия используется в самой игре. Далее открываем папку из SDK в PyCharm. Исправляем путь до игры и папки модификаций в settings.
. И запускаем скрипт decompile_all.
, который декомпилирует используемые игрой Python скрипты в папку EA
. Изменяем на свое усмотрение файл example_mod.
и запускаем скрипт compile.
. В папке для модификаций появится новый мод. При запуске игры он отобразится в списке активных модификаций.
Но для удобной отладки есть способ проще. Создаем исходный скрипт в папке для модификаций, например по пути Mods\
. При загрузке скрипта игра скомпилирует его самостоятельно. Это удобно тем, что можно установить script_reloader и вбивать в консоль игры reload
. Это приведет к горячей перезагрузке скрипта, другими словами, можно менять и пересобирать скрипт без перезагрузки самой игры. Игра загружается долго, так что это весьма полезно.
import sims4.commands@sims4.commands.Command('mfs', command_type=sims4.commands.CommandType.Live)def myfirstscript(_connection=None): output = sims4.commands.CheatOutput(_connection) output("This is my first script mod !!!") for i in range(100): output(f"Sleep {i}") time.sleep(1)
Для начала проверим максимальное время работы скрипта. Откроем консоль игры (через сочетание клавиш Ctrl-Shift-C) и вызовем созданную нами команду mfs
— мы увидим, что скрипт живет по крайней мере 100 секунд. Покопавшись в исходниках из папки EA
, я сообразил, как создать MessageBox:
import sims4.commandsfrom ui.ui_dialog import UiDialogOkfrom sims4.localization import LocalizationHelperTuningdef dlg_text(text): return lambda **_: LocalizationHelperTuning.get_raw_text(text)def message_box(title_str=None, text_str=None): dial = UiDialogOk.TunableFactory().default(None, title=dlg_text(title_str), text=dlg_text(text_str)) dial.show_dialog()@sims4.commands.Command('dlg', command_type=sims4.commands.CommandType.Live)def dlg(_connection=None): try: message_box("Пора спать!") except BaseException as e: for v in e.args: output(v)
Так как это журнал «Хакер», а не «Страна игр», мы не будем углубляться в создание модификаций. Главное, что нас интересует, — проверка ограничений виртуальной машины Python. И, судя по моим тестам, их нет вообще. Скрипт может выполнять практически любой код!
История атаки
В теме The Sims 4 на «Рутрекере» висит сообщение:
ВНИМАНИЕ! Вредоносное ПО в некоторых модах для The Sims 4!⠀
На популярных сайтах загрузок стали появляться некоторые моды, содержащие хакерские программы в файле сценария (.ts4script). Если вы запускаете игру, установив такой мод, файл .exe запускается без вашего ведома. Как только это произойдет, будет украден большой объем данных из вашего интернет‑браузера (Chrome, Edge, Opera, Firefox и других), приложений Discord, Steam, Telegram и некоторых криптокошельков.
Обнаружились такие моды на известных сайтах: MTS, TSR, Curseforge, Loverslab. Они были загружены либо через учетные записи, очень похожие на известных моддеров, либо через взломанные учетные записи.
Я решил поискать нашумевшие моды. Говорят, интернет помнит всё. Но не в нашем случае. Хеши были известны, и несколько антивирусов сделали свою работу — моды вычищены везде, где только можно. Я поспрашивал нескольких участников событий, но у них тоже не оказалось семплов. Поэтому перескажу, что делал код, с чужих слов. В любом случае метод нападения уже понятен — вредоносный скрипт на Python внутри файла ts4script
.
Комментарий с «Реддита» утверждает, что зараженный мод создает процесс Updater.
, который общается с управляющим сервером, расположенным на взломанном WordPress. Малварь, вероятно, называется Akira и представляет собой стилер, написанный на Python. Подробный разбор семпла можно почитать на cyfirma.com.
SimsVirusCleaner
Первой реакцией сообщества на новость об атаке было срочное создание специализированных антивирусов, убирающих вредоносные файлы из системы. Одним из таких инструментов с открытым исходным кодом был SimsVirusCleaner. Он занимается детектированием конкретного семпла, поэтому проверяет его хеши SHA-256:
std::string updater_hash_ = "8c8558dc150de295f4b1d557243b5d978f09cfcec94145cd1ddb5315b3a0d92a";std::string main_hash_ = "c98f0f5b89c6dac1482286faa2e33a84230c26ea38da4e013665582c9a04213b";
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее