Категория > Новости > Чит своими руками. Смотрим сквозь стены и делаем автоприцеливание для 3D-шутера - «Новости»
Чит своими руками. Смотрим сквозь стены и делаем автоприцеливание для 3D-шутера - «Новости»1-04-2023, 13:09. Автор: Enderson |
Чит своими руками. Вскрываем компьютерную игру и пишем трейнер на C++» я заложил базу для будущих читов и объяснил основные понятия. Рекомендую ознакомиться с ней, чтобы лучше понимать, что мы будем сегодня делать.Выбор игрыМой выбор пал на AssaultCube — бесплатный многопользовательский шутер от первого лица, основанный на движке CUBE. Используется графическая библиотека OpenGL. warningИспользование читов нарушает пользовательское соглашение игры и может повлечь юридическое преследование. Мы обсуждаем здесь создание чита исключительно в целях обучения. Автор и редакция не несут ответственности за возможные последствия применения и распространения такого ПО. Читайте также - Безопасность - один из важных элементов любой системы управления. Наш скрипт имеет следующие параметры защиты, профессиональный, надежный, безопасный скрипт обменника электронных валют по доступным ценам. Поиск значенийДля начала запустим игру и в настройках выберем оконный режим, ведь нам нужно, чтобы на экране помещалось еще что‑то, кроме игры. Оконный режим Также создадим локальный сервер. Нужно будет настроить его, а именно задать время игры, чтобы таймер не торопил нас. Конфиг лежит по следующему пути: Стандартные настройки времени Поменяем время на максимальное — 100 минут. Новые настройки времени А после уже запускаем сам сервер. Запуск сервера И подключаемся к нему. Подключение к серверу Запускаем Cheat Engine и подключаемся к процессу игры. Подключимся к процессу игры Поиск показателя здоровьяДля тестирования нам понадобится второй игрок. Можешь подключиться со второго устройства или, как сделал я, из виртуальной машины. Для поиска показателя здоровья выставляем параметры сканирования в Cheat Engine и вторым игроком наносим урон первому. После этого ищем здоровье в Cheat Engine. Получение урона Будем наносить урон до тех пор, пока не найдем адрес, по которому хранится показатель здоровья нашего игрока. Найденный адрес HP На этом все знакомые по прошлой статье действия в Cheat Engine заканчиваются и начинаются новые. Наша цель — реализовать extrasensory perception и aimbot. Для этого нам нужно узнать класс игрока и его статический адрес. Чтобы найти класс, кликаем правой кнопкой мыши по нашему адресу и выбираем Find out what writes to this address (можно просто нажать F6). Поиск места, где идет запись по адресу Появится новое окно, где будут отображаться инструкции, которые производят запись по нашему адресу. Чтобы они появились, снова наносим урон вторым игроком первому. Найденная инструкция Показатель здоровья записывает всего одна инструкция, она расположена по смещению Структура Поиск статического адреса объекта игрокаВ прошлый раз я использовал отладчик, чтобы наглядно показать, что собой представляет статический адрес. В этот раз для поиска статического адреса мы будем использовать Cheat Engine. Жмем на ранее добавленный адрес Выбор сканирования адреса Как видишь, у нас есть множество параметров для поиска указателя, но нас интересует Max level. Это значение отвечает за то, сколько раз будет разыменован наш указатель (статический адрес). Оно‑то и поможет нам получить искомый адрес. Стандартные настройки сканирования указателя Исполняемый файл игры занимает мало, и кода в нем тоже негусто. Это наводит на мысль, что классов и структур в игре не так много и не будет большого количества смещений. Поэтому глубину поиска мы установим равной единице. Новые настройки сканирования указателя Мы видим следующий результат. Об адресах вида Результаты сканирования указателя Добавим найденные пять адресов в список. Добавленные указатели И выставим для каждого адреса смещение до показателей здоровья. Добавленный указатель на HP Далее перезапускаем игру, и Cheat Engine предложит сохранить наши адреса. Мы их сохраняем, чтобы загрузить при повторном подключении. Сохраняем наш cheat table После переподключения к игре в списке адресов Cheat Engine видим, что только два адреса указывают на показатель здоровья: После перезапуска AC Попробуем повторно получить урон и посмотреть, что будет с другими адресами. Как видим, еще в двух адресах появился наш показатель здоровья. Значит, в списке мы оставляем только два упомянутых ранее адреса. Повторное получение урона Добавим статический адрес Добавляем первый указатель Добавим статический адрес Добавляем второй указатель Класс игрокаПредположим, что статический адрес Открытие региона памяти К счастью, у Cheat Engine есть инструмент, который позволяет нам лучше визуализировать структуры памяти, а не просматривать байты в дампе. Просто жми правой кнопкой мыши по выделенному байту и выбирай Open in dissect data/structure. Открытие анализа структур Откроется новое окно с адресом выбранного байта. Нажми Structures, затем Define new structure (или Ctrl-N). Создание структуры Назовем структуру Создание класса игрока Поставив галочку Guess field type, мы попросили Cheat Engine угадать тип поля. И он неплохо с этим справился. Полученная структура Перейдем по смещению Проверка класса Также можно по смещению Имя игрока В дальнейшем нам нужен этот класс, но, к сожалению, Cheat Engine не позволяет экспортировать структуру, а делать это вручную — значит подвергать себя мучениям. Это не нужно, поскольку существует готовый инструмент — ReClass.NET. Он дает возможность напрямую выгрузить структуру в виде кода на C++. Скачиваем, устанавливаем и подключаемся к процессу игры. Подключение к процессу После присоединения к процессу создается класс по базовому адресу В данном контексте отображаемое количество байтов СE воспринимает как класс, который мы экспортируем. Если размер нашего класса больше, чем стандартное количество отображаемых байтов, нужно вручную увеличить размер. Настройка ReClass.NET Переходим к смещению Присвоение типа Поиск координатНачиная с этого места, мы будем искать значения, нужные непосредственно для реализации ESP и aimbot. Для ESP нам понадобятся координаты самого игрока и его головы в трехмерном пространстве. wwwТем, кто не знает или забыл, как работает трехмерная система координат в компьютерной графике, рекомендую статью «3D своими руками» на «Хабрахабре». Для реализации aimbot нам понадобятся значения тангажа (pitch), рысканья (yaw) и крена (roll). Не знаешь, что это? Давай покажу на примере игрового движка Godot. Координаты XYZ Запись координат может разниться в зависимости от движка. Часто различается направление осей и то, какая из них считается высотой. Вариации координат Для демонстрации возьмем с GitHub готового персонажа и посмотрим, как он будет двигаться, если менять координаты. Персонаж на нулевых координатах Тангаж — движение персонажа относительно оси X. Нижняя стрелка — фактическое движение персонажа в данный момент, верхняя — другой вариант движения. Pitch Рысканье — движение персонажа относительно оси Y. Yaw Крен — движение персонажа относительно оси Z. Roll Поиск координат игрока С новыми знаниями возвращаемся к игре и окну Cheat Engine. Начинаем перемещаться по карте и вертеть мышкой из стороны в сторону, а также вверх и вниз. В окне Cheat Engine можем видеть три последовательности из значений с плавающей запятой, которые менялись при наших действиях. Значит, это координаты игрока, координаты головы игрока и его поворот относительно осей. Можно заметить, что два набора из трех повторяются по X и Y, а вот координата Z у них разная. Отсюда мы можем сделать вывод, что один набор — это координаты игрока, а второй — головы. Так как в OpenGL в качестве высоты используется координата Z, мы попытаемся поменять высоту для каждого набора. Начнем с первого, но после попытки поменять значение c -0.5 на другое оно снова станет прежним. Значит, это координаты головы, второй набор — координаты игрока, а третий — движение относительно осей. Но мы в этом еще должны убедиться. Неправильный выбор числа Теперь давай попробуем сделать для второго набора то, что мы делали для первого. Правильный выбор Для наглядной демонстрации встанем на ящик, а в Cheat Engine будем смотреть на значение по смещению Становимся на высоту Попробуем изменить это значение и увидим, как наш персонаж провалился сквозь ящик. Изменение высоты игрока Это значит, что наши предположения верны. Наши координаты Вернемся в окно ReClass.NET и выберем типы для этих смещений. Переименовываем и задаем тип Поиск pitch, yaw, roll Сделаем такую же проверку. Веди мышью из стороны в сторону, а потом вверх и вниз. Попробуем поменять значения, и оказывается, что наши предположения были верны. Наши значения Вернемся в окно ReClass.NET и выберем типы для этих смещений. Переименовываем и задаем тип Вот так теперь выглядит наш класс. Но что за Наш класс Теперь экспортируем наш класс (нажми на него правой кнопкой мыши и выбери соответствующий пункт меню). Можешь видеть, что есть поля, которые мы с тобой не искали: Экспортируем Entity ListС нашим игроком мы разобрались, а как быть с другими игроками? Обычно где‑то есть огромный список всех игровых сущностей, в который входят и персонажи игроков. Можно предположить, что где‑то в коде должен существовать и цикл, который перебирает игроков, и дальше с их данными как‑то взаимодействует логика игры. Попробуем оттолкнуться от показателя здоровья и поискать, какие инструкции его запрашивают. Доступ к адресу со здоровьем С наскока ничего найти не удается, но наметанный глаз заметит, что доступ к показателям здоровья нашего игрока идет через какой‑то статический адрес. Оказывается, мы выбрали неправильный! Правильный адрес такой: Правильный адрес Попробуем теперь поискать через имя игрока, которое находится по смещению Имя игрока И получим список инструкций, которые обращаются к имени. Добавляем адресИщем доступ к адресу Перебираем варианты и находим такой, где доступ происходит в цикле. Цикл сущностей Те, кто знаком с ассемблером, понимают, что в регистре Таким образом, статический адрес списка сущностей будет таким: "ac_client.exe"+0018AC04 Убедиться в этом можно, проверив по смещению Имя другого игрока Также нам понадобится общее количество игроков. Полистав вывод дизассемблера, в конце цикла увидим проверку. В регистре Количество игроков Немного подебажив, замечаем, что выше цикла находится статический адрес количества игроков: Статический адрес для игроков Перезапустим и проверим, что адреса правильные. Поиск View MatrixПерейти обратно к новости |