Skip to content

Cheat Engine: что это, как работает и как использовать на примере Windowkill

FitoDomik/Cheat-Engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

Cheat Engine: что это, как работает и как использовать на примере Windowkill

В этом репозитории я рассказываю о приложении Cheat Engine и показываю, как оно работает на примере моей игры Windowkill.

Что такое Cheat Engine

Cheat Engine — это инструмент для анализа и модификации данных в памяти запущенных приложений (обычно игр). Он позволяет:

  • находить значения в оперативной памяти (RAM);
  • фильтровать и уточнять результаты поиска по изменениям значений;
  • изменять найденные значения в реальном времени;
  • анализировать код и структуры данных процесса, устанавливать точки останова и т. д.

Применение:

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

Скачать Cheat Engine

Скачать актуальную версию: cheatengine.org/downloads.php. На официальной странице указано, что инструмент предназначен для образовательных целей; возможны ложные срабатывания антивирусов — при проблемах с установкой/запуском временно отключите защиту или добавьте исключение.


Как работает Cheat Engine на базовом уровне

1) Подключение к процессу

Вы запускаете игру, затем Cheat Engine и выбираете процесс игры в списке процессов. После этого CE получает доступ к адресному пространству процесса для чтения/записи.

2) Сканирование памяти

Предположим, у персонажа 100 единиц здоровья. Вы вводите «100» и запускаете поиск. CE сканирует память процесса и находит все вхождения значения 100. Таких адресов обычно много.

Далее вы сужаете поиск: получаете урон (например, стало 90), задаёте новый фильтр «90». Повторяете цикл «изменить в игре → отфильтровать в CE», пока не останется мало кандидатов или один адрес.

3) Изменение значений

Когда адрес найден, значение можно изменить на лету (например, поставить здоровье 9999). Игра «поверит» этому, потому что читает данные из RAM.


Где хранятся данные: RAM, файлы и базы данных

  • Временные значения (здоровье, очки, координаты) почти всегда в RAM — их и находит CE.
  • Постоянные значения (сохранения, настройки) часто хранятся:
    • в файлах на диске (JSON, XML, бинарные сейвы);
    • в реестре Windows;
    • в локальных мини‑базах (например, SQLite);
    • в облаке/на сервере для онлайн‑игр.

Cheat Engine работает именно с памятью процесса. Но понимание «постоянного» хранилища помогает лучше анализировать логику игры:

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

Коротко о базах данных в играх:

  • SQLite/локальные БД — встраиваемая БД в одном файле; удобна для кроссплатформенных сохранений/таблиц лидеров офлайн.
  • Серверные БД (PostgreSQL/MySQL/NoSQL) — используются онлайн‑проектами; данные игрока хранятся на сервере, а клиент получает только копию/срез. В таком случае менять RAM клиента часто бесполезно: сервер регулярно валидирует данные.

Практика на примере Windowkill

Ниже — пошаговая демонстрация поиска и изменения очков в моей игре. Скриншоты находятся в папке foto/ репозитория.

Шаг 1. Определяем цель

Сначала решаем, что хотим менять. В примере — очки. Смотрим текущее количество очков в игре.

Шаг 1 — смотрим очки

Шаг 2. Подключаемся к процессу игры

Открываем Cheat Engine и выбираем процесс игры в списке.

Шаг 2 — выбираем процесс

Шаг 3. Первый скан

Вводим текущее количество очков и запускаем первый поиск (First Scan). Тип значения подбираем в зависимости от игры, чаще всего это 4‑байтное целое (Value Type: 4 Bytes).

Шаг 3 — первый скан

Шаг 4. Уточняем поиск

Меняем очки внутри игры (например, заработали ещё 6 очков), затем в CE указываем новое значение и запускаем «Next Scan».

Шаг 4 — следующий скан

Повторяем цикл «изменили в игре → отфильтровали в CE», пока не останется один или несколько правдоподобных адресов.

Шаг 5. Изменяем значение

Когда остался нужный адрес, дважды кликаем по нему, чтобы добавить в нижнюю таблицу. Далее кликаем правой кнопкой → Change recordValue и меняем на желаемое число (например, 100).

Шаг 5 — меняем значение

Шаг 6. Смотрим результат в игре

Значение обновится мгновенно — видим новые очки.

Шаг 6 — результат


Расширенные возможности Cheat Engine

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

Типы сканирования значений

  • Exact Value — поиск точного значения (классический случай: 100 → 90 → 80 ...).
  • Unknown Initial Value — когда начальное значение неизвестно. Далее используйте фильтры: Increased, Decreased, Changed, Unchanged.
  • Value Type — 1/2/4/8 Bytes, Float, Double, String, Array of Byte (AOB), Binary. Часто очки — 4 Bytes, здоровье/таймеры — Float/Double.
  • Aligned/Unaligned — влияет на то, как CE шагает по памяти (по краям слов/двойных слов).
  • Fast Scan / Writable / Executable / CopyOnWrite — флаги для ускорения и ограничения областей поиска.

Поиск по сигнатурам (Array of Byte, AOB Scan)

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

Pointer Scan (указатели)

Адресы данных часто «прыгают» при каждом запуске. Pointer Scan ищет цепочки указателей, которые стабильно ведут к нужному значению. Это ключ к долговечным таблицам.

Dissect Data / Dissect Structure

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

Memory Viewer, Assembler/Disassembler

Просмотр памяти и кода, навигация по модулям, функциям, символам. Можно ставить breakpoint и отслеживать, где именно код читает/пишет нужный адрес (Find out what writes/accesses this address).

Debugger и точки останова

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

Auto Assembler (AA), Code Injection

Язык сценариев CE для вставки кода на лету (инжект), изменения инструкций, перехвата функций. Используется для создания стабильных читов, тренеров и фиксов. Скрипты можно сохранять в .CT таблицы.

Speedhack

Изменяет скорость восприятия времени игрой (ускорение/замедление). Работает не во всех проектах (анти‑чит/таймчеки на стороне игры/сервера).

Lua‑скриптинг и Trainer Maker

CE имеет встроенный Lua‑интерпретатор: автоматизация действий, создание GUI‑тренеров, горячих клавиш, реакция на события. Таблицы .CT могут включать Lua‑скрипты и формы.

Сохранение таблиц (.CT)

Все найденные адреса/указатели/скрипты удобно сохранять в таблицу. Это позволяет быстро поднимать окружение после перезапуска игры.

Mono features / Symbols

Для игр на Unity/Mono доступен анализ управляемых сборок, классов, методов, полей, их адресов и прямые хуки на уровне C#/IL.

Data Breakpoints / Access/Write Watch

Отслеживание, кто читает/пишет указанный адрес. Очень полезно для обратной разработки логики.


Советы по поиску значений

  • Начинайте с очевидного типа (4 Bytes), если не уверены — попробуйте Float.
  • Если адрес «живет» недолго, используйте «Find out what writes/accesses this address» и перейдите к анализу кода.
  • Для стабильности после перезапуска игры применяйте Pointer Scan или AOB Scan.
  • Для таймеров/скорости — часто подходят Float/Double и фильтры Decreased/ Increased.
  • При непредсказуемом формате — используйте Unknown initial value и последовательные фильтры изменений.

Частые проблемы и решения

  • Адрес каждый раз меняется. Используйте Pointer Scan или AOB‑сигнатуру.
  • Значение не находится. Поменяйте тип (4 Bytes ↔ Float/Double), сканируйте «Unknown initial value» с фильтрами изменений.
  • Изменение не влияет на игру. Значение может быть кешировано/пересчитываться — ищите «что пишет в адрес» и фиксируйте код; возможно, данные валидирует сервер.
  • Крашится при дебаге. Попробуйте другие настройки отладчика в CE, отключите сторонний анти‑чит, запустите CE от имени администратора.

Заключение

Cheat Engine — мощный инструмент для изучения программ, памяти и игрового кода. Используйте его ответственно: для обучения, анализа и экспериментов. На примере Windowkill вы увидели базовый цикл: найти → отфильтровать → изменить. Дальше в ход идут продвинутые техники — указатели, сигнатуры, инжекты и скрипты — которые делают результаты стабильными и воспроизводимыми.

Таблица-напоминание: функции Cheat Engine

Функция Что делает
Exact Value Scan Поиск точного значения (100 → 90 → 80 и т. п.)
Unknown Initial Value Поиск при неизвестном начальном значении с фильтрами изменений
Next Scan Filters Фильтры Increased/Decreased/Changed/Unchanged для сужения результатов
Value Type Выбор типа: 1/2/4/8 Bytes, Float, Double, String, AOB, Binary
Fast Scan / Writable / Executable / COW Ограничение областей памяти и ускорение поиска
AOB Scan (Array of Byte) Поиск по сигнатурам байт, устойчивый к смене адресов
Pointer Scan Поиск цепочек указателей для стабильного доступа к значению
Freeze (заморозка) Фиксация значения, чтобы игра не могла его изменить
Memory Viewer Просмотр/редактирование памяти, переход по модулям и адресам
Find out what accesses/writes Отслеживание кода, который читает/пишет адрес
Breakpoints (Debugger) Остановка кода, просмотр регистров/стека, пошаговое исполнение
Auto Assembler (AA) Скриптовый ассемблер CE для инжектов и модификации кода
Code Injection Вставка кода в процесс для перехвата логики
Speedhack Замедление/ускорение выполнения игры
Lua Engine Автоматизация, GUI‑формы тренеров, хоткеи
Trainer Maker Создание тренеров на базе таблиц и Lua
Mono features Анализ классов/методов для игр на Unity/Mono
Dissect Structure Исследование и разметка структур данных в памяти
Data Breakpoints Триггеры на чтение/запись/исполнение в адресе

Ссылка на репозиторий игры: https://github.com/FitoDomik/Windowkill

About

Cheat Engine: что это, как работает и как использовать на примере Windowkill

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published