Как работают боты цели в играх fps?

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

EDIT: ответ на вопрос, как люди получают эти известные ячейки памяти, чтобы захватить данные? EDIT2: Позволяет сказать, что я нахожу некоторые значения, которые я хочу в местоположении 0xbbbbbbbb, используя программу отладки или некоторые другие средства. Как мне теперь получить доступ и использовать данные, хранящиеся в этом месте в приложении, поскольку я не владею этой памятью. Или теперь у меня есть доступ к нему, так как я ввел его в процесс и могу просто скопировать память по этому адресу с помощью memcpy или что-то еще?

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Они все еще должны быть в состоянии точно определить этот материал в памяти и иметь те же самые проблемы, что и настоящие "Aim bots".

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

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

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