Обман в онлайн-играх: возможно ли запретить процессу Win32 проверять / манипулировать памятью другого?
Я играю в онлайн-игру World of Warcraft, которая страдает от автоматических ботов, которые проверяют выделенную память игры, чтобы прочитать информацию о состоянии игры / игрока / мира, которая используется для механической игры. Они также иногда пишут непосредственно в память игры, но более сложные не, насколько я знаю.
У производителя игры Blizzard Entertainment есть отдельное приложение под названием Warden, которое должно обнаруживать и отключать подобные хаки и читы, но не все.
Возможно ли создать приложение для Windows, где вы будете единственным, кто может читать то, что вы прочитали, в память?
Будет ли это прагматично для реализации в большом приложении C++, которое работает на миллионах машин?
8 ответов
Не может быть сделано Приложение находится во власти ОС, когда дело доходит до доступа к памяти. Тот, кто контролирует ОС, контролирует доступ к памяти. Пользователь имеет полный доступ ко всей машине, поэтому он всегда может запускать процессы с правами, установленными для чтения из памяти других процессов.
Это предполагает "обычную" среду - современное оборудование с многоцелевой ОС, позволяющей запускать несколько одновременных программ и т. Д.
Подумайте об этом так - даже специализированные машины, где разработчики имеют полный контроль над аппаратным обеспечением, с цифровой подписью и всеми возможными приемами, такими как XBox или PlayStation, не могут удержать сторонний код. Для многоцелевой ОС это будет в 10 раз сложнее.
Если вы хотите добиться реальной безопасности, а не только мрака, это нужно делать на уровне операционной системы. Это часть того, что называется Trusted Computing, о чем много говорили в последние годы, но никакого реального прогресса не было достигнуто (вы можете найти Microsoft Palladium для одного примера).
Если вы попытаетесь решить эту проблему криптографии с закрытым и открытым ключами, в настоящее время нет способа скрыть закрытый ключ, который вы используете в своем приложении, от хакера. Как только хакер найдет ваш закрытый ключ, он сможет использовать его для эмуляции вашего приложения - и все, что вы можете сделать, это сделать его несколько сложнее.
Некоторые частичные решения возможны в многопользовательских играх, где часть игры запускается на серверах. Вы можете использовать тот факт, что хакер не имеет доступа к серверу и, следовательно, сервер может выполнять операции, используя собственный закрытый ключ, который хакер не может получить. Это может помочь в некоторых ситуациях, но это далеко не общее решение.
Warden не является отдельным приложением и не пытается каким-либо образом отключать хаки. Его структура в основном эквивалентна трояну, который сносит (теоретически доверенный) код из известного местоположения и затем запускает его. Этот код выполняет различные проверки (подавляющее большинство из которых хэшируются в памяти для обнаружения исправлений для таких вещей, как обработчики событий ботов), чтобы пометить учетную запись как "подозрительную". Затем Blizzard ждет, пока у них не появится достаточное количество "подозрительных" учетных записей, и запускает волну запретов (есть некоторые заметные исключения, которые могут привести к мгновенным банам, но они нацелены на определенные известные хаки, такие как Glider или D2JSP в Diablo II, не для общего обмана).
Моя цель объяснить это двояка: во-первых, вы должны знать, что Warden очень небезопасен по своему замыслу. Вы даете кому-то возможность выполнять произвольные инструкции x86 на вашем компьютере, вероятно, с полным доступом администратора, если вы используете Windows. Существуют частные повторные реализации серверного кода Warden, которые развернуты на частных эмулируемых серверах, и они могут быть вредоносными. Я говорю это как кто-то, кто написал пользовательские модули Warden. Во-вторых, и в большей степени относится к указанному вопросу, Warden - это не инструмент предотвращения, это инструмент наказания и серьезное вторжение в личную жизнь. Если вы разработчик игры и хотите внедрить подобную систему, я настоятельно рекомендую вам не использовать ее, поскольку она открывает множество банок с червями и все равно не работает. Поскольку он включает в себя динамическую загрузку кода, существует множество способов его испортить, многие из которых сложно найти в стандартном тестировании. Не обращая внимания, единственное реальное усилие Blizzard по предотвращению хаков в WoW - это их попытка помешать плагинам Lua делать что-то похожее на боты (и даже это время обходилось много раз). И, как говорили другие, принципиально невозможно остановить взломы, даже с такой динамичной системой, как Warden. Даже не касаясь игровой памяти, пакетов и чтения с экрана более чем достаточно для создания продвинутого бота (посмотрите на mm.BOT и RedVex или любого из старых ботов AutoIt, которые полностью работают с распознаванием пикселей).
Лучший способ остановить ботов, в игре или как-то еще, это все-таки использовать CAPTCHA. Это не обязательно должно быть искаженное изображение. Есть много способов интегрировать тесты "человек или ИИ" в игры, которые, по крайней мере, несколько прозрачны для законных пользователей. Если вы сделаете систему достаточно модульной, вы сможете делать обновления гораздо быстрее, чем любой публично выпущенный хакер захочет обновить свой код.
Существует хорошая книга на эту тему:
Эксплуатация онлайн-игр: обман мошеннических систем (ISBN-10: 0132271915 или ISBN-13: 978-0132271912)
Проблема в том, что существует угроза не только другим потокам / приложениям, но и уровню ядра. Есть боты, которые работают вместе с чем-то вроде корневого набора, чтобы скрыться от программы обнаружения.
И даже если бы вы могли это сделать, есть возможность запустить игру на виртуальной машине и изменить виртуальную память с хоста. Гость никогда не узнает.
Пока ваш код работает на компьютере пользователя, пользователь будет находить способ быть навязчивым. Вы ничего не можете сделать, чтобы предотвратить это.
Да, вы можете сделать это, если вы можете позволить себе работать только на Vista и более поздних версиях. См. Главу "Защищенные процессы" в этой статье.
Игра Runescape - MMO на основе браузера - долгое время сражалась с проигравшими. Их первой попыткой была капча, которую нужно вводить каждые несколько минут во время игры. Их второй попыткой были различные графические тесты, которые игрок должен был пройти. Последней их попыткой было телепортировать игрока из того, что он делает время от времени, и заставлять его решать головоломку.
Каждый из них работал некоторое время, но в конце концов каждый из них был взломан и был решаем с помощью машины.