Обман в онлайн-играх: возможно ли предотвратить процесс проверки/управления другой памятью одним процессом Win32?

Я играю в онлайн-игру World of Warcraft, которой страдают автоматические боты, которые проверяют выделенную память игры, чтобы читать информацию о игровом/игровом мире, которая используется для механической игры в игру. Они также иногда пишут непосредственно в игровой памяти, но более сложные из них, насколько мне известно, не имеют.

У разработчика игры Blizzard Entertainment есть отдельное приложение Warden, которое должно обнаружить и отключить хаки и читы, подобные этому, но оно не поймает все.

Можно ли сделать приложение Windows, где вы можете читать только то, что вы прочитали в памяти?

Было бы прагматично реализовать на большом С++-приложении, которое работает на миллионах машин?

Ответ 1

Невозможно выполнить. Приложение находится во власти ОС, когда дело доходит до доступа к памяти. Тот, кто контролирует ОС, контролирует доступ к памяти. Пользователь имеет полный доступ ко всей машине, поэтому они всегда могут запускать процессы с привилегиями, позволяющими им читать из памяти других процессов.

Это предполагает "обычную" среду - сегодняшнюю аппаратную часть с многоцелевой ОС, которая позволяет запускать несколько одновременных программ и т.д.

Подумайте об этом именно так: даже универсальные машины, в которых разработчики имеют полный контроль над оборудованием, с цифровой подписью и всеми трюками, такими как XBox или PlayStation, не удастся сохранить внешний код. Для многоцелевой ОС это будет в 10 раз сложнее.

Ответ 2

Если вы хотите достичь реальной безопасности, а не только безвестности, это необходимо сделать на уровне операционной системы. Это часть того, что называется Trusted Computing, о чем много говорили за последние годы, но никакого реального прогресса не было (вы может искать Microsoft Palladium для примера).

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

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

Ответ 3

Warden не является отдельным приложением и не пытается каким-либо образом отключить хаки. Структура его в основном эквивалентна трояну, который выталкивает (теоретически доверенный) код из известного местоположения, а затем запускает его. Этот код, чем выполняет различные проверки (подавляющее большинство из которых являются ячейками хэширования в памяти для обнаружения патчей для таких вещей, как обработчики событий бота), чтобы отметить учетную запись как "подозрительную". Затем Blizzard ждет, пока у них не будет достаточного количества "подозрительных" учетных записей и будет выполняться волна запрета (есть некоторые заметные исключения, которые могут привести к мгновенным запретам, но они нацелены на определенные известные хаки, такие как Glider или D2JSP в Diablo II, не для общего обмана).

Моя мысль объяснить это двоякая: Прежде всего, вы должны знать, что Warden очень небезопасен по дизайну. Вы даете кому-то возможность выполнять произвольные инструкции x86 на вашем компьютере, вероятно, с полным доступом администратора, если вы используете Windows. Существуют частные повторные реализации кода сервера Warden, которые развертываются на частных эмулируемых серверах, и это может быть вредоносным. Я говорю об этом как о ком-то, кто написал специальные модули Warden. Во-вторых, и более актуальным для вопроса, как указано, Warden не является средством профилактики, это инструмент наказания и серьезное вторжение в частную жизнь. Если вы разработчик игр, который хочет внедрить подобную систему, я настоятельно рекомендую против нее, поскольку она открывает много банок червей и все равно будет терпеть неудачу. Поскольку он включает в себя динамически загружаемый код, существует много и много способов его испортить, многие из которых будут трудно найти при стандартном тестировании. Уордер в стороне, Blizzard только реальное усилие, чтобы остановить взломы, сделанные в WoW, - это их попытка прекратить плагины Lua делать что-нибудь близко к боттингу (и даже этот час был обойден много раз). И, как говорили другие, принципиально невозможно остановить хаки, даже с такой динамичной системой, как Warden. Даже не касаясь игровой памяти, пакетов и показаний экрана более чем достаточно для создания продвинутого бота (посмотрите на mm.BOT и RedVex, или на любые из ботов AutoIt для старых пользователей, которые полностью работают с обнаружением пикселей).

Лучший способ остановить ботов, в игре или в других случаях - использовать CAPTCHA. Однако это не должно быть искаженное изображение. Существует множество способов интеграции тестов человеческого или ИИ в игры, которые, по крайней мере, несколько прозрачны для законных пользователей. Если вы сделаете систему достаточно модульной, вы сможете делать обновления намного быстрее, чем любой публично выпущенный хак позаботится обновить свой код.

Ответ 4

И даже если бы вы могли это сделать, появилась возможность запуска игры на виртуальной машине и изменение виртуальной RAM от хоста. Гость никогда не узнает.

Ответ 5

Существует хорошая книга об этой теме:

Использование онлайн-игр: обман массовых распределенных систем (ISBN-10: 0132271915 или ISBN-13: 978-0132271912)

Проблема заключается в том, что существует не только угроза других потоков/приложений, но и уровень ядра. Есть боты, которые работают вместе с чем-то вроде корневого набора, чтобы скрыть от программного обеспечения обнаружения.

Ответ 6

Пока ваш код запускается на компьютере пользователя, пользователь выяснит способ навязывания. Нет ничего, что вы могли бы сделать, чтобы этого не случилось.

Ответ 7

Да, вы можете это сделать, если можете позволить себе работать только на Vista и позже. См. Главу "Защищенные процессы" в этой статье.

Ответ 8

Игра Runescape - MMO на основе браузера - сражалась с (проигрывающей) битвой против бутылок в течение самого долгого времени. Их первой попыткой была CAPTCHA, которую нужно было бы вводить каждые несколько минут во время игры. Их вторая попытка заключалась в различных графических тестах, которые должны были бы пройти игроком. Их последняя попытка заключалась в том, чтобы телепортировать игрока из того, что они делают время от времени, и заставляя их решать головоломку.

Каждый из них работал некоторое время, но в итоге каждый из них был взломан и разрешен машиной.