Программа Cheat Engine помогает «взламывать» компьютерных игры. С помощью такой утилиты пользователю предоставляется инструментарий для того, чтобы добавить денег в играх, а также для смены других параметров, влияющих на развитие персонажа.
Принцип работы приложения Cheat Engine
Компьютерные игры содержат некоторый массив данных в ОЗУ на ПК пользователя. Помимо загрузочных папок, в массивах информации содержатся файлы о текущей игровой сессии. Файлы обновляются в режиме текущего времени и содержат цифровой код параметров игры.
Если в игре у персонажа компьютерной игры накоплена сумма игровых денег в количестве 937$, запись об этом аспекте игры будет сохранена в папках текущей сессии. Программа Cheat Engine совершает автоматический поиск числовых значений, а также предоставляет инструментарий для ввода новых числовых значений. Таким образом, пользователь способен изменить сумму 937$ в 937 000$ и использовать полученные деньги в личных интересах.
Как накрутить деньги в игре
Открыв программу, пользователь видит процессы, запущенные на ПК. В списке программ выбирается игра, в которой будут накручиваться деньги. Нажмите кнопку «Открыть» и программа запустит панель для демонстрации файлов выбранной игры.
Как взломать любую игру на пк за пару кликов?

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

Компьютерные игры открывают перед нами новые миры. И мир читов — один из них. Сегодня мы вместе пройдем путь от теории к практике и напишем собственный чит. Если ты хочешь научиться взламывать исполняемые файлы, то это может стать неплохим упражнением.
Виды читов и применяемые тактики
Существуют разные виды читов. Можно разделить их на несколько групп.
-
External — внешние читы, которые работают в отдельном процессе. Если же мы скроем наш external-чит, загрузив его в память другого процесса, он превратится в hidden external.
Есть три основные тактики модификации поведения игры.
- Изменение памяти игры. API операционной системы используется для поиска и изменения участков памяти, содержащих нужную нам информацию (например, жизни, патроны).
- Симуляция действий игрока: приложение повторяет действия игрока, нажимая мышкой в заранее указанных местах.
- Перехват трафика игры. Между игрой и сервером встает чит. Он перехватывает данные, собирая или изменяя информацию, чтобы обмануть клиент или сервер.
Большинство современных игр написаны для Windows, поэтому и примеры мы будем делать для нее же.
Пишем игру на C
Про читы лучше всего рассказывать на практике. Мы напишем свою небольшую игру, на которой сможем потренироваться. Я буду писать игру на C#, но постараюсь максимально приблизить структуру данных к игре на C++. По моему опыту читерить в играх на C# очень просто.
КАК ДЕЛАЮТ КРЯКИ ДЛЯ ИГР
Принцип игры прост: нажимаешь Enter и проигрываешь. Не особо честные правила, да? Попробуем их изменить.
Приступим к реверс-инжинирингу

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

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

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

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

Вот и нужное значение! Изменим его и нажмем 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-чита выглядит так:
- Найти ID процесса.
- Получить дескриптор к этому процессу с нужными правами.
- Найти адреса в памяти.
- Пропатчить что-то, если нужно.
- Отрисовать GUI, если он имеется.
- Считывать или изменять память по мере надобности.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник: xakep.ru
Взлом программ для чайников

Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ.
В данной статье я хочу рассказать про три с половиной основных способа взлома программ на .NET, цель, которую я преследую — помочь разработчикам лучше понять механизмы защиты своих программ, т.е. выяснить наиболее очевидные угрозы и предпринять соответствующие меры (или не принимать).
Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.е. все инструменты будут простыми, легкодоступными и бесплатными. А основным будет Reflector, декомпилятор программ под .NET

В качестве подопытного кролика я выбрал Expresso — анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 60 дней. Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня.
Для начала краткий ликбез по структуре .NET программы, для тех кто не знаком с разработкой под данный Framework: весь код, написанный на любом .NET языке (C#, Visual Basic, F#, Delphi.NET) компилируется в особый Intermediate Language, называемый обычно IL или MSIL. Это что-то типа ассемблера, только весьма умного и обладающего весьма мощными инструкциями. И это, в принципе, такой же равноправный язык как и C#, только синтаксис похуже (а возможности больше). Кроме того, в программе на .NET активно используются метаданные, т.е. вся информация о классах, метода, пропертях, атрибутах и всём остальном сохранена в исполняемом файле.
Т.е. на самом деле, декомпиляция программы не очень верное понятие в данном случае. Она и так вся в открытом виде лежит, а инструменты в виде Reflector’а занимаются тем, что приводят конструкции MSIL к соответствующим конструкциям C# или другого языка, повышая читабельность кода.
Перейдём, собственно, к взлому.
0. Обнуление триала
Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы. Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока.
Посмотрим на нашего подопытного рефлектором. Немного погуляв по коду, находим интересную строчку в конструкторе MainForm:

Открываем редактор реестра, идём в HKEY_CURRENT_USERSoftwareUltrapicoExpresso и видим следующие ключи:

Удаляем их и получаем ещё 60 дней работы.