Site hosted by Angelfire.com: Build your free website today!

Cracking Grand Theft Auto : Vice-City

Cd Check !

by PhotoPaul

ΕΚΘΕΣΗ ΓΙΑ ΤΟ 1ο PROJECT


Η έκθεση αυτή του PhotoPaul για το πως να ξεπεράσετε το cd check του Grand Theft Auto:Vice City
γράφεται φυσικά στα πλαίσια του πρώτου project της M.a.s.k. που αφορά τα cd checks και θα έχει
σίγουρα μεγάλη χρησιμότητα για εσάς για 2 κυρίως λόγους.Πρώτον,ο PhotoPaul προσπαθεί να 
ξεκαθαρίσει τι πρέπει να ψάχνετε σε κάθε cd check που κοιτάτε και αυτό είναι που έχει την 
μεγαλύτερη σημασία.Δεύτερον,χρησιμοποιεί μία ωραία και όχι τόσο γνωστή τεχνική που λέγεται
backtracing.Βρίσκει,δηλαδή,εισάγωντας ένα ret τον caller της διαδικασίας που εξετάζει,ώστε να
αντιστρέψει ευκολότερα τον έλεγχο του.Νέες τεχνικές και έξυπνο cracking στην καινούρια
έκθεση του PhotoPaul,που θα απολαύσετε αμέσως τώρα...


Εργαλεία:  OllyDebug

Δυσκολία: Εύκολο - Μέτριο

 

  Γεια σας επίδοξοι knowledge-hunters!Στόχος μας θα είναι να "εξαφανίσουμε" το CD-Check που 
κάνει το παιχνίδι "Grand Theft Auto Vice City".Μια και αυτό είναι το #1 εκπαιδευτικό project της 
ανανεωμένης MASK, θα ξεκινήσουμε με μερικά απλά πραγματάκια,πράγμα που σημαίνει πως δε θα 
αναλύσουμε την προστασία σε βάθος,ούτε η λύση που θα προσφέρουμε θα είναι η πιο ποιοτική λύση. 
Θα είναι όμως η ευκολότερη και η γρηγορότερη,ή αν το θέλετε αλλιώς: Η λογικότερη.Θεωρώ πως 
έχετε μια κάποια βασική γνώση των εργαλείων που θα χρησιμοποιήσετε,οπότε δε θα κάνω λεπτομερή
περιγραφή των κινήσεων καθώς η λύση μπορεί να εφαρμοστεί με οποιαδήποτε εργαλεία χρησιμοποιήτε.
Προσωπικά σας προτείνω τον OllyDebugger ο οποίος μπορεί να χρησιμοποιηθεί και σαν patcher για να 
κάνουμε μόνιμη όποια αλλαγή κρίνουμε απαραίτητη.Αρχικά τρέξτε το παιχνίδι και προσπεράστε τα 2 
εισαγωγικά videaκια.Αμέσως μετά θα εμφανιστεί στην οθόνη σας ένα μήνυμα που θα σας ενημερώνει 
πως δεν μπορεί να εντοπιστεί το CD του παιχνιδιού.Για να μην μπορεί να το εντοπίσει σημαίνει πως 
το ψάχνει.


Q&A (Ερωτήσεις και απαντήσεις)


Q: Πως ψάχνει το παιχνίδι για να βρει το CD του?
A: Υπάρχουν διάφοροι τρόποι για να καταλάβει το παιχνίδι αν υπάρχει κάποιο CD στο Drive,αν έχει 
το σωστό label,αν περιέχει τα σωστά αρχεία κ.λ.π. Αυτό το διαπιστώνει καλώντας από το 
λειτουργικό, τα σχετικά APIs.

Q: Ποια είναι αυτά τα APIs?
A: Για τα CD checks,η πιθανότερη επιλογή του προγραμματιστή είναι να χρησιμοποιήσει ένα API 
του kernel32.dll, το GetDrivetypeA.

Q: Τι παραμέτρους παίρνει το GetDriveTypeA και τι επιστρέφει?
A: UINT GetDriveType(LPCTSTR lpRootPathName);   
Πράγμα που σημαίνει πως παίρνει ως μοναδική του παράμετρο έναν pointer(δείκτη) σε κάποιο 
string το οποίο είναι ένα DriveLetter π.χ. "C:\",και πως επιστρέφει έναν integer(ακέραιο).


Q: Ποια είναι η χρήση του GetDriveTypeA?
A: Το API GetDriveType μας γνωστοποιεί τον τύπο του Drive για το οποίο το ρωτάμε.

Q: Πως μεταφράζεται ο integer που μας επιστρέφει?
A: --------------------
   |0==DRIVE_UNKNOWN |
   |1==DRIVE_NO_ROOT_DIR|
   |2==DRIVE_REMOVABLE |
   |3==DRIVE_FIXED |
   |4==DRIVE_REMOTE |
   |5==DRIVE_CDROM |
   |6==DRIVE_RAMDISK |
   --------------------

Q: Πως θα ξέρουμε αν το GetDriveTypeA χρησιμοποιείται από το συγκεκριμένο παιχνίδι?
A: Ρίξτε μια ματία στο ImportTable του εκτελέσιμου του παιχνιδιού. Αν έχει reference σε αυτό το 
API, 70% θα τo χρησιμοποιεί για κάποιας μορφής CD-Check.

 


Getting our hands dirty


  Πλέον έχουμε ό,τι πληροφορίες χρειαζόμαστε,οπότε ας τελειώνουμε με αυτήν την ιστορία...Βάλτε 
ένα breakpoint στο API kernel32.GetDriveTypeA και αφήστε το παιχνίδι να τρέξει.Αφού 
προσπεράσετε τα 2 videaκια,σε μερικά milliseconds η εκτέλεση θα σταματήσει στο breakpoint,δηλαδή 
στην πρώτη εντολή του API GetDriveType.Προχωρήστε μέχρι το πρώτο ret και εκτελέστε το ώστε να 
πάτε μία function(λειτουργία) πάνω.Τώρα βρίσκεστε μία εντολή κάτω από την

005D7976 CALL DWORD PTR [<&kernel32.GetDriveTypeA>]

   Στον eax βρίσκεται η τιμή που επέστρεψε το GetDriveTypeA,αλλά δε θα ασχοληθούμε μαζί της αυτή 
τη φορά.Προσπαθήστε να συνεχίσετε την εκτέλεση μέχρι το επόμενο ret.Μόλις απογοητευτείτε(καθώς
το πρόγραμμα είναι σε ένα loop που ελέγχει συνεχώς μήπως συμμορφωθήκατε και βάλατε μέσα το CD)
βάλτε το μυαλό σας να σκεφτεί:

  Θέλουμε να πάμε ένα επίπεδο πιο πάνω για να δούμε από που ήρθαμε εδώ.Δε φτάνουμε ποτέ σε ένα 
ret για να μας πάει.Το stack(στοίβα) δεν μπορεί να βοηθήσει άμεσα καθώς έχουν ήδη εκτελεστεί 
πολλές εντολές οι οποίες περιλαμβάνουν και push,pop.Όμως αμέσως μόλις ήρθε η εκτέλεση σε 
αυτή την function η στοίβα ήταν ακόμα ανέπαφη !! Πηγαίντε λοιπόν μερικές εντολές πιο πάνω μέχρι 
να συναντήσετε το πρώτο ret που φυσιολογικά είναι το τέλος της προηγούμενης function(άρα από 
κάτω είναι η αρχή της function που είσαστε μέσα τώρα).Βάλτε ένα breakpoint στην πρώτη εντολή της 
function αυτής,δηλαδή στην διεύθυνση 005D73B0 (που είναι ένα "push κάτι").Κλείστε το ViceCity 
και ξανατρέξτε το.Αφού προσπεράσετε τα 2 videaκια η εκτέλεση θα σταματήσει στο νέο breakpoint 
που μόλις βάλατε.Εκεί που δείχνει τώρα το eip,αλλάξτε την μνήμη σε ret(C3) και εκτελέστε το.
Τώρα,λοιπόν,βρισκόσαστε αμέσως κάτω από ένα call,που σας αναγκάζει να μπείτε στην διαδικασία 
του Loop που ελέγχει συνεχώς αν βάλατε το CD του παιχνιδιου.Δύο εντολές πιο πάνω υπάρχει ένα 
call με το οποίο δεν αξίζει να ασχοληθείτε και παραπάνω στην διεύθυνση 005F89D6 υπάρχει ένα jnz 
το οποίο προσπερνάει τα 2 calls.Αλλάζοντας αυτό το jnz σε jmp και ξανατρέχοντας το παιχνίδι,θα 
διαπιστώσετε πως το CD-Check δε θα εκτελεστεί ποτέ,και το παιχνίδι θα εκτελεστεί χωρίς άλλη 
κουβέντα.


Nice Gaming!
ΓΕΝΙΚΑ

Για ερωτήσεις,απορίες,διαφωνίες και τα συναφή,στείλτε ένα e-mail στο PhotoPaul@lockless.com
Τα λέμε στο επόμενο project η στο forum της M.a.s.k.

ΠΡΟΣΟΧΗ

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

 

BACK HOME