mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
164 lines
12 KiB
Markdown
164 lines
12 KiB
Markdown
# Cheat Engine
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) - це корисна програма для знаходження місць, де важливі значення зберігаються в пам'яті запущеної гри, та їх зміни.\
|
||
Коли ви завантажите та запустите її, вам буде **представлено** **посібник** з використання цього інструменту. Якщо ви хочете навчитися користуватися інструментом, настійно рекомендується його завершити.
|
||
|
||
## Що ви шукаєте?
|
||
|
||
.png>)
|
||
|
||
Цей інструмент дуже корисний для знаходження **місця, де деяке значення** (зазвичай число) **зберігається в пам'яті** програми.\
|
||
**Зазвичай числа** зберігаються у **4байтовій** формі, але ви також можете знайти їх у **подвійних** або **плаваючих** форматах, або ви можете шукати щось **інше, ніж число**. З цієї причини вам потрібно бути впевненим, що ви **вибрали** те, що хочете **шукати**:
|
||
|
||
.png>)
|
||
|
||
Також ви можете вказати **різні** типи **пошуків**:
|
||
|
||
.png>)
|
||
|
||
Ви також можете відзначити поле, щоб **зупинити гру під час сканування пам'яті**:
|
||
|
||
.png>)
|
||
|
||
### Гарячі клавіші
|
||
|
||
У _**Edit --> Settings --> Hotkeys**_ ви можете встановити різні **гарячі клавіші** для різних цілей, таких як **зупинка** **гри** (що досить корисно, якщо в якийсь момент ви хочете просканувати пам'ять). Інші опції також доступні:
|
||
|
||
.png>)
|
||
|
||
## Модифікація значення
|
||
|
||
Якщо ви **знайшли**, де знаходиться **значення**, яке ви **шукаєте** (більше про це в наступних кроках), ви можете **змінити його**, двічі клацнувши на ньому, а потім двічі клацнувши на його значенні:
|
||
|
||
.png>)
|
||
|
||
І нарешті **позначивши галочку**, щоб внести зміни в пам'ять:
|
||
|
||
.png>)
|
||
|
||
**Зміна** в **пам'яті** буде негайно **застосована** (зверніть увагу, що поки гра не використовує це значення знову, значення **не буде оновлено в грі**).
|
||
|
||
## Пошук значення
|
||
|
||
Отже, ми будемо припускати, що є важливе значення (наприклад, життя вашого користувача), яке ви хочете покращити, і ви шукаєте це значення в пам'яті)
|
||
|
||
### Через відоме зміна
|
||
|
||
Припустимо, ви шукаєте значення 100, ви **виконуєте сканування**, шукаючи це значення, і знаходите багато збігів:
|
||
|
||
.png>)
|
||
|
||
Потім ви робите щось, щоб **значення змінилося**, і ви **зупиняєте** гру та **виконуєте** **наступне сканування**:
|
||
|
||
.png>)
|
||
|
||
Cheat Engine буде шукати **значення**, які **змінилися з 100 на нове значення**. Вітаємо, ви **знайшли** **адресу** значення, яке шукали, тепер ви можете його змінити.\
|
||
_Якщо у вас все ще є кілька значень, зробіть щось, щоб знову змінити це значення, і виконайте ще одне "наступне сканування", щоб відфільтрувати адреси._
|
||
|
||
### Невідоме значення, відоме зміна
|
||
|
||
У сценарії, коли ви **не знаєте значення**, але знаєте, **як його змінити** (і навіть значення зміни), ви можете шукати своє число.
|
||
|
||
Отже, почніть з виконання сканування типу "**Невідоме початкове значення**":
|
||
|
||
.png>)
|
||
|
||
Потім змініть значення, вкажіть, **як** **значення** **змінилося** (в моєму випадку воно зменшилося на 1) і виконайте **наступне сканування**:
|
||
|
||
.png>)
|
||
|
||
Вам буде представлено **всі значення, які були змінені обраним способом**:
|
||
|
||
.png>)
|
||
|
||
Коли ви знайдете своє значення, ви можете його змінити.
|
||
|
||
Зверніть увагу, що є **багато можливих змін**, і ви можете виконувати ці **кроки стільки, скільки хочете**, щоб відфільтрувати результати:
|
||
|
||
.png>)
|
||
|
||
### Випадкова адреса пам'яті - Знаходження коду
|
||
|
||
До цього моменту ми навчилися знаходити адресу, що зберігає значення, але ймовірно, що в **різних виконаннях гри ця адреса знаходиться в різних місцях пам'яті**. Тож давайте дізнаємося, як завжди знаходити цю адресу.
|
||
|
||
Використовуючи деякі з згаданих трюків, знайдіть адресу, де ваша поточна гра зберігає важливе значення. Потім (зупинивши гру, якщо хочете) клацніть правою кнопкою миші на знайденій **адресі** та виберіть "**Дізнатися, що отримує доступ до цієї адреси**" або "**Дізнатися, що записує в цю адресу**":
|
||
|
||
.png>)
|
||
|
||
**Перша опція** корисна для того, щоб дізнатися, які **частини** **коду** **використовують** цю **адресу** (що корисно для інших речей, таких як **знати, де ви можете змінити код** гри).\
|
||
**Друга опція** є більш **специфічною** і буде більш корисною в цьому випадку, оскільки нас цікавить, **звідки це значення записується**.
|
||
|
||
Після того, як ви вибрали одну з цих опцій, **дебагер** буде **підключений** до програми, і з'явиться нове **порожнє вікно**. Тепер **грай** у **гру** та **змінюй** це **значення** (без перезапуску гри). **Вікно** повинно бути **заповнене** **адресами**, які **змінюють** **значення**:
|
||
|
||
.png>)
|
||
|
||
Тепер, коли ви знайшли адресу, яка змінює значення, ви можете **змінити код на свій розсуд** (Cheat Engine дозволяє вам швидко змінювати його на NOP):
|
||
|
||
.png>)
|
||
|
||
Отже, ви можете тепер змінити його так, щоб код не впливав на ваше число або завжди впливав позитивно.
|
||
|
||
### Випадкова адреса пам'яті - Знаходження вказівника
|
||
|
||
Продовжуючи попередні кроки, знайдіть, де знаходиться значення, яке вас цікавить. Потім, використовуючи "**Дізнатися, що записує в цю адресу**", дізнайтеся, яка адреса записує це значення, і двічі клацніть на ньому, щоб отримати вигляд дизасемблера:
|
||
|
||
.png>)
|
||
|
||
Потім виконайте нове сканування, **шукаючи шістнадцяткове значення між "\[]"** (значення $edx у цьому випадку):
|
||
|
||
.png>)
|
||
|
||
(_Якщо з'явиться кілька, зазвичай вам потрібна найменша адреса_)\
|
||
Тепер ми **знайшли вказівник, який буде змінювати значення, яке нас цікавить**.
|
||
|
||
Клацніть на "**Додати адресу вручну**":
|
||
|
||
.png>)
|
||
|
||
Тепер клацніть на поле "Вказівник" і додайте знайдену адресу в текстове поле (в цьому сценарії знайдена адреса на попередньому зображенні була "Tutorial-i386.exe"+2426B0):
|
||
|
||
.png>)
|
||
|
||
(Зверніть увагу, як перша "Адреса" автоматично заповнюється з адреси вказівника, яку ви вводите)
|
||
|
||
Клацніть OK, і буде створено новий вказівник:
|
||
|
||
.png>)
|
||
|
||
Тепер, щоразу, коли ви змінюєте це значення, ви **змінюєте важливе значення, навіть якщо адреса пам'яті, де знаходиться значення, інша.**
|
||
|
||
### Ін'єкція коду
|
||
|
||
Ін'єкція коду - це техніка, коли ви вставляєте шматок коду в цільовий процес, а потім перенаправляєте виконання коду, щоб пройти через ваш власний написаний код (наприклад, надаючи вам бали замість їх зменшення).
|
||
|
||
Отже, уявіть, що ви знайшли адресу, яка віднімає 1 від життя вашого гравця:
|
||
|
||
.png>)
|
||
|
||
Клацніть на Показати дизасемблер, щоб отримати **дизасембльований код**.\
|
||
Потім натисніть **CTRL+a**, щоб викликати вікно Авто складання та виберіть _**Шаблон --> Ін'єкція коду**_
|
||
|
||
.png>)
|
||
|
||
Заповніть **адресу інструкції, яку ви хочете змінити** (це зазвичай заповнюється автоматично):
|
||
|
||
.png>)
|
||
|
||
Шаблон буде згенеровано:
|
||
|
||
.png>)
|
||
|
||
Отже, вставте свій новий асемблерний код у секцію "**newmem**" і видаліть оригінальний код з секції "**originalcode**", якщо не хочете, щоб він виконувався. У цьому прикладі ін'єкований код додасть 2 бали замість того, щоб віднімати 1:
|
||
|
||
.png>)
|
||
|
||
**Натисніть виконати, і ваш код повинен бути ін'єктований у програму, змінюючи поведінку функціональності!**
|
||
|
||
## **Посилання**
|
||
|
||
- **Посібник Cheat Engine, заверште його, щоб дізнатися, як почати працювати з Cheat Engine**
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|