Σάββατο 17 Μαΐου 2008

Empire XP

Title: Empire XP 5.2
URL: hxxp://www.janbuurstrasoftware.com/index.html
Download link: hxxp://www.janbuurstrasoftware.com/download.htm
Price: 10$

Εδω εχουμε ενα κλασσικο κλωνο του RISK. Αρκετα καλη εκδοση για shareware. Αυτα απο review, παμε στο patch it yourself tutorial.

- Αν τρεξετε το παιχνιδι, θα δειτε οτι δεν υπαρχει πουθενα πλαισιο/φορμα για να εισαγετε κωδικο, κτλ. Αυτο σημαινει 2 πραγματα συνηθως. Οτι το demo ειναι demo (λειπουν ρουτινες στον κωδικα). Σε αυτη τη περιπτωση πουλος. Ή οτι ενεργοποιειται με καποιο τροπο εκτος user interface.
- Αν πατε στο hxxp://www.janbuurstrasoftware.com/register.htm ο προγραμματιστης γραφει οτι οταν το πληρωσετε, θα σας στειλει το keyfile. Οεο, καντε χαρουλες απο τωρα, γιατι το demo γινεται full :P

Αρα ο στοχος μας ειναι το keyfile.
Με αυτα στο νου, το φορτωνουμε στο αγαπημενο μας ollydbg.
(σημ: Ο στοχος ειναι σκοπιμα unpacked, δεν υπαρχει λογος να ζοριζομαστε απο την αρχη ;p)

Στον olly, ψαχνουμε να δουμε πως κοιταζει το keyfile. Κανοντας ενα string search, βλεπουμε ενδιαφεροντα "empirexp.key" και "empirexpuit.key". Θα μπορουσαμε να ξεψαχνισουμε ακολουθωντας τη πορεια του προγραμματος, αλλα θα παμε πιο απλα επειδη ο στοχος μας το επιτρεπει.

Τρεχοντας το προγραμμα, στο Help -> About μας λεει "Unregistered blabla". Βαζοντας breakpoint στον olly (θεση 00480210 - την address τη βρισκετε μεσω string search), παρατηρουμε ενα πολυ ενδιαφερον cmp πριν το unregistered text. Αν ισχυει το cmp, πηδαμε στο "Registered to:". Αν οχι, δε πηδαμε εμεις. Μας πηδαει αυτο και λεει "Registration enables blabla", κοινως πληρωσε μπαρμπα.

Αρα το compare στη θεση 00480210 (CMP BYTE PTR DS:[515C87],BL) ειναι υπερ-σημαντικο. Μαντεψτε δηλ, ειναι αυτο που ελεγχει αν ειστε registered. Οι 2 τιμες που συγκρινει, ειναι οι 0 και 1 (αν τρεξετε μερικες φορες τα loops, θα το εμπεδωσετε).

Εχουμε 3 τροπους επεμβασης στο cmp. ο ενας ειναι να αλλαξουμε τον τροπο υπολογισμου BL. Ο αλλος τον τροπο υπολογισμου του 515C87. Και ο 3ος να το γαμισουμε στα je/jne.

Αν κανετε ενα find references to selected command, θα δειτε οτι το προγραμμα κοιταζει πανω απο 10-15 φορες αν εχετε πληρωσει. Δηλ δε μιλαμε για πατς, αλλα ξεσκισμα. Οποτε μιας και οι τιμες παιζουν παντα σε 0 ή 1, ο πιο ευκολος τροπος ειναι να βαλουμε το 515C87 αντι για 1 να γινεται 0.

Με τον παραπανω τροπο, η αλλαγη των bytes που απαιτειται ειναι μολις 1 και γλυτωνουμε ασυλληπτο χρονο. Αυτο, οι πιο guru το λενε, magic pointer. Θα το πω και εγω ετσι;p

Αφου εχουμε τη λιστα οσων εντολων ασχολουνται με τη συγκεκριμενη address, ψαχνουμε μια που να κανει mov τη τιμη 1 στη θεση 515C87. Και επειδη το προγραμμα ελεγχει σχετικα νωρις αν πληρωσαμε, αυτη η εντολη πρεπει να βρισκεται ψηλα στη λιστα με τις referenced στην 515C87. Ω ναι, αυτη η εντολη ειναι στη θεση 00443034. Και ειναι η:

00443034 . C605 875C5100 01 MOV BYTE PTR DS:[515C87],1

Δε χρειαζοταν πολυ φαντασια, βγαζει ματι. Εμεις οπως αναφεραμε αντι για 1, περναμε τη τιμη 0.

Αλλάζουμε την αλληλουχια "C605 875C5100 01" σε "C605 875C5100 00" (ή το 01 σε 00 στη hex θεση 0004243a απο την αρχη του αρχειου) και τελειωσαμε.

Εντζοη δε γκειμ!

Download full + patch on rapidshare.com

Δεν υπάρχουν σχόλια: