Cheat Engine
Reading time: 6 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Cheat Engine - це корисна програма для знаходження місць, де важливі значення зберігаються в пам'яті запущеної гри, та їх зміни.
Коли ви завантажите та запустите її, вам буде представлено посібник з використання цього інструменту. Якщо ви хочете навчитися користуватися інструментом, настійно рекомендується його завершити.
Що ви шукаєте?
Цей інструмент дуже корисний для знаходження місця, де деяке значення (зазвичай число) зберігається в пам'яті програми.
Зазвичай числа зберігаються у 4байтовій формі, але ви також можете знайти їх у подвійних або плаваючих форматах, або ви можете шукати щось інше, ніж число. З цієї причини вам потрібно бути впевненим, що ви вибрали те, що хочете шукати:
Також ви можете вказати різні типи пошуків:
Ви також можете відзначити поле, щоб зупинити гру під час сканування пам'яті:
Гарячі клавіші
У Edit --> Settings --> Hotkeys ви можете встановити різні гарячі клавіші для різних цілей, таких як зупинка гри (що досить корисно, якщо в якийсь момент ви хочете просканувати пам'ять). Інші опції також доступні:
Модифікація значення
Якщо ви знайшли, де знаходиться значення, яке ви шукаєте (більше про це в наступних кроках), ви можете змінити його, двічі клацнувши на ньому, а потім двічі клацнувши на його значенні:
І нарешті позначивши галочку, щоб внести зміни в пам'ять:
Зміна в пам'яті буде негайно застосована (зверніть увагу, що поки гра не використовує це значення знову, значення не буде оновлено в грі).
Пошук значення
Отже, ми будемо припускати, що є важливе значення (наприклад, життя вашого персонажа), яке ви хочете покращити, і ви шукаєте це значення в пам'яті)
Через відоме зміна
Припустимо, ви шукаєте значення 100, ви виконуєте сканування, шукаючи це значення, і знаходите багато збігів:
Потім ви робите щось, щоб значення змінилося, і ви зупиняєте гру та виконуєте наступне сканування:
Cheat Engine буде шукати значення, які змінилися з 100 на нове значення. Вітаємо, ви знайшли адресу значення, яке шукали, тепер ви можете його змінити.
Якщо у вас все ще є кілька значень, зробіть щось, щоб знову змінити це значення, і виконайте ще одне "наступне сканування", щоб відфільтрувати адреси.
Невідоме значення, відоме зміна
У сценарії, коли ви не знаєте значення, але знаєте, як його змінити (і навіть значення зміни), ви можете шукати своє число.
Отже, почніть з виконання сканування типу "Невідоме початкове значення":
Потім змініть значення, вкажіть, як значення змінилося (в моєму випадку воно зменшилося на 1) і виконайте наступне сканування:
Вам буде представлено всі значення, які були змінені обраним способом:
Коли ви знайдете своє значення, ви можете його змінити.
Зверніть увагу, що є багато можливих змін, і ви можете виконувати ці кроки стільки, скільки хочете, щоб відфільтрувати результати:
Випадкова адреса пам'яті - Знаходження коду
До цього моменту ми навчилися знаходити адресу, що зберігає значення, але ймовірно, що в різних виконаннях гри ця адреса знаходиться в різних місцях пам'яті. Тож давайте дізнаємося, як завжди знаходити цю адресу.
Використовуючи деякі з згаданих трюків, знайдіть адресу, де ваша поточна гра зберігає важливе значення. Потім (зупинивши гру, якщо хочете) клацніть правою кнопкою миші на знайденій адресі та виберіть "Дізнатися, що отримує доступ до цієї адреси" або "Дізнатися, що записує в цю адресу":
Перша опція корисна для того, щоб дізнатися, які частини коду використовують цю адресу (що корисно для багатьох інших речей, таких як знати, де ви можете змінити код гри).
Друга опція є більш конкретною і буде більш корисною в цьому випадку, оскільки нас цікавить, звідки це значення записується.
Після того, як ви вибрали одну з цих опцій, дебагер буде підключений до програми, і з'явиться нове порожнє вікно. Тепер грай у гру та змінюй це значення (без перезапуску гри). Вікно повинно бути заповнене адресами, які змінюють значення:
Тепер, коли ви знайшли адресу, яка змінює значення, ви можете змінити код на свій розсуд (Cheat Engine дозволяє вам швидко змінювати його на NOP):
Отже, ви можете змінити його так, щоб код не впливав на ваше число, або завжди впливав позитивно.
Випадкова адреса пам'яті - Знаходження вказівника
Продовжуючи попередні кроки, знайдіть, де знаходиться значення, яке вас цікавить. Потім, використовуючи "Дізнатися, що записує в цю адресу", дізнайтеся, яка адреса записує це значення, і двічі клацніть на ньому, щоб отримати вигляд дизасемблера:
Потім виконайте нове сканування, шукаючи шістнадцяткове значення між "[]" (значення $edx у цьому випадку):
(Якщо з'явиться кілька, зазвичай вам потрібна найменша адреса)
Тепер ми знайшли вказівник, який буде змінювати значення, яке нас цікавить.
Клацніть на "Додати адресу вручну":
Тепер клацніть на поле "Вказівник" і додайте знайдену адресу в текстове поле (в цьому сценарії знайдена адреса на попередньому зображенні була "Tutorial-i386.exe"+2426B0):
(Зверніть увагу, як перша "Адреса" автоматично заповнюється з адреси вказівника, яку ви вводите)
Клацніть OK, і буде створено новий вказівник:
Тепер, щоразу, коли ви змінюєте це значення, ви змінюєте важливе значення, навіть якщо адреса пам'яті, де знаходиться значення, інша.
Ін'єкція коду
Ін'єкція коду - це техніка, коли ви вставляєте шматок коду в цільовий процес, а потім перенаправляєте виконання коду, щоб проходити через ваш власний написаний код (наприклад, надаючи вам бали замість їх зменшення).
Отже, уявіть, що ви знайшли адресу, яка віднімає 1 від життя вашого персонажа:
Клацніть на Показати дизасемблер, щоб отримати дизасембльований код.
Потім натисніть CTRL+a, щоб викликати вікно Авто складання та вибрати Шаблон --> Ін'єкція коду
Заповніть адресу інструкції, яку ви хочете змінити (це зазвичай заповнюється автоматично):
Будуть згенеровані шаблони:
Отже, вставте свій новий асемблерний код у секцію "newmem" і видаліть оригінальний код з секції "originalcode", якщо не хочете, щоб він виконувався**.** У цьому прикладі ін'єкований код додасть 2 бали замість віднімання 1:
Натисніть виконати, і ваш код повинен бути ін'єктований у програму, змінюючи поведінку функціональності!
Посилання
- Посібник Cheat Engine, заверште його, щоб дізнатися, як почати працювати з Cheat Engine
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.