• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья [0x1]Легкий Геймхакинг: Шаг за шагом

Unseen

(L3) cache
Пользователь
Регистрация
17.01.2022
Сообщения
262
Реакции
246
Автор Unseen
Источник: https://xss.pro


Хо-хо-хо Форумчане! Скоро Новый год и что-то подтолкнуло начать писать цикл статей на тему взлома игр(далее - Геймхакинг).

Целью является передача материала на данную тематику более подробно,

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

Так что же из себя представляет геймхакинг?

Наверное каждый из нас сталкивался со случаем, когда заходил поиграть в любимый онлайн шутер и во время матча замечал, как один игрок из вражеской команды делал нереальные убийства. Попадать точно в голову(Aimbot) и видеть Вас сквозь стены(WallHack). Такие преимущества над другими игроками дают в играх определенно – читы. Это ПО, которое манипулирует памятью игры, читает и вносит(записывает) некоторые изменения в память. В итоге Вы получаете, те самые супер способности. Об этом подробно поговорим в технической части статьи.

Как можно хорошо зарабатывать с этого?

Для себя я отметил два способа заработка в этой тематике, а именно:

1) Написание приватных читов и последующая продажа по подписке (Модель SaaS - ПО как услуга).

В данном направлении главный упор делается на богатый функционал и обход античита(пример – VAC, Faceit, EAC).

План реализации:
Разработать продукт->Собрать базу клиентов ->Поддерживать базу клиентов = $ 🤑

2) Написание бесплатных читов(с ограниченным функционалом) и добавление туда дроппер/стиллер/бэкдор и т.д. ;)

Все зависит от Ваших фантазий в данном случае. Для примера представим сценарий:

Вы написали чит с базовыми функциями( WH, Aimbot, Triggerbot)-> встроили туда стиллер и распространяете на разных платформах: чит-форумы/ютуб/телега и т.д. = Получение массовых данных(далее Логи) с компьютеров кто запустил ваш чит.
Схема сценария:
Screenshot_4.png

На этом этапе у Вас два варианта:

1)Отработка логов и получение выгоды в виде, аккаунтов стим/соц. сетей, крипты, сохраненных карт(CVV code) если таковы имеются. Жирный профит, но уходит время на отработку.

2)Продажа логов или фиксированный % от их отработки - средний профит, но быстро.

Здесь уже выбор зависит от Ваших личных технических навыков и желания.

Сразу договоримся , методом обучения будет переход от простого к сложному. Важно: Всегда старайтесь закреплять изученное практикой. Экспериментируйте!
Теперь когда немного разобрались что это за направление и поняли как с него можно получать хороший заработок, пора приступить к технической части статьи.😬

Техническая часть…
Для начала нужно понять, что же происходит когда мы запускам ту или иную программу в компьютере. После запуска программы наша операционная система (далее ОС) загружает ее в оперативную память (RAM) компьютера, где происходит инициализация и подготовка к выполнению. ОС выделяет ресурсы, необходимые для работы программы, такие как выделение виртуального пространства памяти, установка прав доступа и регистрация системных событий. Если программа зависит от внешних библиотек или модулей(пример dll), они также загружаются в память. Виртуальное пространство разработана для того чтобы один процесс не имел доступа к памяти другого процесса. Для работы с памятью другого процесса в Windows, мы сначала должны получить хэндл этого процесса при помощи WinApi. Подробнее поговорим в следующей части.

Оперативная память же состоит из одинаковых ячеек памяти, каждая из которых имеет свой уникальный номер, называемый адресом. Запись информации, а так же чтение ее из ячейки происходит по адресам. Ячейка содержит восемь двоичных разрядов, каждый из которых может находиться в одном из двух состояний, обычно обозначаемых как ноль и единица. Это значит ячейка как единое целое может находиться в одном из 2ⁿ состояний, где n – количество разрядов в ячейке, так, если разрядов 8, возможных состояний ячейки будет 2⁸ = 256, или , иначе говоря, ячейка может хранить числа от 0 до 255. В современных компьютерах одна ячейка памяти из 8 бит = 1байт.
Более наглядно можем увидеть:
RAM.png


Если бы в нашей игре был уровень жизни равный 100, то двоичное представление выглядело бы, как на картинке выше по адресу ячейки 0001( или же 0x1 в hex формате) 01100100 = 100. Или уровень брони как по адресу 0003(0x3) 00110010 = 50. А по адресу 0002(0x2) видно, что все разряды равны единице и образует число 255.
А что если у нас имеется количество монет/денег персонажа или другие данные которые превышают значение, которое может хранить ячейка, то есть больше чем 255, что делать тогда ?
В этом случае мы будем уже работать с группой байт(ячеек), ведь для представления чисел, которые не вместились в одну ячейку приходится взять 2 и более байт(ячеек), чтобы вместить нужные данные. Эти знания нам еще понадобятся, а пока просто читаем.

Вообще для взлома игры, как говорил ранее, мы работаем с памятью игры и главная задача это правильно найти допустим адреса здоровья, брони, сила прыжка и т.д. в памяти и произвести над ними какие то операции. Прочитать значение координат врага в игре и вывести его на экран или записать большое число в адрес силы прыжка от чего наш персонаж будет как Марио =) Обычно для поиска адресов используются сканеры памяти, конечно можно было бы свой сканер написать , но думаю это возможно будет в будущих статях. А пока обойдемся мощной и чудесной программой Cheat Engine. Ссылка на сайт(Не реклама) Cheat Engine Думаю трудностей со скачиванием и установкой не возникнет. Я поставил плюс к нему русификатор.

Эксперименты…

Решил написать мини игру для наших тестов. Думаю, для демонстрации выше полученных знаний самое то! Логика нашей игры заключается в получении урона при нажатии на Enter и выводить количество здоровья. Еще решил, что будет правильно вывести адрес ячейки(ек), где хранится наше здоровье, для полноты картины. Ссылка на исходник для компиляции(gcc) и собранный вариант оставлю в конце статьи. Пароль от архива: xss.pro
Запускаем игру:

game_dis.png


Далее запускаем Cheat Engine и видим такую картинку:

cheat2.png


Нажимаем просмотр процессов и выбираем нашу игру в моем случае a.exe.
Далее для сканирования памяти в целях поиска нужных нам адресов со значениями здоровья нам нужно ввести в поле:
cheat3.png


1)«Значение» искомые данные, в нашем случае здоровье 100.

2) «Тип значения» Немного про программирование. Обычно при написании игры разработчик создает переменные, в них будут храниться данные игры. Как обсуждали выше про оперативную память: переменную можете представить как ячейку или группу ячеек(байтов) памяти, куда разработчик записывает значения брони, здоровья, координаты персонажа и тд. Так, переменные имеют свой тип для хранения. Например тип 4Байта – это 4байтов(ячеек) * 8битов = 32бит информации или же 232 степени. Этого предостаточно для хранения количества здоровья. Раньше при разработке из-за дефицита памяти(ОЗУ) ее экономили, и в случае нашей игры я как разработчик мог бы хранить число 100 в 1байте или 2байтах памяти. Подробнее про типы переменных будет в следующей статье.

3) «Поиск» После установки нужных значений и типов(4байт в данном случае) нажимаем поиск.

Как видим у нас нашлось 7 адресов и в одном из них хранится наше искомое значение.
cheat4.png


Но так как я в нашей игре вывожу адрес переменой, где у нас хранится здоровье мы можем заметить этот адрес присутствует в нашем списке. Но в реальных играх мы не знаем заранее этот адрес и идем дальше искать. Значит имеем 7 адресов и нужно отсеять не нужные нам адреса. Переходим в игру и нажимаем Enter – получили урон в 5 единиц. Теперь переходим в сканер и вводим в поле значение наше новое значения здоровья 95 и нажимаем «Отсев».

cheat5.png

Как видно у нас остался один адрес и он совпадает с адресом, который отображается в самой игре. Предлагаю проверить данное совпадение, чтобы убедиться, что это то, что мы искали. В окне Cheat Engine выбираем этот адрес и два раза кликаем на него. Переместили его в нижнее окошко сканера :

cheat6.png


Видим сам адрес и значение, которое хранится в нем. Попробуйте изменить это число на другое, например на число 1000. Два раза кликаем на само значение, у нас открывается окошко, вводим туда нужное число и нажимаем - подтвердить. Переходим в игру и получаем урон. Как видим количество изменилось с 95 на 995, почему 995,а не 1000? Потому что наша игра после получения урона вычла из значения здоровья 5 и вывела новое значение 995. Поздравляю Вы только что произвели запись в память.

Давайте немного посмотрим, как выглядит память нашей игры… Выбираем адрес и нажимаем Ctrl+B или же ПКМ по адресу и пункт «Просмотреть этот регион памяти».

Открывается новое окно со всем байт кодом:

cheat7.png


1) 3EFA7FFAC8 и E3 03 это наши адрес и значение в шестнадцатеричной форме расположенной в нем.
2) Здесь так же адрес и значение. Давайте подтвердим нашу гипотезу про хранение данных в ячейках и размерах ячейки.

Для лучшего понимания нажмите ПКМ на значение в нижней части окошка просмотра памяти => «Тип отображения » => 1Байт(шестнадцатеричное) . Так же ПКМ и «Разделители» => 4байта.

Как мы помним значение находится в 4байтах(ячейках) памяти - это адреса C8 C9 CA CB. А мы знаем, что 1байт это 8бит = 4байт * 8бит = 32бита то есть 2 в 32 степени = 4294967295 это максимальное число, которое можем хранить в 4байтах памяти. Давайте перейдем в начальное окно Cheat Engine и поменяем наше значение на 4294967295, подтверждаем.

Снова переходим в окно просмотра памяти и видим:

cheat8.png


Все 4 ячейки стали FF FF FF FF в шестнадцатеричной системе. То есть при поисках значений нужно заранее предположить сколько мог выделить разработчик для хранения тех или иных данных в игре. Это сильно упростит наш поиск. Проявляйте смекалку друзья :)

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

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

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

Хотелось бы добавить для новичков пару рекомендаций. Параллельно со статей начните учить язык С/С++ если этого еще не сделали, это даст больше понимания об низкоуровневом программировании. Да и вообще хороший программист должен понимать, что у него творится за капотом его исполняемого кода. Язык ваш инструмент. Изучив, Вы точно не останетесь в убытки, потому что знания - это самое ценное =)

Сам исходный код игры:

C:
#include <stdio.h>

int main(){

    int HP = 100; //type int = 4byte
    int damage = 5;

    while(HP > 0)
    {
    printf("==============================================\n");
    printf("\tSpecial for xss.pro | Author Unseen\n");
    printf("==============================================\n");
    printf("[+]Adress: [%p] Value HP: [ %d ]\n", &HP, HP);
    printf("[-]Enter = +damage...");
    getchar();
    HP -= damage;
    system("cls");
    }

    return 0;

}

Ссылка на архив с игрой Скачать Пароль от архива xss.pro
 

Вложения

  • GameSource.zip
    33 КБ · Просмотры: 26
Последнее редактирование модератором:
🤔 https://xss.pro/threads/103053/
 
Что первый автор, что второй автор, аналогичные статьи. Игры из 90х уже в прошлом.
дело не в 90х.
наверняка автор может начать и с 2023, но мало кто его поймет.
Поэтому принцип (отмечено вначале) - от простого к сложному.

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

Постененно , наверняка можно рассмотреть и пример из популярной игры.
А може и нет - морочно. Как автор захочет.
 
Что первый автор, что второй автор, аналогичные статьи. Игры из 90х уже в прошлом.
Поэтому я специально подметил в начале статьи, от простого к сложному. Думаю здесь не каждый поймет, если бы статья начиналась об кольцах защиты в ОС, реализующая аппаратное разделение системного(Kernel mode) и пользовательского(User mode) уровней привилегий. И сразу бы взялись за написание софта в виде драйвера. Статья рассчитана больше на новичков в целом. Надеюсь смог передать свое видение :)
 
Воз
статья 1 в 1
Вам показалось. Попробуйте перечитать ещё раз. В статье больше делался упор на память(RAM), как он устроен, и как данные там хранятся и почему так или иначе? Показать это изнутри, а не делать обзор на Cheat Engine. А ля нажми это и нажми сё. Я не обсуждаю другого автора , как он написал и пытался передать свой мысль.
 
статья 1 в 1
так оно и есть.
но одно дело когда читер роется в твоем компе, и тогда интересно чье это уродство (мягко выражаясь), другое дело, когда оно статью пишет
Не все ли равно, кто это
пытался передать свой мысль.
 
Вторая статья про Cheat Engine, мог бы написать проду ссылаясь на https://xss.pro/threads/103053/
Я понимаю что работа с памятью хорошая штука, но хотелось бы большего
+rep за старание и написание статьи
 
Вторая статья про Cheat Engine, мог бы написать проду ссылаясь на https://xss.pro/threads/103053/
Я понимаю что работа с памятью хорошая штука, но хотелось бы большего
+rep за старание и написание статьи
Спасибо за замечания. Но здесь больше была идея показать саму память изнутри ))
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх