Cheat Engine

Reading time: 11 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Cheat Engine είναι ένα χρήσιμο πρόγραμμα για να βρείτε πού αποθηκεύονται σημαντικές τιμές μέσα στη μνήμη ενός τρέχοντος παιχνιδιού και να τις αλλάξετε.
Όταν το κατεβάσετε και το εκτελέσετε, σας παρουσιάζεται ένα tutorial για το πώς να χρησιμοποιήσετε το εργαλείο. Αν θέλετε να μάθετε πώς να χρησιμοποιήσετε το εργαλείο, συνιστάται να το ολοκληρώσετε.

Τι ψάχνετε;

Αυτό το εργαλείο είναι πολύ χρήσιμο για να βρείτε πού αποθηκεύεται κάποια τιμή (συνήθως ένας αριθμός) στη μνήμη ενός προγράμματος.
Συνήθως οι αριθμοί αποθηκεύονται σε 4bytes μορφή, αλλά μπορείτε επίσης να τους βρείτε σε double ή float μορφές, ή μπορεί να θέλετε να ψάξετε για κάτι διαφορετικό από έναν αριθμό. Για αυτό το λόγο πρέπει να είστε σίγουροι ότι επιλέγετε αυτό που θέλετε να ψάξετε:

Επίσης μπορείτε να υποδείξετε διαφορετικούς τύπους αναζητήσεων:

Μπορείτε επίσης να ελέγξετε το κουτάκι για να σταματήσετε το παιχνίδι ενώ σκανάρετε τη μνήμη:

Συντομεύσεις

Στο Edit --> Settings --> Hotkeys μπορείτε να ορίσετε διαφορετικές συντομεύσεις για διαφορετικούς σκοπούς όπως σταμάτημα του παιχνιδιού (το οποίο είναι πολύ χρήσιμο αν κάποια στιγμή θέλετε να σκανάρετε τη μνήμη). Διαθέσιμες είναι και άλλες επιλογές:

Τροποποίηση της τιμής

Μόλις βρείτε πού είναι η τιμή που ψάχνετε (περισσότερα γι' αυτό στα επόμενα βήματα) μπορείτε να την τροποποιήσετε κάνοντας διπλό κλικ πάνω της, και στη συνέχεια διπλό κλικ στην τιμή της:

Και τελικά σημειώνοντας το τσεκ για να γίνει η τροποποίηση στη μνήμη:

Η αλλαγή στη μνήμη θα εφαρμοστεί αμέσως (σημειώστε ότι μέχρι το παιχνίδι να χρησιμοποιήσει ξανά αυτή την τιμή, η τιμή δεν θα ενημερωθεί στο παιχνίδι).

Αναζητώντας την τιμή

Έτσι, θα υποθέσουμε ότι υπάρχει μια σημαντική τιμή (όπως η ζωή του χρήστη σας) που θέλετε να βελτιώσετε, και ψάχνετε αυτή την τιμή στη μνήμη)

Μέσω μιας γνωστής αλλαγής

Υποθέτοντας ότι ψάχνετε για την τιμή 100, εκτελείτε μια σάρωση ψάχνοντας για αυτή την τιμή και βρίσκετε πολλές συμπτώσεις:

Στη συνέχεια, κάνετε κάτι ώστε η τιμή να αλλάξει, και σταματάτε το παιχνίδι και εκτελείτε μια επόμενη σάρωση:

Το Cheat Engine θα ψάξει για τις τιμές που πήγαν από 100 στη νέα τιμή. Συγχαρητήρια, βρήκατε τη διεύθυνση της τιμής που ψάχνατε, μπορείτε τώρα να την τροποποιήσετε.
Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για να τροποποιήσετε ξανά αυτή την τιμή, και εκτελέστε άλλη μια "επόμενη σάρωση" για να φιλτράρετε τις διευθύνσεις.

Άγνωστη τιμή, γνωστή αλλαγή

Στο σενάριο που δεν γνωρίζετε την τιμή αλλά ξέρετε πώς να την αλλάξετε (και ακόμη και την τιμή της αλλαγής) μπορείτε να ψάξετε για τον αριθμό σας.

Έτσι, ξεκινήστε εκτελώντας μια σάρωση τύπου "Άγνωστη αρχική τιμή":

Στη συνέχεια, κάντε την τιμή να αλλάξει, υποδείξτε πώς η τιμή αλλάχθηκε (στην περίπτωσή μου μειώθηκε κατά 1) και εκτελέστε μια επόμενη σάρωση:

Θα σας παρουσιαστούν όλες οι τιμές που τροποποιήθηκαν με τον επιλεγμένο τρόπο:

Μόλις βρείτε την τιμή σας, μπορείτε να την τροποποιήσετε.

Σημειώστε ότι υπάρχουν πολλές πιθανές αλλαγές και μπορείτε να κάνετε αυτά τα βήματα όσες φορές θέλετε για να φιλτράρετε τα αποτελέσματα:

Τυχαία διεύθυνση μνήμης - Εύρεση του κώδικα

Μέχρι τώρα μάθαμε πώς να βρούμε μια διεύθυνση που αποθηκεύει μια τιμή, αλλά είναι πολύ πιθανό ότι σε διαφορετικές εκτελέσεις του παιχνιδιού αυτή η διεύθυνση είναι σε διαφορετικά μέρη της μνήμης. Έτσι, ας ανακαλύψουμε πώς να βρίσκουμε πάντα αυτή τη διεύθυνση.

Χρησιμοποιώντας μερικά από τα αναφερόμενα κόλπα, βρείτε τη διεύθυνση όπου το τρέχον παιχνίδι σας αποθηκεύει την σημαντική τιμή. Στη συνέχεια (σταματώντας το παιχνίδι αν το επιθυμείτε) κάντε δεξί κλικ στη βρεθείσα διεύθυνση και επιλέξτε "Find out what accesses this address" ή "Find out what writes to this address":

Η πρώτη επιλογή είναι χρήσιμη για να γνωρίζετε ποιες μέρη του κώδικα χρησιμοποιούν αυτή τη διεύθυνση (που είναι χρήσιμο για περισσότερα πράγματα όπως να γνωρίζετε πού μπορείτε να τροποποιήσετε τον κώδικα του παιχνιδιού).
Η δεύτερη επιλογή είναι πιο συγκεκριμένη, και θα είναι πιο χρήσιμη σε αυτή την περίπτωση καθώς μας ενδιαφέρει να γνωρίζουμε από πού γράφεται αυτή η τιμή.

Μόλις επιλέξετε μία από αυτές τις επιλογές, ο debugger θα συνδεθεί με το πρόγραμμα και θα εμφανιστεί ένα νέο κενό παράθυρο. Τώρα, παίξτε το παιχνίδι και τροποποιήστε αυτή τη τιμή (χωρίς να επανεκκινήσετε το παιχνίδι). Το παράθυρο θα πρέπει να είναι γεμάτο με τις διευθύνσεις που τροποποιούν την τιμή:

Τώρα που βρήκατε τη διεύθυνση που τροποποιεί την τιμή μπορείτε να τροποποιήσετε τον κώδικα κατά βούληση (το Cheat Engine σας επιτρέπει να το τροποποιήσετε γρήγορα σε NOPs):

Έτσι, μπορείτε τώρα να το τροποποιήσετε ώστε ο κώδικας να μην επηρεάζει τον αριθμό σας, ή να επηρεάζει πάντα με θετικό τρόπο.

Τυχαία διεύθυνση μνήμης - Εύρεση του δείκτη

Ακολουθώντας τα προηγούμενα βήματα, βρείτε πού βρίσκεται η τιμή που σας ενδιαφέρει. Στη συνέχεια, χρησιμοποιώντας "Find out what writes to this address" ανακαλύψτε ποια διεύθυνση γράφει αυτή την τιμή και κάντε διπλό κλικ πάνω της για να αποκτήσετε την προβολή disassembly:

Στη συνέχεια, εκτελέστε μια νέα σάρωση ψάχνοντας για την τιμή hex μεταξύ "[]" (η τιμή του $edx σε αυτή την περίπτωση):

(Αν εμφανιστούν πολλές, συνήθως χρειάζεστε τη μικρότερη διεύθυνση)
Τώρα, έχουμε βρει τον δείκτη που θα τροποποιεί την τιμή που μας ενδιαφέρει.

Κάντε κλικ στο "Add Address Manually":

Τώρα, κάντε κλικ στο κουτάκι "Pointer" και προσθέστε τη βρεθείσα διεύθυνση στο πλαίσιο κειμένου (σε αυτό το σενάριο, η βρεθείσα διεύθυνση στην προηγούμενη εικόνα ήταν "Tutorial-i386.exe"+2426B0):

(Σημειώστε πώς η πρώτη "Διεύθυνση" συμπληρώνεται αυτόματα από τη διεύθυνση δείκτη που εισάγετε)

Κάντε κλικ στο OK και θα δημιουργηθεί ένας νέος δείκτης:

Τώρα, κάθε φορά που τροποποιείτε αυτή την τιμή, τροποποιείτε την σημαντική τιμή ακόμα κι αν η διεύθυνση μνήμης όπου βρίσκεται η τιμή είναι διαφορετική.

Εισαγωγή Κώδικα

Η εισαγωγή κώδικα είναι μια τεχνική όπου εισάγετε ένα κομμάτι κώδικα στη διαδικασία στόχο, και στη συνέχεια ανακατευθύνετε την εκτέλεση του κώδικα ώστε να περάσει από τον δικό σας γραμμένο κώδικα (όπως να σας δίνει πόντους αντί να τους αφαιρεί).

Έτσι, φανταστείτε ότι έχετε βρει τη διεύθυνση που αφαιρεί 1 από τη ζωή του παίκτη σας:

Κάντε κλικ στο Show disassembler για να αποκτήσετε τον κώδικα disassemble.
Στη συνέχεια, κάντε κλικ CTRL+a για να καλέσετε το παράθυρο Auto assemble και επιλέξτε Template --> Code Injection

Συμπληρώστε τη διεύθυνση της εντολής που θέλετε να τροποποιήσετε (αυτό συνήθως συμπληρώνεται αυτόματα):

Θα παραχθεί ένα πρότυπο:

Έτσι, εισάγετε τον νέο κώδικα assembly στην ενότητα "newmem" και αφαιρέστε τον αρχικό κώδικα από την "originalcode" αν δεν θέλετε να εκτελείται. Σε αυτό το παράδειγμα, ο εισαχθείς κώδικας θα προσθέσει 2 πόντους αντί να αφαιρεί 1:

Κάντε κλικ στο execute και έτσι ο κώδικάς σας θα πρέπει να εισαχθεί στο πρόγραμμα αλλάζοντας τη συμπεριφορά της λειτουργικότητας!

Προχωρημένες δυνατότητες στο Cheat Engine 7.x (2023-2025)

Το Cheat Engine συνεχίζει να εξελίσσεται από την έκδοση 7.0 και έχουν προστεθεί πολλές δυνατότητες ποιότητας ζωής και offensive-reversing που είναι εξαιρετικά χρήσιμες κατά την ανάλυση σύγχρονου λογισμικού (και όχι μόνο παιχνιδιών!). Παρακάτω είναι ένας πολύ συμπυκνωμένος οδηγός πεδίου για τις προσθήκες που πιθανότατα θα χρησιμοποιήσετε κατά τη διάρκεια εργασιών red-team/CTF.

Βελτιώσεις Pointer Scanner 2

  • Pointers must end with specific offsets και ο νέος Deviation slider (≥7.4) μειώνουν σημαντικά τα ψευδώς θετικά όταν ξανασκανάρετε μετά από μια ενημέρωση. Χρησιμοποιήστε το μαζί με τη σύγκριση multi-map (.PTRCompare results with other saved pointer map) για να αποκτήσετε έναν μοναδικό ανθεκτικό βασικό δείκτη σε μόλις λίγα λεπτά.
  • Συντόμευση μαζικού φίλτρου: μετά την πρώτη σάρωση πατήστε Ctrl+A → Space για να επισημάνετε τα πάντα, στη συνέχεια Ctrl+I (αντίστροφα) για να αποεπιλέξετε διευθύνσεις που απέτυχαν στη σάρωση.

Ultimap 3 – Intel PT tracing

Από την 7.5, το παλιό Ultimap επανασχεδιάστηκε πάνω από το Intel Processor-Trace (IPT). Αυτό σημαίνει ότι μπορείτε τώρα να καταγράφετε κάθε κλάδο που παίρνει ο στόχος χωρίς single-stepping (μόνο σε user-mode, δεν θα ενεργοποιήσει τις περισσότερες αντι-debug gadgets).

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

Μετά από μερικά δευτερόλεπτα, σταματήστε την καταγραφή και δεξί κλικ → Αποθήκευση λίστας εκτέλεσης σε αρχείο. Συνδυάστε τις διευθύνσεις κλάδου με μια συνεδρία Find out what addresses this instruction accesses για να εντοπίσετε hotspots λογικής παιχνιδιού υψηλής συχνότητας εξαιρετικά γρήγορα.

Πρότυπα jmp / auto-patch 1 byte

Η έκδοση 7.5 εισήγαγε ένα one-byte JMP stub (0xEB) που εγκαθιστά έναν χειριστή SEH και τοποθετεί ένα INT3 στην αρχική τοποθεσία. Δημιουργείται αυτόματα όταν χρησιμοποιείτε Auto Assembler → Template → Code Injection σε εντολές που δεν μπορούν να διορθωθούν με ένα 5-byte σχετικό άλμα. Αυτό καθιστά δυνατές τις “σφιχτές” συνδέσεις μέσα σε πακεταρισμένες ή περιορισμένες σε μέγεθος ρουτίνες.

Stealth επιπέδου Kernel με DBVM (AMD & Intel)

DBVM είναι ο ενσωματωμένος Type-2 hypervisor του CE. Οι πρόσφατες εκδόσεις πρόσθεσαν τελικά AMD-V/SVM υποστήριξη ώστε να μπορείτε να εκτελέσετε Driver → Load DBVM σε hosts Ryzen/EPYC. Το DBVM σας επιτρέπει:

  1. Δημιουργία υλικών σημείων διακοπής αόρατων σε ελέγχους Ring-3/anti-debug.
  2. Ανάγνωση/γραφή περιοχών μνήμης πυρήνα που είναι σελίδες ή προστατευμένες ακόμη και όταν ο οδηγός χρήστη είναι απενεργοποιημένος.
  3. Εκτέλεση παρακάμψεων επιθέσεων χρονισμού χωρίς VM-EXIT (π.χ. ερώτημα rdtsc από τον hypervisor).

Συμβουλή: Το DBVM θα αρνηθεί να φορτώσει όταν είναι ενεργοποιημένο το HVCI/Memory-Integrity στα Windows 11 → απενεργοποιήστε το ή εκκινήστε έναν αφιερωμένο VM-host.

Απομακρυσμένη / διαλειτουργική αποσφαλμάτωση με ceserver

Το CE τώρα περιλαμβάνει μια πλήρη αναθεώρηση του ceserver και μπορεί να συνδεθεί μέσω TCP σε Linux, Android, macOS & iOS στόχους. Ένα δημοφιλές fork ενσωματώνει το Frida για να συνδυάσει τη δυναμική εργαλειακή υποστήριξη με το GUI του CE – ιδανικό όταν χρειάζεστε να διορθώσετε παιχνίδια Unity ή Unreal που τρέχουν σε τηλέφωνο:

# 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

Για τη γέφυρα Frida δείτε bb33bb/frida-ceserver στο GitHub.

Άλλα αξιοσημείωτα εργαλεία

  • Patch Scanner (MemView → Tools) – ανιχνεύει απροσδόκητες αλλαγές κώδικα σε εκτελέσιμες ενότητες; χρήσιμο για ανάλυση κακόβουλου λογισμικού.
  • Structure Dissector 2 – drag-an-address → Ctrl+D, στη συνέχεια Guess fields για αυτόματη αξιολόγηση C-δομών.
  • .NET & Mono Dissector – βελτιωμένη υποστήριξη παιχνιδιών Unity; καλέστε μεθόδους απευθείας από την κονσόλα CE Lua.
  • Big-Endian custom types – αντίστροφη σάρωση/επεξεργασία byte order (χρήσιμο για κονσόλες emulator και buffers δικτυακών πακέτων).
  • Autosave & tabs για παράθυρα AutoAssembler/Lua, συν reassemble() για επανασύνθεση πολλαπλών γραμμών εντολών.

Σημειώσεις εγκατάστασης & OPSEC (2024-2025)

  • Ο επίσημος εγκαταστάτης είναι τυλιγμένος με InnoSetup ad-offers (RAV κ.λπ.). Πάντα κάντε κλικ στο Decline ή συντάξτε από πηγή για να αποφύγετε PUPs. Οι AVs θα επισημάνουν ακόμα το cheatengine.exe ως HackTool, κάτι που είναι αναμενόμενο.
  • Σύγχρονοι οδηγοί ανίχνευσης απάτης (EAC/Battleye, ACE-BASE.sys, mhyprot2.sys) ανιχνεύουν την κλάση παραθύρου του CE ακόμα και όταν έχει μετονομαστεί. Εκτελέστε την αντίγραφο αναστροφής σας μέσα σε μια αναλώσιμη VM ή μετά την απενεργοποίηση του δικτυακού παιχνιδιού.
  • Εάν χρειάζεστε μόνο πρόσβαση σε user-mode επιλέξτε Settings → Extra → Kernel mode debug = off για να αποφύγετε τη φόρτωση του μη υπογεγραμμένου οδηγού του CE που μπορεί να προκαλέσει BSOD σε Windows 11 24H2 Secure-Boot.

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks