diff --git a/src/reversing/reversing-tools-basic-methods/cheat-engine.md b/src/reversing/reversing-tools-basic-methods/cheat-engine.md index 0bf2bb625..2bab377f6 100644 --- a/src/reversing/reversing-tools-basic-methods/cheat-engine.md +++ b/src/reversing/reversing-tools-basic-methods/cheat-engine.md @@ -18,19 +18,19 @@ ![](<../../images/image (311).png>) -Μπορείτε επίσης να ελέγξετε το κουτάκι για **να σταματήσετε το παιχνίδι κατά τη σάρωση της μνήμης**: +Μπορείτε επίσης να ελέγξετε το κουτάκι για να **σταματήσετε το παιχνίδι ενώ σκανάρετε τη μνήμη**: ![](<../../images/image (1052).png>) ### Συντομεύσεις -Στο _**Edit --> Settings --> Hotkeys**_ μπορείτε να ορίσετε διαφορετικές **συντομεύσεις** για διαφορετικούς σκοπούς όπως **να σταματήσετε** το **παιχνίδι** (το οποίο είναι πολύ χρήσιμο αν σε κάποια στιγμή θέλετε να σαρώσετε τη μνήμη). Διαθέσιμες είναι και άλλες επιλογές: +Στο _**Edit --> Settings --> Hotkeys**_ μπορείτε να ορίσετε διαφορετικές **συντομεύσεις** για διαφορετικούς σκοπούς όπως **σταμάτημα** του **παιχνιδιού** (το οποίο είναι πολύ χρήσιμο αν κάποια στιγμή θέλετε να σκανάρετε τη μνήμη). Διαθέσιμες είναι και άλλες επιλογές: ![](<../../images/image (864).png>) ## Τροποποίηση της τιμής -Μόλις **βρείτε** πού είναι η **τιμή** που ψάχνετε (περισσότερα για αυτό στα επόμενα βήματα) μπορείτε να **την τροποποιήσετε** κάνοντας διπλό κλικ πάνω της, και στη συνέχεια διπλό κλικ στην τιμή της: +Μόλις **βρείτε** πού είναι η **τιμή** που ψάχνετε (περισσότερα γι' αυτό στα επόμενα βήματα) μπορείτε να **την τροποποιήσετε** κάνοντας διπλό κλικ πάνω της, και στη συνέχεια διπλό κλικ στην τιμή της: ![](<../../images/image (563).png>) @@ -42,7 +42,7 @@ ## Αναζητώντας την τιμή -Έτσι, θα υποθέσουμε ότι υπάρχει μια σημαντική τιμή (όπως η ζωή του χρήστη σας) που θέλετε να βελτιώσετε, και ψάχνετε για αυτή την τιμή στη μνήμη) +Έτσι, θα υποθέσουμε ότι υπάρχει μια σημαντική τιμή (όπως η ζωή του χρήστη σας) που θέλετε να βελτιώσετε, και ψάχνετε αυτή την τιμή στη μνήμη) ### Μέσω μιας γνωστής αλλαγής @@ -90,7 +90,7 @@ _Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για Η **πρώτη επιλογή** είναι χρήσιμη για να γνωρίζετε ποιες **μέρη** του **κώδικα** **χρησιμοποιούν** αυτή τη **διεύθυνση** (που είναι χρήσιμο για περισσότερα πράγματα όπως **να γνωρίζετε πού μπορείτε να τροποποιήσετε τον κώδικα** του παιχνιδιού).\ Η **δεύτερη επιλογή** είναι πιο **συγκεκριμένη**, και θα είναι πιο χρήσιμη σε αυτή την περίπτωση καθώς μας ενδιαφέρει να γνωρίζουμε **από πού γράφεται αυτή η τιμή**. -Μόλις επιλέξετε μία από αυτές τις επιλογές, ο **debugger** θα **συνδεθεί** με το πρόγραμμα και θα εμφανιστεί ένα νέο **κενό παράθυρο**. Τώρα, **παίξτε** το **παιχνίδι** και **τροποποιήστε** αυτή την **τιμή** (χωρίς να επανεκκινήσετε το παιχνίδι). Το **παράθυρο** θα πρέπει να **γεμίσει** με τις **διευθύνσεις** που **τροποποιούν** την **τιμή**: +Μόλις επιλέξετε μία από αυτές τις επιλογές, ο **debugger** θα **συνδεθεί** με το πρόγραμμα και θα εμφανιστεί ένα νέο **κενό παράθυρο**. Τώρα, **παίξτε** το **παιχνίδι** και **τροποποιήστε** αυτή τη **τιμή** (χωρίς να επανεκκινήσετε το παιχνίδι). Το **παράθυρο** θα πρέπει να είναι **γεμάτο** με τις **διευθύνσεις** που **τροποποιούν** την **τιμή**: ![](<../../images/image (91).png>) @@ -102,7 +102,7 @@ _Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για ### Τυχαία διεύθυνση μνήμης - Εύρεση του δείκτη -Ακολουθώντας τα προηγούμενα βήματα, βρείτε πού βρίσκεται η τιμή που σας ενδιαφέρει. Στη συνέχεια, χρησιμοποιώντας "**Find out what writes to this address**" ανακαλύψτε ποια διεύθυνση γράφει αυτή την τιμή και κάντε διπλό κλικ πάνω της για να αποκτήσετε την προβολή αποσυναρμολόγησης: +Ακολουθώντας τα προηγούμενα βήματα, βρείτε πού βρίσκεται η τιμή που σας ενδιαφέρει. Στη συνέχεια, χρησιμοποιώντας "**Find out what writes to this address**" ανακαλύψτε ποια διεύθυνση γράφει αυτή την τιμή και κάντε διπλό κλικ πάνω της για να αποκτήσετε την προβολή disassembly: ![](<../../images/image (1039).png>) @@ -121,7 +121,7 @@ _Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για ![](<../../images/image (392).png>) -(Σημειώστε πώς η πρώτη "Διεύθυνση" συμπληρώνεται αυτόματα από τη διεύθυνση του δείκτη που εισάγετε) +(Σημειώστε πώς η πρώτη "Διεύθυνση" συμπληρώνεται αυτόματα από τη διεύθυνση δείκτη που εισάγετε) Κάντε κλικ στο OK και θα δημιουργηθεί ένας νέος δείκτης: @@ -137,7 +137,7 @@ _Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για ![](<../../images/image (203).png>) -Κάντε κλικ στο Show disassembler για να αποκτήσετε τον **αποσυναρμολογημένο κώδικα**.\ +Κάντε κλικ στο Show disassembler για να αποκτήσετε τον **κώδικα disassemble**.\ Στη συνέχεια, κάντε κλικ **CTRL+a** για να καλέσετε το παράθυρο Auto assemble και επιλέξτε _**Template --> Code Injection**_ ![](<../../images/image (902).png>) @@ -150,14 +150,68 @@ _Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για ![](<../../images/image (944).png>) -Έτσι, εισάγετε τον νέο κώδικα assembly στην ενότητα "**newmem**" και αφαιρέστε τον αρχικό κώδικα από την "**originalcode**" αν δεν θέλετε να εκτελείται. Σε αυτό το παράδειγμα, ο εισαγόμενος κώδικας θα προσθέσει 2 πόντους αντί να αφαιρεί 1: +Έτσι, εισάγετε τον νέο κώδικα assembly στην ενότητα "**newmem**" και αφαιρέστε τον αρχικό κώδικα από την "**originalcode**" αν δεν θέλετε να εκτελείται. Σε αυτό το παράδειγμα, ο εισαχθείς κώδικας θα προσθέσει 2 πόντους αντί να αφαιρεί 1: ![](<../../images/image (521).png>) **Κάντε κλικ στο 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 (`.PTR` → *Compare 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. + +--- + ## **Αναφορές** -- **Cheat Engine tutorial, ολοκληρώστε το για να μάθετε πώς να ξεκινήσετε με το Cheat Engine** +- [Cheat Engine 7.5 release notes (GitHub)](https://github.com/cheat-engine/cheat-engine/releases/tag/7.5) +- [frida-ceserver cross-platform bridge](https://github.com/bb33bb/frida-ceserver-Mac-and-IOS) +- **Cheat Engine tutorial, complete it to learn how to start with Cheat Engine** {{#include ../../banners/hacktricks-training.md}}