D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Автор Unseen
Источник: https://xss.is
Хо-хо-хо Форумчане! Скоро Новый год и что-то подтолкнуло начать писать цикл статей на тему взлома игр(далее - Геймхакинг).
Целью является передача материала на данную тематику более подробно,
особенно довести суть и логику на понятном языке для начинающего геймхакера.
Так что же из себя представляет геймхакинг?
Наверное каждый из нас сталкивался со случаем, когда заходил поиграть в любимый онлайн шутер и во время матча замечал, как один игрок из вражеской команды делал нереальные убийства. Попадать точно в голову(Aimbot) и видеть Вас сквозь стены(WallHack). Такие преимущества над другими игроками дают в играх определенно – читы. Это ПО, которое манипулирует памятью игры, читает и вносит(записывает) некоторые изменения в память. В итоге Вы получаете, те самые супер способности. Об этом подробно поговорим в технической части статьи.
Как можно хорошо зарабатывать с этого?
Для себя я отметил два способа заработка в этой тематике, а именно:
1) Написание приватных читов и последующая продажа по подписке (Модель SaaS - ПО как услуга).
В данном направлении главный упор делается на богатый функционал и обход античита(пример – VAC, Faceit, EAC).
План реализации:
Разработать продукт->Собрать базу клиентов ->Поддерживать базу клиентов = $
2) Написание бесплатных читов(с ограниченным функционалом) и добавление туда дроппер/стиллер/бэкдор и т.д.
Все зависит от Ваших фантазий в данном случае. Для примера представим сценарий:
Вы написали чит с базовыми функциями( WH, Aimbot, Triggerbot)-> встроили туда стиллер и распространяете на разных платформах: чит-форумы/ютуб/телега и т.д. = Получение массовых данных(далее Логи) с компьютеров кто запустил ваш чит.
Схема сценария:
На этом этапе у Вас два варианта:
1)Отработка логов и получение выгоды в виде, аккаунтов стим/соц. сетей, крипты, сохраненных карт(CVV code) если таковы имеются. Жирный профит, но уходит время на отработку.
2)Продажа логов или фиксированный % от их отработки - средний профит, но быстро.
Здесь уже выбор зависит от Ваших личных технических навыков и желания.
Сразу договоримся , методом обучения будет переход от простого к сложному. Важно: Всегда старайтесь закреплять изученное практикой. Экспериментируйте!
Теперь когда немного разобрались что это за направление и поняли как с него можно получать хороший заработок, пора приступить к технической части статьи.
Техническая часть…
Для начала нужно понять, что же происходит когда мы запускам ту или иную программу в компьютере. После запуска программы наша операционная система (далее ОС) загружает ее в оперативную память (RAM) компьютера, где происходит инициализация и подготовка к выполнению. ОС выделяет ресурсы, необходимые для работы программы, такие как выделение виртуального пространства памяти, установка прав доступа и регистрация системных событий. Если программа зависит от внешних библиотек или модулей(пример dll), они также загружаются в память. Виртуальное пространство разработана для того чтобы один процесс не имел доступа к памяти другого процесса. Для работы с памятью другого процесса в Windows, мы сначала должны получить хэндл этого процесса при помощи WinApi. Подробнее поговорим в следующей части.
Оперативная память же состоит из одинаковых ячеек памяти, каждая из которых имеет свой уникальный номер, называемый адресом. Запись информации, а так же чтение ее из ячейки происходит по адресам. Ячейка содержит восемь двоичных разрядов, каждый из которых может находиться в одном из двух состояний, обычно обозначаемых как ноль и единица. Это значит ячейка как единое целое может находиться в одном из 2ⁿ состояний, где n – количество разрядов в ячейке, так, если разрядов 8, возможных состояний ячейки будет 2⁸ = 256, или , иначе говоря, ячейка может хранить числа от 0 до 255. В современных компьютерах одна ячейка памяти из 8 бит = 1байт.
Более наглядно можем увидеть:
Если бы в нашей игре был уровень жизни равный 100, то двоичное представление выглядело бы, как на картинке выше по адресу ячейки 0001( или же 0x1 в hex формате) 01100100 = 100. Или уровень брони как по адресу 0003(0x3) 00110010 = 50. А по адресу 0002(0x2) видно, что все разряды равны единице и образует число 255.
А что если у нас имеется количество монет/денег персонажа или другие данные которые превышают значение, которое может хранить ячейка, то есть больше чем 255, что делать тогда ?
В этом случае мы будем уже работать с группой байт(ячеек), ведь для представления чисел, которые не вместились в одну ячейку приходится взять 2 и более байт(ячеек), чтобы вместить нужные данные. Эти знания нам еще понадобятся, а пока просто читаем.
Вообще для взлома игры, как говорил ранее, мы работаем с памятью игры и главная задача это правильно найти допустим адреса здоровья, брони, сила прыжка и т.д. в памяти и произвести над ними какие то операции. Прочитать значение координат врага в игре и вывести его на экран или записать большое число в адрес силы прыжка от чего наш персонаж будет как Марио =) Обычно для поиска адресов используются сканеры памяти, конечно можно было бы свой сканер написать , но думаю это возможно будет в будущих статях. А пока обойдемся мощной и чудесной программой Cheat Engine. Ссылка на сайт(Не реклама) Cheat Engine Думаю трудностей со скачиванием и установкой не возникнет. Я поставил плюс к нему русификатор.
Эксперименты…
Решил написать мини игру для наших тестов. Думаю, для демонстрации выше полученных знаний самое то! Логика нашей игры заключается в получении урона при нажатии на Enter и выводить количество здоровья. Еще решил, что будет правильно вывести адрес ячейки(ек), где хранится наше здоровье, для полноты картины. Ссылка на исходник для компиляции(gcc) и собранный вариант оставлю в конце статьи. Пароль от архива: xss.is
Запускаем игру:
Далее запускаем Cheat Engine и видим такую картинку:
Нажимаем просмотр процессов и выбираем нашу игру в моем случае a.exe.
Далее для сканирования памяти в целях поиска нужных нам адресов со значениями здоровья нам нужно ввести в поле:
1)«Значение» искомые данные, в нашем случае здоровье 100.
2) «Тип значения» Немного про программирование. Обычно при написании игры разработчик создает переменные, в них будут храниться данные игры. Как обсуждали выше про оперативную память: переменную можете представить как ячейку или группу ячеек(байтов) памяти, куда разработчик записывает значения брони, здоровья, координаты персонажа и тд. Так, переменные имеют свой тип для хранения. Например тип 4Байта – это 4байтов(ячеек) * 8битов = 32бит информации или же 232 степени. Этого предостаточно для хранения количества здоровья. Раньше при разработке из-за дефицита памяти(ОЗУ) ее экономили, и в случае нашей игры я как разработчик мог бы хранить число 100 в 1байте или 2байтах памяти. Подробнее про типы переменных будет в следующей статье.
3) «Поиск» После установки нужных значений и типов(4байт в данном случае) нажимаем поиск.
Как видим у нас нашлось 7 адресов и в одном из них хранится наше искомое значение.
Но так как я в нашей игре вывожу адрес переменой, где у нас хранится здоровье мы можем заметить этот адрес присутствует в нашем списке. Но в реальных играх мы не знаем заранее этот адрес и идем дальше искать. Значит имеем 7 адресов и нужно отсеять не нужные нам адреса. Переходим в игру и нажимаем Enter – получили урон в 5 единиц. Теперь переходим в сканер и вводим в поле значение наше новое значения здоровья 95 и нажимаем «Отсев».
Как видно у нас остался один адрес и он совпадает с адресом, который отображается в самой игре. Предлагаю проверить данное совпадение, чтобы убедиться, что это то, что мы искали. В окне Cheat Engine выбираем этот адрес и два раза кликаем на него. Переместили его в нижнее окошко сканера :
Видим сам адрес и значение, которое хранится в нем. Попробуйте изменить это число на другое, например на число 1000. Два раза кликаем на само значение, у нас открывается окошко, вводим туда нужное число и нажимаем - подтвердить. Переходим в игру и получаем урон. Как видим количество изменилось с 95 на 995, почему 995,а не 1000? Потому что наша игра после получения урона вычла из значения здоровья 5 и вывела новое значение 995. Поздравляю Вы только что произвели запись в память.
Давайте немного посмотрим, как выглядит память нашей игры… Выбираем адрес и нажимаем Ctrl+B или же ПКМ по адресу и пункт «Просмотреть этот регион памяти».
Открывается новое окно со всем байт кодом:
1) 3EFA7FFAC8 и E3 03 это наши адрес и значение в шестнадцатеричной форме расположенной в нем.
2) Здесь так же адрес и значение. Давайте подтвердим нашу гипотезу про хранение данных в ячейках и размерах ячейки.
Для лучшего понимания нажмите ПКМ на значение в нижней части окошка просмотра памяти => «Тип отображения » => 1Байт(шестнадцатеричное) . Так же ПКМ и «Разделители» => 4байта.
Как мы помним значение находится в 4байтах(ячейках) памяти - это адреса C8 C9 CA CB. А мы знаем, что 1байт это 8бит = 4байт * 8бит = 32бита то есть 2 в 32 степени = 4294967295 это максимальное число, которое можем хранить в 4байтах памяти. Давайте перейдем в начальное окно Cheat Engine и поменяем наше значение на 4294967295, подтверждаем.
Снова переходим в окно просмотра памяти и видим:
Все 4 ячейки стали FF FF FF FF в шестнадцатеричной системе. То есть при поисках значений нужно заранее предположить сколько мог выделить разработчик для хранения тех или иных данных в игре. Это сильно упростит наш поиск. Проявляйте смекалку друзья
После перезапуска игры вы можете заметить, что адрес который мы нашли уже не будет рабочим. Дело в том, что при каждой загрузки программы в исполнение, ОС помешает его в случайные области памяти. В следующей части попробуем решить эту проблему, чтобы научиться заранее узнавать каким будет адрес. Поговорим про типы переменных, смещения(оффсеты) и уже напишем первую свою программу для чтения и записи в память других программ(игр).
Эта статья больше получилось об устройстве памяти ОЗУ, системы счисления, представление данных в памяти, но без понимания этого нет смысла идти дальше. Теперь у нас есть полноценная картина, что же происходит закулисами монитора в самой игре. Конечно не все моменты разобрали, но важную часть думаю освоили.
На этом думаю можно закончить нашу статью, ибо сразу все не освоишь, да и нужно дать время мозгу переварить полученные знания.
Хотелось бы добавить для новичков пару рекомендаций. Параллельно со статей начните учить язык С/С++ если этого еще не сделали, это даст больше понимания об низкоуровневом программировании. Да и вообще хороший программист должен понимать, что у него творится за капотом его исполняемого кода. Язык ваш инструмент. Изучив, Вы точно не останетесь в убытки, потому что знания - это самое ценное =)
Сам исходный код игры:
C: Скопировать в буфер обмена
Ссылка на архив с игрой Скачать
Источник: https://xss.is
Хо-хо-хо Форумчане! Скоро Новый год и что-то подтолкнуло начать писать цикл статей на тему взлома игр(далее - Геймхакинг).
Целью является передача материала на данную тематику более подробно,
особенно довести суть и логику на понятном языке для начинающего геймхакера.
Так что же из себя представляет геймхакинг?
Наверное каждый из нас сталкивался со случаем, когда заходил поиграть в любимый онлайн шутер и во время матча замечал, как один игрок из вражеской команды делал нереальные убийства. Попадать точно в голову(Aimbot) и видеть Вас сквозь стены(WallHack). Такие преимущества над другими игроками дают в играх определенно – читы. Это ПО, которое манипулирует памятью игры, читает и вносит(записывает) некоторые изменения в память. В итоге Вы получаете, те самые супер способности. Об этом подробно поговорим в технической части статьи.
Как можно хорошо зарабатывать с этого?
Для себя я отметил два способа заработка в этой тематике, а именно:
1) Написание приватных читов и последующая продажа по подписке (Модель SaaS - ПО как услуга).
В данном направлении главный упор делается на богатый функционал и обход античита(пример – VAC, Faceit, EAC).
План реализации:
Разработать продукт->Собрать базу клиентов ->Поддерживать базу клиентов = $

2) Написание бесплатных читов(с ограниченным функционалом) и добавление туда дроппер/стиллер/бэкдор и т.д.
Все зависит от Ваших фантазий в данном случае. Для примера представим сценарий:
Вы написали чит с базовыми функциями( WH, Aimbot, Triggerbot)-> встроили туда стиллер и распространяете на разных платформах: чит-форумы/ютуб/телега и т.д. = Получение массовых данных(далее Логи) с компьютеров кто запустил ваш чит.
Схема сценария:
На этом этапе у Вас два варианта:
1)Отработка логов и получение выгоды в виде, аккаунтов стим/соц. сетей, крипты, сохраненных карт(CVV code) если таковы имеются. Жирный профит, но уходит время на отработку.
2)Продажа логов или фиксированный % от их отработки - средний профит, но быстро.
Здесь уже выбор зависит от Ваших личных технических навыков и желания.
Сразу договоримся , методом обучения будет переход от простого к сложному. Важно: Всегда старайтесь закреплять изученное практикой. Экспериментируйте!
Теперь когда немного разобрались что это за направление и поняли как с него можно получать хороший заработок, пора приступить к технической части статьи.

Техническая часть…
Для начала нужно понять, что же происходит когда мы запускам ту или иную программу в компьютере. После запуска программы наша операционная система (далее ОС) загружает ее в оперативную память (RAM) компьютера, где происходит инициализация и подготовка к выполнению. ОС выделяет ресурсы, необходимые для работы программы, такие как выделение виртуального пространства памяти, установка прав доступа и регистрация системных событий. Если программа зависит от внешних библиотек или модулей(пример dll), они также загружаются в память. Виртуальное пространство разработана для того чтобы один процесс не имел доступа к памяти другого процесса. Для работы с памятью другого процесса в Windows, мы сначала должны получить хэндл этого процесса при помощи WinApi. Подробнее поговорим в следующей части.
Оперативная память же состоит из одинаковых ячеек памяти, каждая из которых имеет свой уникальный номер, называемый адресом. Запись информации, а так же чтение ее из ячейки происходит по адресам. Ячейка содержит восемь двоичных разрядов, каждый из которых может находиться в одном из двух состояний, обычно обозначаемых как ноль и единица. Это значит ячейка как единое целое может находиться в одном из 2ⁿ состояний, где n – количество разрядов в ячейке, так, если разрядов 8, возможных состояний ячейки будет 2⁸ = 256, или , иначе говоря, ячейка может хранить числа от 0 до 255. В современных компьютерах одна ячейка памяти из 8 бит = 1байт.
Более наглядно можем увидеть:
Если бы в нашей игре был уровень жизни равный 100, то двоичное представление выглядело бы, как на картинке выше по адресу ячейки 0001( или же 0x1 в hex формате) 01100100 = 100. Или уровень брони как по адресу 0003(0x3) 00110010 = 50. А по адресу 0002(0x2) видно, что все разряды равны единице и образует число 255.
А что если у нас имеется количество монет/денег персонажа или другие данные которые превышают значение, которое может хранить ячейка, то есть больше чем 255, что делать тогда ?
В этом случае мы будем уже работать с группой байт(ячеек), ведь для представления чисел, которые не вместились в одну ячейку приходится взять 2 и более байт(ячеек), чтобы вместить нужные данные. Эти знания нам еще понадобятся, а пока просто читаем.
Вообще для взлома игры, как говорил ранее, мы работаем с памятью игры и главная задача это правильно найти допустим адреса здоровья, брони, сила прыжка и т.д. в памяти и произвести над ними какие то операции. Прочитать значение координат врага в игре и вывести его на экран или записать большое число в адрес силы прыжка от чего наш персонаж будет как Марио =) Обычно для поиска адресов используются сканеры памяти, конечно можно было бы свой сканер написать , но думаю это возможно будет в будущих статях. А пока обойдемся мощной и чудесной программой Cheat Engine. Ссылка на сайт(Не реклама) Cheat Engine Думаю трудностей со скачиванием и установкой не возникнет. Я поставил плюс к нему русификатор.
Эксперименты…
Решил написать мини игру для наших тестов. Думаю, для демонстрации выше полученных знаний самое то! Логика нашей игры заключается в получении урона при нажатии на Enter и выводить количество здоровья. Еще решил, что будет правильно вывести адрес ячейки(ек), где хранится наше здоровье, для полноты картины. Ссылка на исходник для компиляции(gcc) и собранный вариант оставлю в конце статьи. Пароль от архива: xss.is
Запускаем игру:
Далее запускаем Cheat Engine и видим такую картинку:
Нажимаем просмотр процессов и выбираем нашу игру в моем случае a.exe.
Далее для сканирования памяти в целях поиска нужных нам адресов со значениями здоровья нам нужно ввести в поле:
1)«Значение» искомые данные, в нашем случае здоровье 100.
2) «Тип значения» Немного про программирование. Обычно при написании игры разработчик создает переменные, в них будут храниться данные игры. Как обсуждали выше про оперативную память: переменную можете представить как ячейку или группу ячеек(байтов) памяти, куда разработчик записывает значения брони, здоровья, координаты персонажа и тд. Так, переменные имеют свой тип для хранения. Например тип 4Байта – это 4байтов(ячеек) * 8битов = 32бит информации или же 232 степени. Этого предостаточно для хранения количества здоровья. Раньше при разработке из-за дефицита памяти(ОЗУ) ее экономили, и в случае нашей игры я как разработчик мог бы хранить число 100 в 1байте или 2байтах памяти. Подробнее про типы переменных будет в следующей статье.
3) «Поиск» После установки нужных значений и типов(4байт в данном случае) нажимаем поиск.
Как видим у нас нашлось 7 адресов и в одном из них хранится наше искомое значение.
Но так как я в нашей игре вывожу адрес переменой, где у нас хранится здоровье мы можем заметить этот адрес присутствует в нашем списке. Но в реальных играх мы не знаем заранее этот адрес и идем дальше искать. Значит имеем 7 адресов и нужно отсеять не нужные нам адреса. Переходим в игру и нажимаем Enter – получили урон в 5 единиц. Теперь переходим в сканер и вводим в поле значение наше новое значения здоровья 95 и нажимаем «Отсев».
Как видно у нас остался один адрес и он совпадает с адресом, который отображается в самой игре. Предлагаю проверить данное совпадение, чтобы убедиться, что это то, что мы искали. В окне Cheat Engine выбираем этот адрес и два раза кликаем на него. Переместили его в нижнее окошко сканера :
Видим сам адрес и значение, которое хранится в нем. Попробуйте изменить это число на другое, например на число 1000. Два раза кликаем на само значение, у нас открывается окошко, вводим туда нужное число и нажимаем - подтвердить. Переходим в игру и получаем урон. Как видим количество изменилось с 95 на 995, почему 995,а не 1000? Потому что наша игра после получения урона вычла из значения здоровья 5 и вывела новое значение 995. Поздравляю Вы только что произвели запись в память.
Давайте немного посмотрим, как выглядит память нашей игры… Выбираем адрес и нажимаем Ctrl+B или же ПКМ по адресу и пункт «Просмотреть этот регион памяти».
Открывается новое окно со всем байт кодом:
1) 3EFA7FFAC8 и E3 03 это наши адрес и значение в шестнадцатеричной форме расположенной в нем.
2) Здесь так же адрес и значение. Давайте подтвердим нашу гипотезу про хранение данных в ячейках и размерах ячейки.
Для лучшего понимания нажмите ПКМ на значение в нижней части окошка просмотра памяти => «Тип отображения » => 1Байт(шестнадцатеричное) . Так же ПКМ и «Разделители» => 4байта.
Как мы помним значение находится в 4байтах(ячейках) памяти - это адреса C8 C9 CA CB. А мы знаем, что 1байт это 8бит = 4байт * 8бит = 32бита то есть 2 в 32 степени = 4294967295 это максимальное число, которое можем хранить в 4байтах памяти. Давайте перейдем в начальное окно Cheat Engine и поменяем наше значение на 4294967295, подтверждаем.
Снова переходим в окно просмотра памяти и видим:
Все 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.IS | Author Unseen\n");
printf("==============================================\n");
printf("[+]Adress: [%p] Value HP: [ %d ]\n", &HP, HP);
printf("[-]Enter = +damage...");
getchar();
HP -= damage;
system("cls");
}
return 0;
}
Ссылка на архив с игрой Скачать