Как сделать чит на компьютере

Обновлено: 04.07.2024

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

Так как руководство основано на опытных пользователей, то необходимы некоторые знания:

• Знание языков программирования (примеры будут написаны на Delphi и C++ Builder), но в принципе если вы хорошо знаете другой язык программирования то вам не составит труда перенести код на него
• Умение пользоваться программами на подобии ArtMoney(знать что такое указатели, разбираться в адресации памяти и т.д)
• Знать что такое шестнадцатеричная система счисления, уметь переводить числа из десятичной в шестнадцатеричную и обратно

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

Итак, начнем. Немного теории:

Чит программы – это программы которые позволяют автоматизировать использование того или иного бага. Как известно баги бывают как минимум пяти видов пакетные(использование TCP/IP пакетов для отправки на сервер или клиент модифицированных данных), memory баги(модификация значений в памяти игрового клиента), файловые(модификация файлов игрового клиента), текстурные (проход сквозь текстуры и т.д) и баги игрового клиента(ошибки в игровом клиенте, приводящие к выполнению действие не задуманных разработчиками) а так же различные их комбинации. В чит программах используются первые три вида, остальные два используются посредством самого игрового клиента без каких либо дополнительных программ.

Вообще тема написания чит программ довольно обширна, поэтому данное руководство разделено на несколько частей. Сегодня я остановлюсь на написании чит программ использующих memory баги. Как было сказано выше, memory баги модифицируют значения в памяти игрового клиента. На их основе реализованы такие известные баги как “ChatHack”, “WallHack”, “SpeedHack”, “FlyHack” и другие (прим. Так же возможна реализация этих багов на пакетном уровне).

Практически все современные игры используют DMA. DMA - - dynamic memory allocation (динамическое распределение памяти). Иными словами DMA игры хранят значения в памяти по адресам, которые изменяются после каждого запуска, перезапуска, загрузки сохранения, перехода в другую локацию или уровень и т.д. С этим многие сталкивались когда “ломали” не онлайн игры на “на деньги” например с помощью ArtMoney и после приведенных выше действий таблицы со “взломами” переставали работать. Но с этим легко бороться, достаточно лишь один раз найти указатель на нужный нам адрес. Указатель - это адрес, в котором содержится адрес на интересующее нас значение. Адреса же указателей не изменяются в отличие от остальных. Так же не меняются смещения других адресов относительно адреса, на который указывает указатель. Таким образом, для написания чит программы нам нужно считать из указателя адрес, а потом по этому адресу модифицировать значение.

Перейдем к практике:

Рассмотрим написание чит программы на примере всем известного “SpeedHack”.

Как использовать “SpeedHack” через ArtMoney я расскажу вкратце так это руководство не по поиску багов а по написанию программ с их применением. Дам несколько советов по поиску значения скорости, так как в игре скорость является дробью, то тип значения выбираем с точкой. Размерность выбираем 4 байта, так как большинство значений в современных играх 4-х байтные (за некоторым исключением). Указав такие условия поиска, мы значительно его сократим. Затем устанавливаем значение поиска равное значению в игре, выполняем поиск. Заходим в игру, одеваем оружие на бег и отсеиваем новое значение. И так пока не останется одно значение. Добавляем его в таблицу и видим адрес этого значения в памяти (для использования “SpeedHack’а”, нужно установить желаемое значение и “заморозить” его). Допустим оно у нас равно 0134EA80. Но так ига использует DMA, просто адрес нас не устроит, так как при следующем входе в игру он изменится. Поэтому мы будем искать указатель на этот адрес, который как говорилось выше не изменяется. Как искать указатели я тут рассказывать тоже не буду, так как статья не об этом (читайте руководство пользователя ArtMoney). После поиска указателя он оказался равным 00D1B4F0 а смешение адреса в котором находится значение скорости равно 2356. Важно отметить, что указатель в ArtMoney указывается в шестнадцатеричной системе счисления, а смещение в десятичной. Ну да ладно, что же нам теперь делать с найденными значениями. А вот теперь-то мы и будем писать программу, которая по этим значениям будет модифицировать память игрового клиента.

Создадим новый проект в Delphi и разместим на форме элементы: Label, SpinEdit, Button, Timer всех по одному. Label будет содержать просто информацию, в SpinEdit будем задавать желаемое значение скорости, Timer будет осуществлять функцию “заморозки” (каждые 100 миллисекунд он будет обновлять наше значение), Button будет активировать/деактивировать Timer(“SpeedHack”).
Для работы с памятью игры мы будем использовать следующие API функции Windows:

Подробное описание функций и значения их параметров я приводить не буду, кого заинтересует, могут посмотреть MSDN.
Основными функциями записи и чтения из памяти являются: ReadProcessMemory и WriteProcessMemory.
Ну вот собственно исходный код таймера который изменяет значение по найденному выше указателю:

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

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

private bool MainMenu = true;
И юзаем ссылку UnityEngine:
using UnityEngine;
В Update пишем:

if (Input.GetKeyDown(KeyCode.Insert)) //Кнопка на которую будет открываться и закрываться меню, можно поставить другую
this.MainMenu = !this.MainMenu;

public Rect RT_MainMenu = new Rect(0f, 100f, 120f, 100f); //Rect это месторасположение меню по x,y и высота, ширина.
public int ID_RTMainMenu = 1;
И в OnGUI пишем:
if (this.MainMenu)
this.RT_MainMenu = GUILayout.Window(this.ID_RTMainMenu, this.RT_MainMenu, new GUI.WindowFunction(this.Menu_MainMenu), "MainMenu", new GUILayoutOption[0]);
>
Теперь мы сделали так, что бы при нажатии на Insert у нас открывается меню. Теперь заполним это меню:
Создаем кнопку в методе Menu_MainMenu:
if (GUILayout.Button("Название вашей кнопки", new GUILayoutOption[0]))
//Здесь код, который будет происходить при нажатии на эту кнопку
>
Но где взять этот код ? Ах, хорошо что у нас есть Assembly-CSharp.dll. Ранее мы открыли этот файл в DnSpy, теперь мы ищем в нем интересную информацию. Я нашел переменную PlayerScript.health (Здоровье игрока)

И я вписываю этот код в нашу кнопку, получается:

if (GUILayout.Button("Бессмертие", new GUILayoutOption[0]))
PlayerScript.health = 999999; //При нажатии на кнопку у игрока устанавливается здоровье 999999

using UnityEngine;
Создаем переменные:
public static GameObject MainClass;

// Token: 0x040000FE RID: 254
public static GameObject DrawPlayers;

// Token: 0x040000FF RID: 255
public static GameObject DrawVeh;

// Token: 0x04000100 RID: 256
public static GameObject TestAim;

// Token: 0x04000101 RID: 257
public static GameObject GuiClass;
Создаем метод лоад и пишем в него следующее:
public static void Load()
Loader.MainClass = new GameObject("fl_Main");
MainClass.AddComponent<Название класса чита>();
UnityEngine.Object.DontDestroyOnLoad(Loader.MainClass);
>

В целом, я объяснил как примерно создать чит. Далее какой он будет зависит только от вас. Мы сделали чит, да, теперь осталось его заинжектить(внедрить) в игру.
Для этого нам нужны Mono-Инжекторы. На просторах интернета их полно. Ищем исходник, и открываем его в том же VisualStudio
Теперь нужно определится для чего будет инжектор(Для браузерных игр, либо для игр скачанных на компьютер)
Я буду делать для браузерных. Отличия этих двух инжекторов, в том что они ищут разные процессы. У игр скачанных на компьютер модуль mono.dll, у браузерных mono-1-vc.dll
В общем, если выражаться проще, мне нужно найти в коде инжектора строку mono.dll и заменить на mono-1-vc.dll. Все, теперь инжектор ищет процессы в которых есть модуль mono-1-vc.dll(Т.е браузерную игру)
Каждый MonoInjector внедряет Пространство имен(Namespace), класс(Class) и метод (Method) просто у некоторых оно прямо в коде, а у некоторых нужно писать прямо в активированной проге.
Пример:

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

Открываем инжектор и внедряем.
Надеюсь вы дочитали это до конца, поняли, и узнали для себя много нового <З
По началу может быть тяжело, но спустя время будет щелкать это как орешки.


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

Подбираем ПО

Возникает в связи с этим вопрос: какое программное обеспечение нам понадобится в первую очередь? С чем будет легко работать новичку? Для этого можно использовать различные программы, возьмем для примера 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. После подбираем название для нашего будущего чита и записываем его в специальное окно. При желании также можно указать себя как автора, чтобы все пользователи смогли перейти на вашу страничку «ВКонтакте» или на «Фейсбуке».


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

Теперь приступаем непосредственно к настройке чита, для этого нажимаем 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) – к примеру. Не забываем подставлять свое название.

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

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


Заключение

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

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

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

Виды читов и применяемые тактики

Существуют разные виды читов для игр. Можно разделить их на несколько групп.

  • External — внешние читы, которые работают в отдельном процессе. Если же мы скроем наш external-чит, загрузив его в память другого процесса, он превратится в hidden external.
  • Internal — внутренние читы, которые встраиваются в процесс самой игры при помощи инжектора. После загрузки в память игры в отдельном потоке вызывается точка входа чита.
  • Pixelscan — вид читов, который использует картинку с экрана и паттерны расположения пикселей, чтобы получить необходимую информацию от игры.
  • Network proxy — читы, которые используют сетевые прокси, те, в свою очередь, перехватывают трафик клиента и сервера, получая или изменяя необходимую информацию.

Есть три основные тактики модификации поведения игры.

  1. Изменение памяти игры. API операционной системы используется для поиска и изменения участков памяти, содержащих нужную нам информацию (например, жизни, патроны).
  2. Симуляция действий игрока: приложение повторяет действия игрока, нажимая мышкой в заранее указанных местах.
  3. Перехват трафика игры. Между игрой и сервером встает чит. Он перехватывает данные, собирая или изменяя информацию, чтобы обмануть клиент или сервер.

Большинство современных игр написаны для Windows, поэтому и примеры мы будем делать для нее же.

Пишем игру на C

Принцип игры прост: нажимаете Enter и проигрываете. Не особо честные правила, да? Попробуем их изменить.

Приступим к реверс-инжинирингу

Исполняемый файл игры

Исполняемый файл игры

У нас есть файл игры. Но вместо исходного кода мы будем изучать память и поведение приложения.

Начнем с поведения игры

При каждом нажатии Enter жизни игрока уменьшаются на 15. Начальное количество жизней — 100.

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

Подключение CE к игре

Подключение CE к игре

Первым делом мы получаем список всех значений 85 в памяти.

Все значения, которые нашел CE

Все значения, которые нашел CE

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

Значение найдено

Значение найдено

Вот и нужное значение! Изменим его и нажмем Enter для проверки результата.

Значение изменено Скрин игры, после того как мы нажали Enter

Проблема в том, что после перезапуска игры значение будет уже по другому адресу. Каждый раз отсеивать его нет никакого смысла. Необходимо прибегнуть к сканированию AOB (Array Of Bytes — массив байтов).

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

После нескольких нажатий на Enter количество жизней изменилось на 55 . Снова найдем нужное значение в памяти и откроем регион, в котором оно находится.

Регион памяти

Регион памяти

Выделенный байт и есть начало нашего int32 -числа. 37 00 00 00 — число 55 в десятичной форме.

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

Начинаем сравнивать байты

Начинаем сравнивать байты

Проверим байты перед структурой.

Бинго! Как писать читы для игр

Бинго!

Как видите, выделенные байты не изменились, значит, можно попробовать использовать их как сигнатуру. Чем меньше сигнатура, тем быстрее пройдет сканирование. Сигнатура 01 00 00 00 явно будет слишком часто встречаться в памяти. Лучше взять 03 00 00 01 00 00 00 . Для начала найдем ее в памяти.

Сигнатура не уникальна

Сигнатура не уникальна

Сигнатура найдена, но она повторяется. Необходима более уникальная последовательность. Попробуем ED 03 00 00 01 00 00 00 .

В подтверждение уникальности получим такой результат:

Сигнатура уникальна

Сигнатура уникальна

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

Жизненный цикл external

Используя функцию OpenProcess , внешние читы получают дескриптор для нужного процесса и вносят необходимые изменения в код (патчинг) или считывают и изменяют переменные внутри памяти игры. Для модификации памяти используются функции ReadProcessMemory и WriteProcessMemory .

Так как динамическое размещение данных в памяти мешает записать нужные адреса и постоянно к ним обращаться, можно использовать технику поиска AOB. Жизненный цикл external-чита выглядит так:

Читайте также: