# Cheat Engine {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} [**Cheat Engine**](https://www.cheatengine.org/downloads.php) 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, **dobijate** **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? ![](<../../.gitbook/assets/image (762).png>) 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 **4bajta** formatu, ali ih možete pronaći i u **double** ili **float** formatima, ili možda želite da tražite nešto **drugo osim broja**. Iz tog razloga, morate biti sigurni da **izaberete** ono što želite da **tražite**: ![](<../../.gitbook/assets/image (324).png>) Takođe možete označiti **različite** tipove **pretraga**: ![](<../../.gitbook/assets/image (311).png>) Možete takođe označiti opciju da **zaustavite igru dok skenirate memoriju**: ![](<../../.gitbook/assets/image (1052).png>) ### 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: ![](<../../.gitbook/assets/image (864).png>) ## Modifikovanje vrednosti Kada **pronađete** gde je **vrednost** koju tražite (više o ovome u sledećim koracima), možete je **modifikovati** dvostrukim klikom na nju, a zatim dvostrukim klikom na njenu vrednost: ![](<../../.gitbook/assets/image (563).png>) I konačno **označite** kvačicu da biste izvršili modifikaciju u memoriji: ![](<../../.gitbook/assets/image (385).png>) **Promena** u **memoriji** će odmah biti **primenjena** (napomena: 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: ![](<../../.gitbook/assets/image (108).png>) Zatim, uradite nešto tako da **vrednost promeni**, i **zaustavite** igru i **izvršite** **sledeće skeniranje**: ![](<../../.gitbook/assets/image (684).png>) 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**": ![](<../../.gitbook/assets/image (890).png>) Zatim, promenite vrednost, navedite **kako** se **vrednost** **promenila** (u mom slučaju je smanjena za 1) i izvršite **sledeće skeniranje**: ![](<../../.gitbook/assets/image (371).png>) Bićete predstavljeni **sve vrednosti koje su modifikovane na odabrani način**: ![](<../../.gitbook/assets/image (569).png>) Kada pronađete svoju vrednost, možete je modifikovati. Napomena da postoji **mnogo mogućih promena** i možete ponavljati ove **korake koliko god želite** da filtrirate rezultate: ![](<../../.gitbook/assets/image (574).png>) ### 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 "**Saznajte šta pristupa ovoj adresi**" ili "**Saznajte šta piše na ovu adresu**": ![](<../../.gitbook/assets/image (1067).png>) **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 izaberete 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**: ![](<../../.gitbook/assets/image (91).png>) Sada kada ste pronašli adresu koja modifikuje vrednost, možete **modifikovati kod po vašoj želji** (Cheat Engine vam omogućava da ga brzo modifikujete za NOPs): ![](<../../.gitbook/assets/image (1057).png>) 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 "**Saznajte šta piše na ovu adresu**" saznajte koja adresa piše ovu vrednost i dvostruko kliknite na nju da biste dobili disassemblirani prikaz: ![](<../../.gitbook/assets/image (1039).png>) Zatim, izvršite novo skeniranje **tražeći heksadecimalnu vrednost između "\[]"** (vrednost $edx u ovom slučaju): ![](<../../.gitbook/assets/image (994).png>) (_Ako se pojavi više njih, obično vam je potrebna ona sa najmanjom adresom_)\ Sada smo **pronašli pokazivač koji će modifikovati vrednost koja nas zanima**. Kliknite na "**Dodaj adresu ručno**": ![](<../../.gitbook/assets/image (990).png>) Sada, kliknite na kvačicu "Pokazivač" i dodajte pronađenu adresu u tekstualno polje (u ovom scenariju, pronađena adresa na prethodnoj slici je bila "Tutorial-i386.exe"+2426B0): ![](<../../.gitbook/assets/image (392).png>) (Napomena kako je prva "Adresa" automatski popunjena iz adrese pokazivača koju ste uneli) Kliknite na OK i novi pokazivač će biti kreiran: ![](<../../.gitbook/assets/image (308).png>) 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 prođe 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: ![](<../../.gitbook/assets/image (203).png>) Kliknite na Prikaži disassembler da biste dobili **disassemblirani kod**.\ Zatim, kliknite **CTRL+a** da pozovete prozor Auto assemble i izaberite _**Template --> Injekcija koda**_ ![](<../../.gitbook/assets/image (902).png>) Popunite **adresu instrukcije koju želite da modifikujete** (ovo se obično automatski popunjava): ![](<../../.gitbook/assets/image (744).png>) Generisaće se šablon: ![](<../../.gitbook/assets/image (944).png>) Dakle, umetnite svoj novi assembly kod u sekciju "**newmem**" i uklonite originalni kod iz sekcije "**originalcode**" ako ne želite da se izvršava\*\*.\*\* U ovom primeru, injektovani kod će dodati 2 poena umesto oduzimanja 1: ![](<../../.gitbook/assets/image (521).png>) **Kliknite na izvrši i tako dalje i vaš kod bi trebao biti injektovan u program menjajući ponašanje funkcionalnosti!** ## **Reference** * **Cheat Engine tutorijal, završite ga da biste naučili kako da počnete sa Cheat Engine**