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

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

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

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

Прагматично ли это реализовать в большом приложении C ++, которое работает на миллионах машин?

Ответы [ 8 ]

20 голосов
/ 04 июня 2009

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

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

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

8 голосов
/ 04 июня 2009

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

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

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

8 голосов
/ 04 июня 2009

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

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

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

6 голосов
/ 04 июня 2009

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

Эксплуатация онлайн-игр. Обман массово распределенных систем. (ISBN-10: 0132271915 или ISBN-13: 978-0132271912)

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

6 голосов
/ 04 июня 2009

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

4 голосов
/ 04 июня 2009

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

4 голосов
/ 04 июня 2009

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

2 голосов
/ 05 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...