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

Cracking dhack-CrackMe16.0.exe by D-Hack

by MesGior

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


Όπως ο ίδιος ο MesGior έγραψε για αυτό το crackme:

"Σκοπός μας είναι να νομίζει το Crackme ότι εκτελείται από το CD-ROM.Η προστασία είναι σχετικά 
πολύ εύκολη αν και παραπλανητική γιατί μας κρύβει πολύ έντεχνα την Function GetDriveTypeA." 

Άλλη μία ενδιαφέρουσα έκθεση για το πρώτο project της M.a.s.k. Μπορείτε να δείτε εδώ μία τεχνική
για το πως καλούνται API functions με έναν λίγο διαφορετικό τρόπο.Έχετε πάντα υποψη σας αυτές
τις τεχνικές καθώς χρησιμοποιούνται ΠΟΛΥ συχνά σε πολλές προστασίες...


Εργαλεία:  SoftIce,W32DASM,HIEW

Δυσκολία: Εύκολο 

Συνοδευτικά αρχεία: ΕΔΩ

 

  Δυστυχώς ή ευτυχώς παίζω πολύ σπάνια παιχνίδια στο PC και γι'αυτό μου ήταν δύσκολο να βρω 
κάποιο ώστε να γράψω κάτι για την  προστασία του. Έτσι λοιπόν κοίταξα στο www.crackmes.de 
και μεταξύ άλλων βρήκα κάποιο πολύ ενδιαφέρον που κατάλαβα αργότερα την σημασία του και 
γι'αυτό σας το παραθέτω.
Μόλις το κατέβασα ξεκίνησα κατά τα γνωστά και έβαλα breakpoint στο getdrivetypea.Έλα όμως 
που μόλις έσπασε στο kernel32 και πάτησα μια φορά F11 με πέταξε εδώ:
0167:0040243C E85FEDFFFF CALL MSVBVM60!__VbaStrToAnsi <- Προσοχή προσοχή!!!!!!!!!
0167:00402442 50 PUSH EAX 
0167:00402442 E841FBFFFF CALL 00401F88
0167:00402447 8BF8 MOV EDI,EAX <- Εδώ έσπασε
0167:00402449 E846EDFFFF CALL MSVBVM60!__vbasetsystemError 

.........
..........
Προσέξατε κάτι περίεργο? Ναι,σωστά προσέξατε, δεν έσπασε μετά το Getdrivetypea όπως 
περιμέναμε αλλά κάπου ασχετα. Αν κοιτάξουμε πιο προσεκτικά το 
CALL MSVBVM60!__vbaStrToAnsi που βρίσκετε λίγο παραπάνω ίσως καταλάβουμε κάτι.Γιατί 
όπως γνωρίζουμε χρησιμοποιείτε για να μετατρέπει με τον κώδικα Ansi των windows.Κάτι 
έχουμε λοιπόν υποψιαστεί αλλά είναι νωρίς ακόμα για εικασίες.Ανοίγουμε το αγαπημένο μας 
w32dasm και κοιτάμε στα imports functions και ούτε εκεί υπάρχουν το KERNEL32 και το 
GETDRIVETYPEA. Τώρα είμαι πεπεισμένος ότι πρόκειται για μια μορφή προστασίας 
παραπλανητική που καλούμαστε να λύσουμε.Καταρχήν υποψιαζόμαστε ότι οι λέξεις 
KERNEL32 και το GETDRIVETYPEA υπάρχουν σε κάποια μορφή και η συνάρτηση 
vbaStrToAnsi τις μετατρέπει σε string.Αλλά που?? Είναι απλό. Το HIEW θα μας πει. Tο 
ανοίγουμε και πατάμε F7 για search σε hex mode:
       _.00401F50: 6B 65 72 6E-65 6C 33 32-00 00 00 00-0E 00 00 00 kernel32 
       _.00401F60: 47 65 74 44-72 69 76 65-54 79 70 65-41 00 00 00 GetDriveTypeA
Τώρα αφού γνωρίζουμε τις διευθύνσεις πάμε πίσω στο w32dasm για να δούμε τι περιέχουν και 
να βγάλουμε και κάποιο συμπέρασμα:

:00401F70 501F4000 DWORD 00401F50 <- KERNEL32
:00401F74 601F4000 DWORD 00401F60 <- GetDriveTypeA
:00401F78 0000 add byte ptr [eax], al
:00401F7A 0400 add al, 00
:00401F7C 3833 cmp byte ptr [ebx], dh
:00401F7E 40 inc eax
:00401F7F 000000000000000000 BYTE 9 DUP(0)
Referenced by a CALL at Address:
|:00402442 
:00401F88 A140334000 mov eax, dword ptr [00403340]
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401F3C(C)
:00401F8D 0BC0 or eax, eax
:00401F8F 7402 je 00401F93
:00401F91 FFE0 jmp eax <- Εδώ πηδά στο getdrivetypea ώστε να πάρει τιμή ο EΑΧ σύμφωνα με το 
drive και να την δώσει στον EDI όπως είδαμε στην εκεί που σπάει το getdrivetypea:

0167:00402442 E841FBFFFF CALL 00401F88
0167:00402447 8BF8 MOV EDI,EAX <- Εδώ έσπασε το bpx getdrivetypea (θυμάστε???)
Ο ΕΑΧ=3 όπως βλέπουμε στο softice δηλαδή c: .Το αλλάζουμε λοιπόν αντί για MOV EDI,EAX 
σε MOV EDI,05 (δηλαδή EDI=5=CD-ROM) με το Hiew (8BF8 E8 46EDFFFF -> BF 05000000 9090) 
και το έχουμε σπάσει : Αυτό ήταν!!.
       
Φαντασθείτε όμως τώρα τι θα γινόταν αν αντί να ανοίξω πρώτα το Softice άνοιγα το W32dasm 
και έψαχνα στα import Functions για την Getdrivetypea. Προφανώς θα νόμιζα ότι πρόκειται για 
μια προστασία που δεν χρησιμοποιεί την Function αυτή και ότι ανήκει στο 10% τον προγραμμάτων 
που δεν την χρησιμοποιούν για να βρουν σε ποιο Drive εκτελείται το πρόγραμμα. Ήμουν τυχερός 
όμως.Τέλος θέλω να σημειώσω ότι σε αυτό το κείμενο είδαμε πώς με την τεχνική που περιγράψαμε 
ο προγραμματιστής μπορεί να μας κρύψει τις Functions που επιθυμεί και να μας μπερδέψει. Ελπίζω 
να πονηρευτήκατε και να μην μπερδευτείτε αν ξανασυναντήσετε αυτήν την τεχνική. Αυτός είναι 
και ο σκοπός για τον οποίο έγραψα το Tutorial. Ως την άλλη φορά να περνάτε καλά . 
     

 


ΠΡΟΣΟΧΗ

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

 

BACK HOME