Cheat Engine

Reading time: 10 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Cheat Engine je koristan program za pronalaženje gde su važni podaci sačuvani unutar memorije pokrenute igre i njihovu promenu.
Kada ga preuzmete i pokrenete, prikazuje vam se tutorijal o tome kako koristiti alat. Ako želite da naučite kako da koristite alat, toplo se preporučuje da ga završite.

Šta tražite?

Ovaj alat je veoma koristan za pronalaženje gde je neki podatak (obično broj) sačuvan u memoriji programa.
Obično se brojevi čuvaju u 4bajtnoj formi, ali ih možete pronaći i u double ili float formatima, ili možda želite da tražite nešto drugačije od broja. Iz tog razloga, morate biti sigurni da izaberete ono što želite da tražite:

Takođe možete označiti različite tipove pretraga:

Možete takođe označiti opciju da zaustavite igru dok skenirate memoriju:

Prečice

U Edit --> Settings --> Hotkeys možete postaviti različite prečice za različite svrhe kao što su zaustavljanje igre (što je veoma korisno ako u nekom trenutku želite da skenirate memoriju). Druge opcije su dostupne:

Modifikovanje vrednosti

Kada pronađete gde je vrednost koju tražite (više o tome u sledećim koracima), možete je modifikovati dvostrukim klikom na nju, a zatim dvostrukim klikom na njenu vrednost:

I konačno označite kvačicu da biste izvršili modifikaciju u memoriji:

Promena u memoriji će odmah biti primenjena (imajte na umu da dok igra ne koristi ovu vrednost ponovo, vrednost neće biti ažurirana u igri).

Traženje vrednosti

Dakle, pretpostavićemo da postoji važna vrednost (kao što je život vašeg korisnika) koju želite da poboljšate, i tražite ovu vrednost u memoriji)

Kroz poznatu promenu

Pretpostavljajući da tražite vrednost 100, izvršite skeniranje tražeći tu vrednost i pronađite mnogo podudaranja:

Zatim, uradite nešto tako da vrednost promeni, i zaustavite igru i izvršite sledeće skeniranje:

Cheat Engine će tražiti vrednosti koje su prešle sa 100 na novu vrednost. Čestitam, pronašli ste adresu vrednosti koju ste tražili, sada je možete modifikovati.
Ako još uvek imate nekoliko vrednosti, uradite nešto da ponovo modifikujete tu vrednost, i izvršite još jedno "sledeće skeniranje" da filtrirate adrese.

Nepoznata vrednost, poznata promena

U scenariju kada ne znate vrednost ali znate kako da je promenite (i čak vrednost promene) možete tražiti svoj broj.

Dakle, počnite tako što ćete izvršiti skeniranje tipa "Nepoznata početna vrednost":

Zatim, promenite vrednost, navedite kako se vrednost promenila (u mom slučaju je smanjena za 1) i izvršite sledeće skeniranje:

Bićete prikazani sve vrednosti koje su modifikovane na odabrani način:

Kada pronađete svoju vrednost, možete je modifikovati.

Imajte na umu da postoji mnogo mogućih promena i možete ponavljati ove korake koliko god želite da filtrirate rezultate:

Nasumična adresa u memoriji - Pronalaženje koda

Do sada smo naučili kako da pronađemo adresu koja čuva vrednost, ali je veoma verovatno da će u različitim izvršavanjima igre ta adresa biti na različitim mestima u memoriji. Dakle, hajde da saznamo kako da uvek pronađemo tu adresu.

Koristeći neke od pomenutih trikova, pronađite adresu gde vaša trenutna igra čuva važnu vrednost. Zatim (zaustavljajući igru ako želite) uradite desni klik na pronađenu adresu i izaberite "Find out what accesses this address" ili "Find out what writes to this address":

Prva opcija je korisna da saznate koje delove koda koriste ovu adresu (što je korisno za više stvari kao što je znanje gde možete modifikovati kod igre).
Druga opcija je više specifična, i biće korisnija u ovom slučaju jer nas zanima da saznamo odakle se ova vrednost piše.

Kada odaberete jednu od tih opcija, debugger će biti priključen na program i novi prazan prozor će se pojaviti. Sada, igrajte igru i modifikujte tu vrednost (bez ponovnog pokretanja igre). Prozor bi trebao biti ispunjen sa adresama koje modifikuju vrednost:

Sada kada ste pronašli adresu koja modifikuje vrednost, možete modifikovati kod po svojoj želji (Cheat Engine vam omogućava da ga brzo modifikujete za NOPs):

Dakle, sada možete modifikovati tako da kod ne utiče na vaš broj, ili će uvek pozitivno uticati.

Nasumična adresa u memoriji - Pronalaženje pokazivača

Prateći prethodne korake, pronađite gde se nalazi vrednost koja vas zanima. Zatim, koristeći "Find out what writes to this address" saznajte koja adresa piše ovu vrednost i dvostruko kliknite na nju da biste dobili prikaz disasembly-a:

Zatim, izvršite novo skeniranje tražeći heksadecimalnu vrednost između "[]" (vrednost $edx u ovom slučaju):

(Ako se pojavi više njih, obično vam je potrebna najmanja adresa)
Sada smo pronašli pokazivač koji će modifikovati vrednost koja nas zanima.

Kliknite na "Add Address Manually":

Sada, kliknite na kvačicu "Pointer" i dodajte pronađenu adresu u tekstualno polje (u ovom scenariju, pronađena adresa na prethodnoj slici je bila "Tutorial-i386.exe"+2426B0):

(Imajte na umu kako je prva "Adresa" automatski popunjena iz adrese pokazivača koju ste uneli)

Kliknite na OK i biće kreiran novi pokazivač:

Sada, svaki put kada modifikujete tu vrednost, modifikujete važnu vrednost čak i ako je adresa u memoriji gde se vrednost nalazi drugačija.

Injekcija koda

Injekcija koda je tehnika gde injektujete deo koda u ciljni proces, a zatim preusmeravate izvršenje koda da ide kroz vaš vlastiti napisani kod (kao što je davanje poena umesto oduzimanja).

Dakle, zamislite da ste pronašli adresu koja oduzima 1 od života vašeg igrača:

Kliknite na Prikaži disassembler da biste dobili disassemble kod.
Zatim, kliknite CTRL+a da pozovete prozor Auto assemble i izaberite Template --> Code Injection

Popunite adresu instrukcije koju želite da modifikujete (ovo se obično automatski popunjava):

Generisaće se šablon:

Dakle, umetnite svoj novi assembly kod u sekciju "newmem" i uklonite originalni kod iz "originalcode" ako ne želite da se izvršava. U ovom primeru, injektovani kod će dodati 2 poena umesto oduzimanja 1:

Kliknite na izvrši i tako dalje i vaš kod bi trebao biti injektovan u program menjajući ponašanje funkcionalnosti!

Napredne funkcije u Cheat Engine 7.x (2023-2025)

Cheat Engine je nastavio da se razvija od verzije 7.0 i nekoliko funkcija za poboljšanje kvaliteta života i ofanzivnog obrnute inženjeringa je dodato što je izuzetno korisno prilikom analize modernog softvera (i ne samo igara!). Ispod je veoma sažet vodič za dodatke koje ćete najverovatnije koristiti tokom red-team/CTF rada.

Poboljšanja Pointer Scanner 2

  • Pokazivači moraju završavati sa specifičnim ofsetima i novi Deviation klizač (≥7.4) značajno smanjuje lažne pozitivne rezultate kada ponovo skenirate nakon ažuriranja. Koristite ga zajedno sa višekratnom mapom poređenja (.PTRPoredi rezultate sa drugim sačuvanim mapama pokazivača) da dobijete jedan otporan osnovni pokazivač za samo nekoliko minuta.
  • Prečica za filtriranje u grupi: nakon prvog skeniranja pritisnite Ctrl+A → Space da označite sve, zatim Ctrl+I (invert) da poništite selekciju adresa koje nisu prošle ponovo skeniranje.

Ultimap 3 – Intel PT praćenje

Od 7.5 stari Ultimap je ponovo implementiran na osnovu Intel Processor-Trace (IPT). To znači da sada možete snimiti svaku granu koju cilj preuzima bez pojedinačnog koraka (samo korisnički režim, neće aktivirati većinu anti-debug uređaja).

Memory View → Tools → Ultimap 3 → check «Intel PT»
Select number of buffers → Start

Nakon nekoliko sekundi, zaustavite snimanje i desni klik → Sačuvaj listu izvršenja u datoteku. Kombinujte adrese grana sa sesijom Find out what addresses this instruction accesses da biste veoma brzo locirali visoko-frekventne tačke logike igre.

1-bajtni jmp / auto-patch šabloni

Verzija 7.5 je uvela jedan-bajtni JMP stub (0xEB) koji instalira SEH handler i postavlja INT3 na originalnu lokaciju. Automatski se generiše kada koristite Auto Assembler → Template → Code Injection na instrukcijama koje ne mogu biti patch-ovane sa 5-bajtni relativnim skokom. Ovo omogućava “uske” hook-ove unutar pakovanih ili veličinski ograničenih rutina.

Kernel-level stealth sa DBVM (AMD & Intel)

DBVM je ugrađeni Type-2 hipervizor CE-a. Nedavne verzije konačno su dodale AMD-V/SVM podršku tako da možete pokrenuti Driver → Load DBVM na Ryzen/EPYC hostovima. DBVM vam omogućava:

  1. Kreiranje hardverskih breakpoint-a nevidljivih za Ring-3/anti-debug provere.
  2. Čitanje/pisanje paginabilnih ili zaštićenih kernel memorijskih regiona čak i kada je drajver u korisničkom režimu onemogućen.
  3. Izvođenje VM-EXIT-less zaobilaženja napada na vreme (npr. upit rdtsc iz hipervizora).

Savjet: DBVM će odbiti da se učita kada je HVCI/Memory-Integrity omogućen na Windows 11 → isključite ga ili pokrenite posvećen VM-host.

Daljinsko / cross-platform debagovanje sa ceserver

CE sada isporučuje potpuno prepisanu verziju ceserver i može se povezati preko TCP sa Linux, Android, macOS & iOS ciljevima. Popularni fork integriše Frida da kombinuje dinamičku instrumentaciju sa CE-ovim GUI-jem – idealno kada treba da patch-ujete Unity ili Unreal igre koje se pokreću na telefonu:

# on the target (arm64)
./ceserver_arm64 &
# on the analyst workstation
adb forward tcp:52736 tcp:52736   # (or ssh tunnel)
Cheat Engine → "Network" icon → Host = localhost → Connect

Za Frida most pogledajte bb33bb/frida-ceserver na GitHub-u.

Ostali značajni alati

  • Patch Scanner (MemView → Tools) – detektuje neočekivane promene koda u izvršnim sekcijama; koristan za analizu malvera.
  • Structure Dissector 2 – prevucite-adresu → Ctrl+D, zatim Guess fields za automatsku evaluaciju C-struktura.
  • .NET & Mono Dissector – poboljšana podrška za Unity igre; pozivajte metode direktno iz CE Lua konzole.
  • Big-Endian prilagođeni tipovi – obrnuti redosled bajtova skeniranje/uređivanje (korisno za emulatora konzola i mrežne pakete).
  • Autosave & tabs za AutoAssembler/Lua prozore, plus reassemble() za prepisivanje višelinijskih instrukcija.

Instalacija & OPSEC napomene (2024-2025)

  • Zvanični instalater je obavijen InnoSetup oglasima (RAV itd.). Uvek kliknite Decline ili kompajlirajte iz izvora da izbegnete PUP-ove. AV-ovi će i dalje označiti cheatengine.exe kao HackTool, što je očekivano.
  • Moderni anti-cheat drajveri (EAC/Battleye, ACE-BASE.sys, mhyprot2.sys) detektuju CE-ovu klasu prozora čak i kada je preimenovana. Pokrenite svoju verziju za obrnuto inženjerstvo unutar jednokratne VM ili nakon onemogućavanja mrežne igre.
  • Ako vam je potrebna samo pristup korisničkom režimu izaberite Settings → Extra → Kernel mode debug = off da izbegnete učitavanje CE-ovog nepodpisanog drajvera koji može izazvati BSOD na Windows 11 24H2 Secure-Boot.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks