как работают прицельные боты в fps играх? - PullRequest
66 голосов
/ 17 ноября 2009

Мне было любопытно, имел ли кто-либо опыт / знания о прицельных ботах в онлайн-играх FPS, таких как Counter-Strike. Мне любопытно, и я хотел бы узнать больше о том, как курсор знает, как заблокировать противостоящего игрока. Очевидно, что если бы я хотел обмануть, я мог бы скачать некоторые читы, так что это больше для изучения. Что все в этом замешано? Они подключают пользовательскую мышь / клавиатуру, чтобы переместить курсор в правильное положение? Как чит-приложение знает, куда именно навести курсор? Чит-приложение должно иметь доступ к данным в игровом приложении. Как это сделать?

РЕДАКТИРОВАТЬ: на sids ответьте, как люди получают эти известные области памяти для получения данных? РЕДАКТИРОВАТЬ 2: Допустим, я нахожу некоторые значения, которые я хочу в месте 0xbbbbbbbb с помощью программы отладки или другими способами. Как мне теперь получить доступ и использовать данные, хранящиеся в этом месте в приложении, поскольку у меня нет этой памяти, игра делает. Или теперь у меня есть доступ к нему, поскольку я внедрил его в процесс и могу просто скопировать память по этому адресу, используя memcpy или что-то еще?

Кому-нибудь еще есть что добавить? Пытаясь узнать как можно больше об этом!

Ответы [ 6 ]

70 голосов
/ 17 ноября 2009

Где-то в памяти игры находятся координаты X, Y и Z каждого игрока. Игра должна знать эту информацию, чтобы знать, где визуализировать модель игрока и т. Д. (Хотя вы можете ограничить объем информации, которую может знать игровой клиент, отправив ему информацию об игроке только для тех игроков, которые находятся в поле зрения).

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

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

Обратите внимание, что их труднее писать при использовании рандомизации адресов, хотя и не невозможно.

Редактировать: Если вам интересно, как программа может получить доступ к памяти других программ, типичный способ сделать это - DLL-инъекция .

Edit: так как это все еще получает некоторые хиты, есть больше способов работы прицелов, которые сейчас более популярны; а именно, перезаписывает (или исправляет на месте) DLL-библиотеку Direct3D или OpenGL и исследует вызовы функций для рисования геометрии и вставки вашей собственной геометрии (для таких вещей, как настенные хаки) или получения позиций моделей для прицеливания.

13 голосов
/ 17 ноября 2009

Интересный вопрос - не совсем ваш ответ, но я помню, что в первые дни Counter-Strike люди обычно заменяли свои opengl32.dll на испорченные, которые делали полигоны прозрачными, чтобы они могли видеть сквозь стены.

Хаки улучшились и стали более раздражающими, а люди стали более креативными. Теперь Valve / Steam, похоже, отлично справляются с их удалением. Просто небольшое предупреждение, если вы планируете поиграть с этим материалом, Steam сканирует «хаки» и, если они будут найдены, они навсегда забанят вас

10 голосов
/ 17 ноября 2009

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

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

Они по-прежнему должны быть в состоянии точно определить подобные вещи в памяти и иметь те же проблемы, что и настоящие «целевые боты».

9 голосов
/ 17 ноября 2009

Другой метод, который использовался в прошлом, - это обратное проектирование форматирования сетевых пакетов. Атака «человек посередине» на поток пакетов (который может быть выполнен в той же системе, в которой запускается игра) может предоставить позиции игрока и другую полезную связанную информацию. Поддельные пакеты могут быть отправлены на сервер, чтобы перемещать игрока, стрелять или делать все что угодно в зависимости от игры.

5 голосов
/ 20 октября 2015

Ознакомьтесь с серией уроков Fleep здесь . Его полностью закомментированный исходный код C # можно скачать здесь .

В двух словах:
Найдите координаты x y z вашего игрока, координаты курсора x y, а также координаты всех врагов x y z. Рассчитайте расстояние между вами и ближайшим врагом. Теперь вы можете рассчитать координаты курсора x y, необходимые для автоматического прицеливания.

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

Опять же, посмотрите исходный код, чтобы увидеть подробно, как все это работает.

3 голосов
/ 04 августа 2014

Редактировать: я знаю этот оффтоп, извините, но я подумал, что это поможет аскеру.

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

Тогда вам просто нужно изучить способ передачи сигналов TCP и сохранить их в хэш-таблице или в многопользовательском (пакетном) классе. Затем, после извлечения информации и наложения информации на окно (не подключенное), просто прозрачные метки и 2D-поля над экраном оконной игры.

Я тестировал его на Call of Duty 4 и получил местоположения 4 игроков через TCP, но также, как сказал Рон Уорхолик: все методы взлома не будут работать, если разработчик игры написал игру сервер только для вывода игроков, когда текущий пользователь должен видеть игрока.

И после обрезания передача местоположения этого игрока, как для X Y Z, и игрок больше не будет сохраняться и не обрабатываться там для остановки WallHack. И прицелы будут в некотором роде работать, но не эффективно. Так что в любом случае, если вы хотите создать взлом, не подключайтесь к процессу, попробуйте изучить WinPCap и подключиться к Интернет-сигналам. Что касается игр, не ищите список процессов для интернет-передач. Если вам нужен пример, который использует это, перейдите к поиску Rust Radar, который выводит местоположение игрока на карте, а также выводит других игроков вокруг вас, которые отправляются через интернет-передачи TCP и не подключены к игре.

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