[0x2]Легкий Геймхакинг: Шаг за шагом

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Автор: UNSEEN
Источник: https://xss.is


Хо-хо-хо Форумчане! До Нового года остается совсем немного и планировал как можно скорее написать вторую нашу часть про мир геймхакинга! Если статья вышла до НГ, значит я выполнил свою поставленную задачу! А вам пожелаю хорошего чтива 😊

Немного предыстории…

В прошлой части мы разобрали, что из себя представляет специальный софт(Читы) для игр, и какие бывают способы заработка с этого направления. Рынок очень хорошо развивается в последние годы и умельцы делают на написании этого софта огромные состояния!

Из технической части вспомним, что мы базово прошлись по основам, а именно что из себя представляет оперативная память(ячейки памяти с уникальными адресами для доступа к ним) и что происходит после загрузки туда исполняемой программы операционной системой. Немного разобрались, как и в каком виде хранится информация в современных компьютерных системах(8бит = 1байт).

Коснулись верхушки типов данных, а именно разобрали 1 и 4 байтовые данные. Далее рассмотрим подробно.
Поговорили немного про сканеры памяти и как ими пользоваться. И поэкспериментировали с нашей написанной самими игрой. Произвели поиск и замену значения по найденному адресу в памяти процесса нашей игры при помощи инструмента Cheat Engine.

Начало…

Давайте углубимся в немного в программирование и разберемся с типами данных.

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

Типы данных – это способ хранить данные в памяти. Тип определяет диапазон его возможных значение, список допустимых операций. Как было продемонстрировано в нашей игре, мы хранили значение жизни в 4байтах . Обычно мы можем группировать числа в 1, 2, 4, 8 байтов. То есть, чем больше байтов = тем больше число можем хранить в ячейке(ах). Зная тип данных искомого значения, мы можем легко и правильно сканировать память. Типы данных в программировании определяются с помощью языка программирования. Думаю для примера возьмем язык Си.

В языке программирования C стандартно используются следующие типы данных:

char (символьный тип):
  • Числовой диапазон: -128 до 127 или 0 до 255 (если без знака).
  • Размер: 1 байт.
int (целочисленный тип):
  • Числовой диапазон: зависит от компилятора, обычно -32,768 до 32,767 или 0 до 65,535 (если без знака).
  • Размер: обычно 4 байта, но может варьироваться в зависимости от платформы.
  • Пример: Может хранить количество монет/жизней/патронов
float (вещественный тип с плавающей точкой одинарной точности):
  • Числовой диапазон: примерно от -3.4E38 до 3.4E38.
  • Размер: 4 байта.
  • Пример: Может хранить координаты игрока/врага/предметов и т.д.
double (вещественный тип с плавающей точкой двойной точности):
  • Числовой диапазон: примерно от -1.7E308 до 1.7E308.
  • Размер: 8 байт.
  • Пример: В большинстве случаев нужен для более точных расчетов.
Еще подмечу, если значение в любом из этих типов равно 0, то оно будет считаться не истинным(ложным).

Пример: Игрок находится на земле? Если значение >(больше) 0 то истинна, иначе ложь. Это используется при проверки на различные варианты обработки событий. Допустим есть переменная onGround, которая служит как флаг истинности, которая подразумевает, находится ли игрок на земле или в воздухе? В игре вы делаете прыжок и не можете прыгать до тех пор, пока ваш персонаж не приземлился на землю. Как раз в этот момент игра обрабатывает это все с помощью переменной onGround.

Подробнее можете почитать про типы данных и их модификаторах Здесь

Системы счисления...

При работе с памятью больше всего нам нужно иметь дело с большими числами и для решения этой проблемы была придумана шестнадцатеричная система счисления(HEX).

Шестнадцатеричная система счисления широко используется в программировании и отображении байт кода по нескольким причинам:

Краткость и удобство:
  • Позволяет представлять большие значения байтовой информации (например, адреса памяти) более компактно, чем в двоичной или десятичной системе.
  • Уменьшает количество цифр для представления тех же данных.
Легкость чтения и записи:
  • Шестнадцатеричные числа более легко читать и записывать в сравнении с длинными последовательностями двоичных цифр.
  • Переход между двоичной и шестнадцатеричной системами более интуитивен.
Удобство при работе с байтами:

Байт, в основном, представляет собой 8 бит. Шестнадцатеричная система прекрасно сочетается с байтами, так как каждая цифра шестнадцатеричной системы представляет 4 бита (16 возможных значений).

Пример:

В двоичной системе:

Байт 10101010 может быть представлен в шестнадцатеричной системе как AA.

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

Шестнадцатеричная начинается с 0x, чтобы сообщить компилятору что это hex формат.
Например: 0x123456 0xABCDEF 0x123ABC

Разновидность...

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

Их в основном два вида, а именно External и Internal. Различия у этих читов:

External – в переводе на русский, означает “Внешний”. Extrenal чит являясь исполняемой программой, может из вне читать/изменять память игры при помощи запросов(WinApi) к ОС. Данный тип читов труднее обнаружить из-за своего нахождения вне процесса игры. Тут очень важно, записываете ли вы что то в память игры? Если да, то плохо, если нет, то такой чит гораздо труднее обнаружить. Из-за того, что чит находится вне процесса игры , он будет ограничен по своему функционалу. Ведь мы не можем всегда напрямую перезаписывать данные в памяти игры или вызывать какие либо функции в самой игре, что сказывается на скорости чита.

Internal — в переводится, как “Внутренний”. Это код, чаще всего в виде динамической библиотеки – dll. С помощью инжектора внедряется/загружается в адресное пространство процесса игры. И может напрямую читать и редактировать данные в памяти процесса, обращаться к переменным и функциям. Реализовать чуть сложнее, чем External. В связи со своей активностью внутри памяти процесса игры, относительно легко обнаруживать. Из плюсов чит работает намного быстрее и в плане функций имеет широкий выбор.

Практическая часть…

В этой статье мы сегодня базово разберем первый вид читов - External.
Поработаем с запросами(WinApi) к ОС для доступа к процессу и далее чтение данных/запись в память процесса.
Языком программирования нашего софта будет С++.

Подготовка среды…

Для начала вам нужно Скачать
View hidden content is available for registered users!
 
Сверху Снизу