07.02.2015 Views

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>The</strong> Serials – Fishing #5<br />

Vec smo naucili razne nacine za hvatanje serijskih brojeva koji se nalaze u<br />

formi stringa u memoriji fajla, ali sta ako se serijski brojevi ne nalaze u ovom<br />

obliku. Ovaj slucaj cemo razmotriti na meti ..\Cas03\Crackme1.exe koju cemo<br />

otvoriti pomocu Ollya. Kao sto vidite ova meta ima ukupno cetiri nivoa, a mi<br />

cemo ovde resiti samo tri. Cetvrti nivo ostavljam vama za vezbu.<br />

Posle otvaranja mete pomocu Ollya potrazicemo karakteristicne stringove<br />

koji se odnose na level1. I u string referencama cemo videti sledece:<br />

Text strings referenced in Crackme1:.text, item 4<br />

Address=004012E0<br />

Disassembly=PUSH Crackme1.00403000<br />

Text string=ASCII "Level 1 Complated"<br />

Stoga cemo 2x kliknuti na ovaj string i naci cemo se ovde:<br />

004012E0 |. 68 00304000 PUSH Crackme1.00403000 ; |Text = "Level 1 Complated"<br />

Posto se negde iznad proverava tacnost serijskog broja odskrolovacemo na<br />

pocetak ovog CALLa i postavicemo break-point na njegov pocetak, odnosno<br />

postavicemo break-point na 004012A0. Posto smo ovo uradili mozemo da<br />

unesemo u metu serijski broj po zelji. Ja sam uneo 111111 i pritisnuo<br />

Register sto me je odvelo do mog break-pointa. Dalje slobodno traceujemo<br />

kroz kod sa F8 sve do adrese 004012B4 gde se ocigledno proverava da li je<br />

unet bilo koji serijski broj. Posto je EAX jednak 6, odnosno duzini unetog<br />

serijskog broja, a ESP pokazuje na uneti serijski broj, znamo da smo na<br />

pravom mestu. Dalje se krecemo kroz kod sve dok ne dodjemo do:<br />

004012BB |. 8136 504F5453 XOR DWORD PTR DS:[ESI],53544F50<br />

004012C1 |. 8176 04 454C5>XOR DWORD PTR DS:[ESI+4],52554C45<br />

Ocigledno je da je ovo kod za proveru tacnosti serijskog broja iz razloga sto<br />

se odmah ispod ovoga nalaze skokovi koji odlucuju o tome da li ce se<br />

prikazati poruka o tacnosti unetog serijskog broja. Dakle sada treba da<br />

saznamo kako se to proverava uneti serijski broj. Da bismo ovo uradili<br />

pogledacemo sta se to nalazi na ESI adresi kada smo sa izvrsavanjem<br />

programa dosli do adrese 004012BB. Ako uradimo Follow in dump na ESI<br />

registar videcemo ovo:<br />

0012FB00 31 31 31 31 31 31 00 00 111111..<br />

Dakle prve cetiri cifre naseg seriskog broja se XORuju sa 53544F50. A onda<br />

se na adresi 004012C1 i druge cetiri cifre naseg unetog serijskog broja<br />

XORuju sa 52554C45. Kada se izvrsi i ova druga komanda sledi provera<br />

tacnosti unetog serijskog broja pomocu dve sledece komande:<br />

004012C8 |. 813E 123D3525 CMP DWORD PTR DS:[ESI],25353D12<br />

004012CE |. 75 21<br />

JNZ SHORT Crackme1.004012F1<br />

004012D0 |. 817E 04 2A6D7> CMP DWORD PTR DS:[ESI+4],73746D2A<br />

004012D7 |. 75 18<br />

JNZ SHORT Crackme1.004012F1<br />

Kao sto vidimo XORovane vrednosti prvog i drugog dela serijskog broja se<br />

porede sa 25353D12 i 73746D2A. Ovo nije nikakav problem. Malo reversne<br />

matematike i resicemo nas problem, to jest pronacicemo tacan serijski broj.<br />

Dakle<br />

Deo_serijskog_broja_1 XOR 53544F50 = 25353D12<br />

Deo_serijskog_broja_2 XOR 52554C45 = 73746D2A<br />

Posto je XORovanje revezibilna funkcija onda imamo:<br />

<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 69 <strong>of</strong> 293

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!