Согласно проведенным исследованиям Британских, ой! нет! не будем позорить их доброе имя! Итак, согласно проведенным исследованиям Нидерландских ученых, работающих в компании Irdeto: 61% геймеров в Соединенном Королевстве и Германии плохо относятся к читерам. Очевидно, что остальные 39% Германских и Английских игроков - это были сами читеры. Неплохое соотношение, да.
Тем не менее, руководствуясь данном логикой и совсем немного - получением денежного профита со всей 100% части геймеров в недрах Irdeto родилась гениальная идея срубить новую анти-чит систему Denuvo Anti-Cheat в рамках вступления в НАТО коалицию ESIC (Esports Integrity Coalition). Товарищ Блаукович, выступая на очередном съезде данной организации сказал буквально следующее:
“We must continue to combat cheating in both online multiplayer games and Esports, and our membership of ESIC is a symbol of our commitment to protecting legitimate players from the negative impact of cheating.” (Reinhard Blaukovitsch, Managing Director of Denuvo, Irdeto)
При этом зал встретил бурными овациями слова товарища Блауковича. Первый секретарь ESIC, товарищ Смит горячо поддержал предыдущего оратора своим высказыванием:
“It is always wonderful to welcome new members into the Coalition. The addition of Denuvo will support our efforts to keep Esports safer against the threat of cheating, match manipulation and betting fraud.” (Esports Integrity Commissioner Ian Smith)
Комплексное решение анти-читинга, по словам разработчиков денуво, должно быть обеспечить 100% (ох! лол) контроль целостности данных игры и предотвратить их изменение.
Небольшая аналитика для нового тренда DENUVO, и что по существу из этого может выйти.
*******************************************************************************************
На самом деле мало кто помнит, но создатели DENUVO изначально позиционировали своё детище, как систему против читеравства (!!!). Anti-tamper - это покрытие критичных кусков кода игры от постороннего вмешательства.
Anti-tamper сольюшн, как анти-читер сольюшн.Достигалось это тем, что критичный код помещался под виртуальную машину (VMProtect, и последующий CPS style), а переменные в игрушке разбавлялись дополнительным защитным кодом DENUVO (туда встраивалась инструкция CPUID для симуляции проверки лицензии).
Ввиду того, что VMProtect был скомпроментирован не один раз, а так-же существуют рабочие способы патчинга самого VMProtect и кода DENUVO, защита на таком подходе представляется малоэффективной. Код всё равно найдут, отреверсят и изменят, как бы разработчики не старались.
Постоянный контроль переменных в игре, как анти-читер сольюшн. Все (ну, или большая часть)отлично знают и помнятArtMoney. Допустим у нас есть 1 000 голды - из неё нужно получить 1 000 000 голды. Нет проблем - вбиваем значение 1 000, ищем в памяти игрушки, отсеваем, находим нужное, правим на 1 000 000. Всё! Экономика встала с колен, можно клепать сотнями мамонт-танчики, "Кировы", купить дорогущие артефакты и выиграть игру (this is no cow level). Но тут появляется DENUVO и говорит: "эй! пацачник, а теперь расскажи мне, как ты заработал свой первый миллион, когда у тебя пять минут назад все харвестеры сожрали песчаные черви и нет ни одного перерабатывающего завода?" ... На самом деле,эта шутка с большой долей правды. Начнем с того, что защита может шифровать данные в памяти, и тогда без анализа кода, который манипулирует этими данными, сложно найти истину. Впрочем:
1. Не забываем, что VMProtect и виртуальная машина CPS были уже скомпроментированы множество раз.
2.Алгоритм шифрования переменных (денег, голды, жизней, другого профита) не может быть намного сложнее, чем какой нибудь тривиальный XOR(исключающее или).
3. Сам алгоритм контроля из-за многопоточного взаимодействия (всякие EnterCriticalSection, LeaveCriticalSection и InitializeCriticalSection) должен работать мгновенно и не иметь лишнего мусора.
В современных играх значения переменных будут меняться очень очень быстро и сильно варьироваться, т.е. для принятия решения назвать геймера читером DENUVO должен иметь крайне веские основания и железные факты, которые требуется собрать за достаточно длительный промежуток времени (например, полное отсутствие харвестеров и перерабатывающих заводов, а так-же иных источников поступления денег).
Что имеем в итоге:
1. Если в логике принятия такого решения не учитывать все факторы, то от некорректной работы страдать будут честные геймеры (например, DENUVO забыла, что Вы построили 10 научных лабораторий, которые при продаже дали Вам 1 000 000 голды)
2. Ввиду сложности и многогранности реализации такой процедуры процедуры, защитный код проще найти и нейтрализовать (за один заход требуется обратиться к большому количеству данных).
3. Как показывает практика, DENUVO не особо заботится о защите переменных - на изменение/подделку Вашего HWID для лицензии (данные в системных структурах Windows - KUSER_SHARED_DATA, Process Enviroment Block...) защите, по факту, как-то по барану и бубну тоже, что доставляет:
Черный список приложений (исполняемых файлов читов), как анти-читер сольюшн. Собственно самый древний и боянистый способ контроля, известный ещё с ранних версий SecuROM (ЦАРСТВО НЕБЕСНОЕ ЕМУ!), и даже ещё раньше.Вернемся к многострадальному ArtMoney. Как там называется файл, который запускается на исполнение? ArtMoney.exe Отлично! Тeперь, любой, у кого в списке процессов ArtMoney.exe, будет навечно иметь клеймо 'читер'. Эм! Ну в смысле для DENUVO :))) Кроме списка запущенных процессов, которые обычно любая защита получает с помощью:
HANDLE CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
используются типичные WinAPI для поиска окошек:
HWND WINAPI FindWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName
);
HWND WINAPI FindWindowEx(
_In_opt_ HWND hwndParent,
_In_opt_ HWND hwndChildAfter,
_In_opt_ LPCTSTR lpszClass,
_In_opt_ LPCTSTR lpszWindow
);
Ввиду того, что производители читов обожают разукрашивать свои творения, впихивая туда тонны музыки и картинок, юзаются более продвинутые методы определения типа парсинга ресурсов.
Некоторые особо продвинутые инжектятся динамической библиотекой (DLL) в игрушку, и управляют количеством профита из неё. Тогда в дело вступают такие WinAPI функции:
BOOL EnumProcessModules(
HANDLE hProcess,
HMODULE *lphModule,
DWORD cb,
LPDWORD lpcbNeeded
);
DWORD WINAPI GetModuleFileName(
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);
Что в итоге:
как видите, тонкости работы данного метода давно известны и превосходно документированы. Irdeto не придумает здесь ничего нового. Черные списки можно контрить. Функции WinAPI перехватывать и возвращать подложные данные. Короче, боян.
Контроль текстур, как анти-читер сольюшн. Пожалуй, один из самых распространенных методов читерства (в некоторых случаях, самый главный) в онлайн-играх. Текстуры, мапхаки...
Завязан на изменении файлов текстур (DSS), изменении логики работы рендера и тд. Как уже было неоднократно сказано - у DENUVO, на самом деле, очень плохо обстоят дела с контролем целостности себя и, тем более, исходного кода игрушки. В текущем виде защита может делать проверку целостности файлов в памяти и на диске, но здесь очень много нюансов, которые мешают выполнять данные защитные функции эффективно (например, всё тот же перехват WinAPI, тонкости работы DirectX/Vulkan/OpenGL). Ниже представлен пример работы защищенной DENUVO игры Unravel с текстурами, как видите, данная часть кода абсолютно открыта и свободно просматривается в дизассемблере IDAPro:
Что в итоге: понятно, что всё зависит от реализации. Но, вряд-ли в Irdeto смогут сделать эффективную защиту против текстурохаков не решив старые и всем известные проблемы самой DENUVO.
Что ещё можно добавить к вышесказанному? Разве что, напомнить о существовании всяких FairFight, PunkBuster, VAC (Valve Anti-Cheat) ... тысячи их!
Несмотря на долгий срок существования и солидный опыт в борьбе с читерством, сама проблема решена не была. И тут появляется DENUVO ... а мы посмотрим, что из этого получится.
p.s. данная статья была написана для анализа деятельности DENUVO и компании Irdeto.