Cheat Engine
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Cheat Engine - це корисна програма для знаходження місць, де важливі значення зберігаються в пам'яті запущеної гри, та їх зміни. Коли ви завантажите та запустите її, вам буде представлено посібник з використання цього інструменту. Якщо ви хочете навчитися користуватися інструментом, настійно рекомендується його завершити.
Цей інструмент дуже корисний для знаходження де деяке значення (зазвичай число) зберігається в пам'яті програми. Зазвичай числа зберігаються у 4 байтах, але ви також можете знайти їх у форматах double або float, або ви можете шукати щось інше, ніж число. З цієї причини вам потрібно бути впевненим, що ви вибрали те, що хочете шукати:
Також ви можете вказати різні типи пошуків:
Ви також можете відзначити поле, щоб зупинити гру під час сканування пам'яті:
У 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