программирование читов для игр

Это читерство! Учимся взламывать игры и писать читы на простом примере

td h

Содержание статьи

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

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

External — внешние читы, которые работают в отдельном процессе. Если же мы скроем наш external-чит, загрузив его в память другого процесса, он превратится в hidden external.

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

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

Network proxy — читы, которые используют сетевые прокси, те, в свою очередь, перехватывают трафик клиента и сервера, получая или изменяя необходимую информацию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ce signature not unique Сигнатура не уникальна

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

ce signature unique Сигнатура уникальна

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

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

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

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Источник

[Guide] Руководство по написанию чит программ. Часть 1.

bolt bolt
vk
bolt bolt

GCD Team

12345679121314

[Guide] Руководство по написанию чит программ. Часть 1.

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

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

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

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

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

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

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

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

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

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

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

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

Полные исходники качаем отсюда:
Delphi: http://depositfiles.com/files/ea0x95861
C++ Builder: http://depositfiles.com/files/7y6ffd62v
C++ Builder and Delphi одним архивом
Не забываем оставлять комментарии по поводу статьи. Так же задавать вопросы, если они возникли. Постараюсь ответить всем.

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

Источник

Читайте также:  рабочие коды в геншине
bolt bolt
vk
bolt bolt

Читы для игр ВКонтакте и в Одноклассниках

12345679121314

im icq im skype

689a74 f888d33fae37421d8d36b2e1cddf5019.png srz 228 231 85 22 0.50 1.20 0

Для поиска сигнатур нам понадобиться Cheat Engine и еще желательно Opera 12.16, т.к в ней всего
один процесс и перебирать море процессов вам не придется. Обе программы вы найдете тут. Для примера будет использованы игры: «Копатель онлайн» и «Эволла 3D»(Почти Эбола 01 64).

!Эти два способа поиска сигнатур самые важные и советую прочитать все как
можно внимательнее.

?img=141417894926

Дальше опять изменяем значение (в нашем случае нам опять надо пострелять) и проверяем чтобы
в поле Scan Type было выбрано Changed value, после того как постреляли и проверили нажимаем
на кнопку Next Scan. Теперь выбираем в поле: Scan Type: Unchanged value (На русском – это не
изменилось).

Нажимаем Next Scan 10-15 раз или пока строка Found (Всего значений) не будет меняться.

?img=31417895123

После этого, выбираем в Scan Type: Changed value, стреляем и нажимаем на кнопку Next Scan,
выполняем эти действия пока не найдется 100-500 значений. Теперь в поле Scan Type выбираем:
Decreased value (На русском – это уменьшилось) и нажимаем на кнопку Next Scan, но если
например: у нас было 8/32 пуль, стрельнули стало 7/32 то используем Decreased value, а если мы
стрельнули и у нас стало 8/24 то есть увеличилось, то выбираем в Scan Type: Increased value(На
русском – это увеличилось).

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

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

?img=291417895183

Нажимаем по значению в таблице и замораживаем его, как заморозить смотрите на картинке
ниже.

?img=101417895259

Далее, когда вы заморозили значение попытайтесь изменить его (в данном случае нам нужно
пострелять). Если у вас патроны стоят на месте после 1-4-х выстрелов, то мы нашли значение
бесконечных патронов в игре «Копатель Онлайн», но это еще не все! Теперь нам нужно
разморозить это значение и нажать по значению и на клавишу F6. Сделали? Отлично! Сейчас
нужно изменить наше значение (в данном случае пострелять), после чего у вас должно получится что-то типо этого, но обязательно в конце этой строчки должно быть «,ecx»

?img=11417895371

Нажимаем по этой строке (инструкции), далее нажимаем на кнопку «Show disassembler»

?img=21417895449

У вас должно открыться такое окно.

?img=61417895488

Дальше нажмите правой кнопкой мыши на то, что у вас выделилось, и выберите Goto address (На
русском – это перейти по адресу) и скопируйте то, что у вас будет в поле для ввода, затем
нажмите Cancel (На русском – это отмена). Теперь нажмите по первому байту правой кнопкой
мыши и выберите там Goto address, потом вставьте туда адрес, который вы копировали и нажмите
на кнопку ОК. Дальше выделите байты до 2-й желтой линии, и скопируйте их, сохраните в блокнот
или запишите на бумажке.

?img=61417895560

Теперь нажимаем куда на рисунке указано правой кнопкой мыши и нажимаем там на Replace with
code that does nothing (На русском – это затереть NOP’ами)

?img=41417895689

И нажимаем ОК. Теперь снова то, что у нас получилось копируем до 2-й желтой линии,

?img=91417895750

У нас получилось так: 90 90 90 90 90 90 83 EC 0C 68 54 44, убираем цифры справа и у нас
получилось так: 90 90 90 90 90 90 83 EC 0C, так же можно убрать 83 EC 0C, но это не так важно.
В итоге мы нашли сигнатуру на бесконечные патроны:

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

!Виеодемонстрация пункта 1.

2. Поиск сигнатур на быстро изменяющиеся значения
Теперь настало время для второго способа поиска сигнатур, который я покажу на примере игры
«Эволла 3D». Данный способ подойдет для поиск сигнатур на полёт, матрицу и тому подобное.
Для начала запускаем Cheat Engine, выбираем процесс с игрой. После этих действий указываем

параметры которые обведены красным на скриншоте/

?img=91417895870

Для того чтобы, найти полет, нам нужно считать то что если мы стоим на земле (не прыгаем) то это
значение «1» а если мы прыгнули то это значение «0», и так начнем поиск. Для начала установим
SpeedHack на значение «0.1» и нажмем на кнопку «Применить».

XobRp

Теперь в строку «Значение:» пишем 1 и нажимаем на кнопку «Поиск», после того как мы
выполнили поиск у нас появилось море значений, но нам нужно найти одно единственное/

lTrcY

В поле «Значение:» пишем 0, потом заходим в игру прыгаем (Нажимаем пробел – Space), быстро
переходим в Cheat Engine и нажимаем на кнопку «Отсеять».

!Нужно это делать во время прыжка (если мы ищем матрицу, то во время
выстрела), а не после него, вот для чего нам нужен SpeedHack.

hfoOe

Потом опять пишем 1 и нажимаем «Отсеять», далее пишем 0, прыгаем и во время прыжка
нажимаем кнопку «Отсеять», и так нужно это делать до тех пор, пока не найдется 1 значение
(может найтись больше например 5), но часто бывает находится одно значение. После того как мы
нашли одно значение, нажимаем по нему и нажимаем на красную стрелку.

U4tCK

Далее нажимаем по адресу в таблице правой кнопкой мыши и выбираем «Брейкпоинт на запись»/

W2YsB

Потом в появившемся окне у вас должна появится одна инструкция, нажмите по ней, и нажмите
на кнопку «Отладчик».

jlil8

После перехода в отладчик окно которое указано выше на скриншоте можно закрыть/

ORYYM

Дальше нажимаем правой кнопкой мыши на то, что у нас выделилось когда мы зашли в отладчик
и выбираем «Перейти по адресу». Копируем адрес и нажимаем на кнопку отмена.

IXzJl

Дальше нажимаем по первому байту левой кнопкой мыши, а потом нажимаем по ему правой
кнопкой мыши и выбираем «Перейти по адресу», вставляем туда этот адрес и нажимаем «ОК».

FIZs0

После чего копируем байты до 2-й желтой строчки/

6M1on

1r5RA

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

!Видеодемонстрация пункта 2.

Источник

Пишем чит для Counter-Strike или как работать с памятью в C++

Вчера мне предложили написать чит для игры, опыта в этом у меня конечно нет, но из любопытства я сразу же «побежал» читать забугорные сайты на эту тему, так в итоге я написал свой «чит» для накрутки денег в CS 1.6:

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

1574100148191878350

1621099824259773378

Лига программистов C/C++

43 поста 4.2K подписчиков

Правила сообщества

Соблюдайте правила Pikabu:

Помимо этого ЗАПРЕЩЕНО:

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

Проблема адрес с текущими деньгами получить.

Почему не пользовать artmoney?

> Do not open procees

О мои глаза, о нет, мои глаза.

162543623527961668

Пятнашки и А*

Навеяно постом Собеседование vs первый рабочий день и комментами к нему.

1633378846168755267

Преподаватель решил немного нас подзадорить и сказал, кто напишет автосборку из случайной раскладки, того САМ лично за руку поведёт на собеседование. Описал он эту задачу, как не воплотимую для таких простых как мы.

Вобщем-то, зацепил за живое.
Не боги же горшки лепят, подумал я. И погряз на 2 месяца в изучение темы и написание кода. Информации в интернете было очень мало. Можно сказать и небыло вовсе. Пример кода посмотреть не у кого было. На каком то сайте нашёл чью то работу с олимпиады, где математичесски оценивались разные варианты применения разных алгоритмов для решения этой задачи. Вот тут то я и познакомился с А* )))
Что бы понять его на интуитивном уровне ушло ещё недели две. Но когда пазл в голове сложился в чёткую картинку я почувствовал настоящую эйфорию. Код просто рекой полился. Автосборка была написана!
Я был больше чем просто рад, я кайфовал ежесекундно!

Источник

[C#]ПОЛНЫЙ гайд по создание читов для ПК Unity-игр.

koksBABY

1780

koksBABY

Выглядеть это будет так:

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

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

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) просто у некоторых оно прямо в коде, а у некоторых нужно писать прямо в активированной проге.
Пример:

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

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

Если помог не забудьте благодарочку ВКЛ!

Источник

Поделиться с друзьями
admin
Здоровый образ жизни: советы и рекомендации
Adblock
detector