Как делать читы для игр
Перейти к содержимому

Как делать читы для игр

Как делаются читы для игр?

twobomb

Что никогда не пользовался ArtMoney или CheatEngine? Отсеиваем значения, находим определенный адрес в памяти приложения в котором например хранится значение золота и меняем его. В онлайн играх конечно это бывает не так просто сделать, так как идет синхронизация с серверами, и ваш хак может оказаться только визуальным, но даже там есть свои лазейки.

Egorian

Egorian @Egorian Автор вопроса
twobomb, можно с лазейками поподробнее?
Сергей @sabramovskikh

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

zamboga

twobomb, ещё был game wizard под dos =)
Решения вопроса 1

Griboks

Существуют три разных подхода:
1) изменение значений ячеек памяти
1a) изменение кода/сохранения на диске
2) прокси сетевого трафика
3) подмена ввода/вывода

Ответ написан более трёх лет назад
Нравится 4 2 комментария
это все в тех случаях, когда сервер не идентифицирует клиент и не проверяет целостность?

Griboks

Bwn_z, это в любых случаях.
Ответы на вопрос 3
Хакинг памяти игры.
Ответ написан более трёх лет назад

Egorian

Egorian @Egorian Автор вопроса
Типа CheatEngine?

borisdenis

Довольный Айтишникъ @borisdenis

Как это возможно если, допустим та же игра на клиент-серверной основе. Ведь, когда входишь в игру идет проверка по хэшсуммам или типа того. Чтобы добавлять вещи используется какой-то другой метод. Ведь хакинг памяти игры работает только на локальном клиенте. Так?

a13xsus

Bwn_z, если игра просчитывается на сервере, то конечно нужно ломать сам сервер. Изменение памяти в клиенте приведет только к визуальным изменениям и то ненадолго.

automatik, я о этом и говорю, так что не понимаю, про какой хакинг памяти можно говорить. Сейчас 21 век, почти все игры подключается к серверу для идентификации и проверки целостности, даже чтобы поиграть в «сюжетку». Хакинг памяти был актуален, где-то 4-6 лет назад.

было бы большой ошибкой думать

В сетевой игре можно «чит» сделать только на то, что сервером отдаётся на откуп клиенту.
Если, например, здоровье контролируется на сервере, ничего поделать нельзя.
Всё зависит от конкретной игры. Есть разработчики, которые люто орудуют банхаммером за даже подозрение на чит, а есть те, которым похер.
В стрелялках можно сделать aim-bota, например, чтобы каждая пуля летела в голову противнику (даже если стреляешь спиной к нему), в стратегиях популярны map hacking — когда вся карта (и юниты противника) становятся видны, и т. д.
Если игра оффлайновая — тут дозволено всё. Лезем в память процесса и модифицируем что душе угодно.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

coremission

Сергей Кормишин @coremission
Профессиональный программист игр.

Совсем недавно рассказывал о кодах в играх для блога: для чего их создают разработчики игр и почему в последнее время их становится все меньше?

Узнаем как создать чит на игру?

Как создать чит на игру?

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

Подбираем ПО

Возникает в связи с этим вопрос: какое программное обеспечение нам понадобится в первую очередь? С чем будет легко работать новичку? Для этого можно использовать различные программы, возьмем для примера lernel.dll. В ней есть специальные функции для дебага, которыми мы и будем пользоваться. При помощи них можно не только чинить, но и изменять значения гамы, что нам будет на руку.

В «Майнкрафте» вам доступно практически все — вы можете взаимодействовать с огромным.

С чем работать будем?

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

  1. Delphi (желательно последней версии).
  2. GameHack или другая подобная программа. Рационально будет выбрать GameTrainer, так как она абсолютно бесплатная.
  3. Прямые руки.

Для начала разузнаем побольше информации о гаме.

как создать чит на игру

  1. Название окна. Каждый сможет его найти, в этом нет ничего сложного.
  2. Адрес в памяти. Для внесения новой информации в памяти необходимо конкретно знать, где и что изменить. Поэтому для начала находим нужный адрес и только после этого хакаем. В этом может помочь специально разработанная программа – GameTrainer (или другая типичная). Об этом уже упомянуто выше.

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

Текущий мир компьютерных игр так богат всевозможными терминами, что.

Тип данных – он играет немалую роль. Взяв его за основу, мы будем делать чит и определять максимальные размеры. К примеру: Byte 246; 1 байт; Word 64528; 2 байта.

Читы в игре Warface

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

Создавайте специальных ботов при помощи консольных команд в игре.

как создать чит на варфейс

Необязательно быть программистом, чтобы разобраться в несложной системе при наличии специальных приложений. Наиболее важными являются: Delphi 7, различные необходимые SDK, Cheat Engine и многие другие.

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

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

Создание читов для копателя

В последнее время игра «Копатель онлайн» получила большую популярность, в нее зарегистрировано более трех миллионов пользователей. Основами приложения являются строительство и разрушение. Вы сможете строить, ломать, добывать ресурсы и использовать их. Из-за большой популярности постоянно возникает вопрос, как создать чит на «Копатель онлайн»? Что ж, объясним геймерам и это!

Попробуем создать чит на игру при помощи программы Cheat Engine, которую можно свободно скачать. Запускаем ее и создаем новый проект при помощи нажатия кнопки File-Generate-generic-trainer-luascropt-fromtable. В открывшемся окне выбираем процесс, для этого в строку Process name пишем Plugin-container.exe. После подбираем название для нашего будущего чита и записываем его в специальное окно. При желании также можно указать себя как автора, чтобы все пользователи смогли перейти на вашу страничку «ВКонтакте» или на «Фейсбуке».

как создавать читы для warface

Как настроить чит?

Теперь приступаем непосредственно к настройке чита, для этого нажимаем Table-CETrainer-Edit. В открывшемся поле удаляем все ненужные окна, оставляем пустую ячейку для заполнения. Это и будет рабочее окно для нашей программы. Произвольно выбираем размер окна, после этого сделаем фоновую картинку. Для этого обводим все поле и в открывшейся настройке в левом углу выбираем Picture и загружаем обложку.

Проделав все подготовительные работы, можно создать кнопку при помощи функционального окна. После открываем настройки и в строке Caption задаем ей имя.

Как запустить созданный файл

Непосредственно для самого чита потребуется в обязательном порядке создать надстройку браузера. Это будет небольшая строка, в которой мы сможем выбирать желаемый ресурс, при помощи которого запускается игра. В опциях обязательно потребуется внести коррективы в строке Items, здесь нужно прописать все возможные браузеры, которыми вы пользуетесь (Mozilla, Opera, Chrome или другие).

Ниже создаем кнопку и задаем ей название «Подключиться». Слева в настройках выбираем Events и в этом подразделе ищем On Click и открываем настройки. В пустое место необходимо вставить скрипт:

как создать чит на копатель

ifVibor == ‘0’ then

ifVibor == ‘1’ then

ifVibor == ‘2’ then

Не забываем в первой сроке сменить CEComboBox1 на CEComboBox1Click, так как изначально мы выбирали включение при помощи одного клика. После чего сохраняем и закрываем скрипт при помощи кнопки ExecuteScript.

Работаем над кнопкой закрытия

После этой операции потребуется создать кнопку, которая будет закрывать чит. Создаем еще одну клавишу и задаем ей соответствующее название. Далее по накатанной нажимаем Events-OnClick и открываем настройку. Опускаемся ниже прописанного скрипта на включение и приписываем:

В поле showMessage(«») пишем фразу, которую мы хотим видеть при закрытии чита, допустим, «Спасибо за использование нашей программы!».

Теперь можно создать еще одну функцию для полета. Для этого создаем маркер, задаем ему соответствующее имя. В поле слева выбираем Events — OnClick и вписываем скрипт:

кроссфаер читы

if (checkbox_getState(sender)==1) then

Timer3 = createTimer(f ,false)

if (checkbox_getState(sender)==0) then

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

form_show(UDF5) – к примеру. Не забываем подставлять свое название.

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

создать чит

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

Заключение

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

Как научиться кодить? Писать читы для различных игр?

Здравствуйте! Я учусь в 8 классе и по информатике изучаю язык программирования в Pascal(на данный момент изучаем case). Мне очень нравится,как люди пишут разные читы,программы и так далее. Давно мечтал написать свой чит для игры CS:GO,но не знаю где учиться,как учиться и у кого соответственно.Не могли бы подсказать какой-либо сайт,где я бы мог научиться этому? На ютубе видео смотрел,но там не понятно. Буду очень благодарен,если вы поможете мне! Спасибо!

  • Вопрос задан более трёх лет назад
  • 25274 просмотра

6 комментариев

Средний 6 комментариев

Vlad_IT

Давно мечтал написать свой чит для игры CS:GO

Какой вы хороший человек.

Буду очень благодарен,если вы поможете мне!

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

myjcom

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

Начинает нравится программирование поучаствуйте в олимпиадах, решайте задачки — для мозга полезнее будет.

Pavel_Dryndin @Pavel_Dryndin Автор вопроса
Владимир Проскурин, нет,руки у меня некривые,это для себя)
Андрей @poslannikD
Pavel_Dryndin, gamehacklab.ru

советую почитать как работает мозг, начать изучать другие языки как пайтон или C++/C#, паскаль умер лет 20 назад если не больше, в целом идея варится в той среде в которой вы хотите быть, что автоматически повысит уровень знаний, но к сожалению не повысит личные качества. и чтобы что то ломать для начала надо понимать как это работает и на чем это пишут и как например работает память и тд и тп

ElenaIcemen

Ольга Йсмен @ElenaIcemen
на это уйдёт не один год
Решения вопроса 0
Ответы на вопрос 2
Saboteur @saboteur_kiev Куратор тега IT-образование
software engineer

1. Читы это просто программы. Не нужно учиться писать читы, нужно учиться программировать. Тем более, начинать с сетевой игры типа CS:GO — не для начинающих.

2. Просто пишите много разных программ. Сперва простых, потом усложняйте.

Программирование — штука сложная. Требует много усилий и много времени. Нельзя посмотреть годик ютуб и стать программистом. Нужно несколько лет потратить на написание программ различной сложности. Чтобы вам стало понятнее, case — это оператор. В программировании это настолько простая вещь, что умение пользоваться подобными вещами даже не считается за обучение. Даже начинающий программист, который способен пройти собеседование на джуниора, может за 10 минут научиться пользоваться оператором case для любого языка программирования, даже если он его впервые видит (ну может за исключением извращений типа brainfuck).

Хотите стать программистом — парралельно с паскалем начните учить что-то из современного. Питон, php, java, c++, javascript
пробуйте все школьные задачи написать на этих языках. Через полгодика-год решите какой язык вам понравился больше и дальше углубляйтесь в него.

P.S. И да, терпение. Его нужно много.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

tsarevfs

C++ developer

Если вам интересна тема игр, можно двигаться в эту сторону.
Читы дело не очень хорошее. Будем честны, большого вреда вы не нанесете в первое время, все взломают и без вас. Но вот на всевозможные баны нарваться будет обидно.
Хорошей практикой может стать создание модов и расширений. Говорят достаточно легко начинать с minecraft + python. Начать может даже ребенок, а возможности у языка и игры почти неограниченные.

Чит своими руками. Вскрываем компьютерную игру и пишем трейнер на C++

Иг­рать в игры любят все, но это гораз­до инте­рес­нее, ког­да у тебя име­ется нес­конча­емый запас пат­ронов и здо­ровья. Что­бы обза­вес­тись и тем и дру­гим, мож­но погуг­лить читы и трей­неры для тво­ей любимой игры. Но как быть, если их еще не раз­работа­ли? Написать самому! Обла­дая навыка­ми реверс‑инжи­нирин­га и прог­рамми­рова­ния, сде­лать это нам­ного про­ще, чем кажет­ся.

Выбор игры

Для начала опре­делим­ся с игрой. Мой выбор пал на Hyper Light Drifter (далее HLD). Если ты пла­ниру­ешь поэк­спе­римен­тировать с ком­мерчес­кой игрой, обра­ти вни­мание на сайт pcgamingwiki, а так­же на игры с откры­тым исходным кодом.

warning

Так как для написа­ния этой статьи я буду исполь­зовать ком­мерчес­кую игру, мне нуж­но удос­товерить­ся, что лицен­зион­ное сог­лашение (EULA) поз­воля­ет это делать.

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

EULA HLD

Поиск значений

Для поис­ка зна­чений, которые будет изме­нять чит, мы ста­нем исполь­зовать Cheat Engine (далее CE).

За­пус­тим игру и в нас­трой­ках игры выберем окон­ный режим — нам нуж­но, что­бы на экра­не помеща­лось еще что‑то, кро­ме игры.

Оконный режим

Как видим, в окон­ном режиме отсутс­тву­ет панель заголов­ка, с помощью которой мы мог­ли бы перетас­кивать окно игры по экра­ну. Что­бы испра­вить эту неп­рият­ность, откро­ем отладчик x64dbg, а имен­но его 32-бит­ную вер­сию ( x32dbg ) и запус­тим под ним HLD.

Пос­тавим брейк‑пой­нты на фун­кции CreateWindowExA и CreateWindowExW , которые отве­чают за соз­дание окна. Най­ти их мож­но на вклад­ке Symbols, выб­рав биб­лиоте­ку user32. dll .

Вкладка символов

Ви­дим, что наше окно соз­дает­ся с парамет­ром dwStyle , име­ющим зна­чение WS_POPUP = 0x80000000 .

Значение параметра dwStyle, равное WS_POPUP

По­меня­ем это зна­чение на WS_OVERLAPPED = 0x00000000 .

Параметр dwStyle, измененный на WS_OVERLAPPED

И вот резуль­тат: теперь мы можем переме­щать окно.

Оконный режим с панелью заголовка окна

Пос­ле того как мы нас­тро­или окно игры с помощью отладчи­ка, ненадол­го отло­жим его. Что­бы най­ти нуж­ные нам зна­чения в Cheat Engine, раз­берем­ся с теорией.

Что такое статический адрес

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

Ста­тичес­кие адре­са ука­зыва­ются в фор­мате [ module+offset] . Нап­ример, в library. dll мы мог­ли обна­ружить зна­чение по адре­су 0x700004C0 ( base = 0x70000000, offset = 0x4C0 ). Пос­коль­ку library. dll может переме­щать­ся и ее базовый адрес заг­рузки будет менять­ся, что­бы получить дос­туп к нашему зна­чению, мы не исполь­зуем этот адрес нап­рямую. Вмес­то это­го возь­мем адрес [ library. dll + 0x4C0 ]. Сле­дова­тель­но, ког­да library. dll заг­ружа­ется по базово­му адре­су 0x10000000 , [ library. dll + 0x4C0 ] дает нам 0x100004C0 и у нас появит­ся дос­туп к нашему зна­чению.

Ес­ли же перемен­ная локаль­ная, то искать нуж­но в сте­ке. Для это­го получа­ем TebBaseAddress опре­делен­ного потока, а затем вто­рой ука­затель из этой струк­туры ( FS:[ 0x04] или GS:[ 0x08] , в зависи­мос­ти от раз­ряднос­ти про­цес­са), которая содер­жит вер­шину сте­ка. TebBasePointer может быть получен с помощью NtQueryInformationThread (если это 64-бит­ный про­цесс) или же с помощью Wow64GetThreadSelectorEntry (если это 32-бит­ный про­цесс в 64-бит­ной сис­теме).

Поиск показателей здоровья

За­пус­каем Cheat Engine и под­клю­чаем­ся к про­цес­су игры.

Подключение к процессу игры

Так как мы не зна­ем, в каком типе хра­нит­ся показа­тель здо­ровья, выс­тавля­ем сле­дующие парамет­ры для пер­вого ска­ниро­вания.

Первое сканирование

Да­лее про­дол­жаем ска­ниро­вание, не забывая при этом терять hp (показа­тель здо­ровья) в игре. Дела­ем мы это для того, что­бы отсле­живать изме­нения зна­чения hp в памяти игры через CE, а так­же умень­шать зна­чение в поис­ке для сле­дующих ска­ниро­ваний. Делать мы это будем до тех пор, пока не будет дос­тигну­то адек­ватное количес­тво зна­чений в окне CE. Адек­ватное количес­тво зна­чений в дан­ном слу­чае — это такое количес­тво адре­сов, про­вер­ка которых зай­мет мак­симум минут пять.

Найденные адреса и их значения

Мне приг­лянулись вот эти два адре­са, которые я добавил в ниж­нее окно двой­ным щел­чком мыши на них. Приг­лянулись они мне в пер­вую оче­редь потому, что зна­чения по этим адре­сам сре­ди всех осталь­ных име­ют наиболь­ший тип — double. Всег­да нуж­но про­верять от боль­шего типа к мень­шему. То есть сна­чала про­веря­ем адре­са, хра­нящие тип double, затем float, пос­ле integer и так далее. Более под­робно о раз­мере типов дан­ных мож­но про­читать в до­кумен­тации Microsoft.

Добавленные адреса

Ес­ли мы поменя­ем зна­чение по адре­су 0x36501940 , то на экра­не появит­ся полоса здо­ровья, но его количес­тво не поменя­ется.

Индикатор hp

Ес­ли теперь мы поменя­ем зна­чение по адре­су 0x36501A30 , то на экра­не появит­ся полоса hp и зна­чение изме­нит­ся. Это зна­чит, что мы наш­ли адрес, в котором хра­нит­ся зна­чение здо­ровья в игре. Зна­чение хра­нит­ся в фор­мате double (стан­дарт IEEE 754).

Изменение hp

Да­дим наз­вание най­ден­ным нами адре­сам: hp_bar и hp соот­ветс­твен­но. Одна­ко, как я уже рас­ска­зывал в раз­деле, пос­вящен­ном ста­тичес­ким адре­сам, най­ден­ный нами адрес будет бес­полезен пос­ле того, как мы вый­дем в меню или переза­пус­тим игру.

Поиск статического адреса для индикатора здоровья

Для даль­нейше­го поис­ка ста­тичес­кого адре­са вер­немся к отладчи­ку. В окне дам­па перехо­дим по ранее получен­ному адре­су 0x36501A30 , в котором хра­нит­ся зна­чение hp.

Значение по адресу 0x36501A30 в окне дампа

Ста­вим по адре­су 0x36501A34 аппа­рат­ный брейк‑пой­нт на запись и теря­ем в игре здо­ровье. Брейк‑пой­нт сра­баты­вает, и мы видим, что новое зна­чение hp берет­ся из регис­тра EDI . Это зна­чение явля­ется пер­вым парамет­ром текущей фун­кции.

Вый­дя из этой фун­кции, прос­ледим, отку­да она получа­ет свой пер­вый параметр. Мы уви­дим, что переда­ваемый параметр — это воз­вра­щаемое зна­чение фун­кции по адре­су 0x003EFCE9 .

Пос­тавим брейк‑пой­нт на вызов фун­кции по адре­су 0x003EFCE9 , а даль­ше про­дол­жим отладку, пока не оста­новим­ся на ее вызове. Зай­дя внутрь фун­кции, выпол­няем ее до кон­ца. Как толь­ко мы дос­тигнем адре­са 0x00F88E19 , мы уви­дим, что регистр EAX хра­нит адрес зна­чения hp. Оче­вид­но, что в этой фун­кции про­исхо­дит дос­туп к нашему адре­су через ариф­метику с ука­зате­лями для струк­тур, а имен­но через при­бав­ление к ука­зате­лю сме­щений и даль­нейше­го его разыме­нова­ния. Более под­робно об этом мож­но про­читать здесь. Нам нуж­но будет пов­торно прой­тись по этой фун­кции, что­бы узнать, через какой адрес и сме­щения она получа­ет адрес зна­чения hp.

Пос­ле того как мы узна­ли адрес 0x353F9BB0 , из которо­го получа­ется адрес зна­чения hp, начина­ем выходить из фун­кций. При этом вни­матель­но отсле­жива­ем, что переда­ется им в качес­тве парамет­ров. Спус­тя пару выходов мы нат­кнем­ся на сле­дующее.

Мы наш­ли ста­тичес­кий адрес! Если пос­мотреть его рас­положе­ние в памяти, он находит­ся в сек­ции . data .

Зная все сме­щения, добавим их в CE, нажав Add Address Manually .

Поиск значения числа патронов

Те­перь прис­тупим к поис­ку зна­чения чис­ла пат­ронов (ammo). Пер­вое ска­ниро­вание дела­ем с такими же парамет­рами поис­ка, как ког­да мы иска­ли здо­ровье.

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

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

Поиск статического адреса для ammo

Мы понима­ем, что показа­ния инди­като­ров в игре всег­да срав­нива­ются с фак­тичес­кими. Если одна из полос показы­вает не то, что нуж­но, ее дли­на изме­няет­ся. Поэто­му воз­вра­щаем­ся к отладчи­ку и начина­ем с аппа­рат­ного брейк‑пой­нта на запись по адре­су 0x365014С4 . Как видим по ком­мента­риям, эта фун­кция уже нам встре­чалась.

По ана­логии с поис­ком hp, выходим из фун­кции.

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

Мы видим, что в этой фун­кции мы уже были, а это зна­чит, что она тоже получа­ет зна­чение, но уже ammo — 365014E0 . Толь­ко какое‑то оно стран­ное.

До­бавив это «стран­ное» зна­чение в Cheat Engine, а потом изме­нив его, к при­меру, на 100, мы уви­дим, что на экра­не появит­ся инди­катор пат­ронов и его зна­чение поменя­ется. Зна­чит, мы наш­ли адрес, в котором хра­нит­ся зна­чение ammo в игре.

Зная все сме­щения от ста­тичес­кого адре­са к адре­су зна­чений ammo, добавим их в CE, нажав Add Address Manually .

info

Ско­рее все­го, боеп­рипасы в HLD пред­став­ляют собой заряд энер­гии и поэто­му хра­нят­ся в про­цен­тах, ведь при их поис­ке через отладчик мож­но было уви­деть стро­ки, содер­жащие сло­во energy . Которое намека­ет на то, как будет выг­лядеть зна­чение в памяти. Нап­ример, игра от одной небезыз­вес­тной поль­ской ком­пании хра­нила пат­роны в памяти вмес­те, а для игро­ка показы­вала раз­дель­но: как рожок, так и количес­тво оставших­ся пат­ронов, поэто­му при их поис­ке не уда­валось най­ти каж­дое из зна­чений, а нуж­но было искать их сум­му.

Проверка полученного статического адреса

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

Проверка для HP

Так выг­лядит наша cheat table для hp.

Таблица до выхода в меню / перезапуска игры

А вот так она выг­лядит пос­ле переза­пус­ка игры.

Таблица после запуска игрового процесса

Проверка для ammo

Так выг­лядит наша cheat table для ammo.

Таблица до выхода в меню / перезапуска игры

А вот так она выг­лядит пос­ле переза­пус­ка игры.

Таблица после запуска игрового процесса

Как будет выглядеть наш указатель в C++

В нашем чите дос­туп к най­ден­ным адре­сам зна­чений будет таким.

static_addr = ( DWORD ) GetModuleHandle ( 0 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x255AF150 ) ;
static_addr = * ( DWORD * ) ( static_addr ) ;
static_addr = * ( DWORD * ) ( static_addr + 0xD48 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x0C ) ;
static_addr = ( DWORD * ) ( static_addr + 0xC4 ) ;
static_addr = * ( DWORD * ) ( * static_addr + 0x08 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x44 ) ;
static_addr = * ( DWORD * ) ( static_addr + 0x10 ) ;
drifter_hp = ( double * ) ( DWORD * ) * ( DWORD * ) ( static_addr + 0x1FD8 ) ;
drifter_ammo = ( double * ) ( DWORD * ) * ( DWORD * ) ( static_addr + 0x268C ) ;

Написание трейнера

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

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

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *