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.

00401124 . 0BC0 OR EAX,EAX<br />

Primeticete da se na ekranu pojavio string 111111 odmah posle izvrsavanja<br />

poslednjeg GetDlgItemTextA APIa. Ovo znaci da je meta procitala i sadrzaj<br />

drugog polja. Ovde se OR EAX,EAX komanda ponovo odnosi na proveru<br />

ispunjenosti serial polja u glavnom prozoru crackmea. Posto smo i ovo polje<br />

ispunili ponovo pritiskamo F8 kako bismo dosli dovde:<br />

00401148 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd<br />

0040114B . E8 C6000000 CALL ; \GetDlgItemTextA<br />

00401150 . 33D2 XOR EDX,EDX<br />

Ako sada pogledate sadrzaj registra EAX videcete da je EAXu dodeljena<br />

vrednost 4 odmah posle izvrsavanja GetDlgItemTextA API poziva. Bez nekog<br />

velikog razmisljanja zakljucujemo da ovaj API stavlja duzinu unetog podatka<br />

iz polja koje se cita u EAX registar. Izvrsavajuci kod sa F8 dolazimo do<br />

sledeceg isecka koda koji se ocigledno koristi za izracunavanje serijskog<br />

broja na osnovu unetog imena:<br />

00401158 . BE 80334000 MOV ESI,KeyGen-m.00403380 ; ASCII "ap0x"<br />

0040115D > 8A1C31<br />

MOV BL,BYTE PTR DS:[ECX+ESI]<br />

00401160 . 03C3 ADD EAX,EBX<br />

00401162 . 41 INC ECX<br />

00401163 . 80FB 00 CMP BL,0<br />

00401166 .^ 75 F5 JNZ SHORT KeyGen-m.0040115D<br />

Ovaj deo koda se izvrsava cetiri puta (od adrese 0040115D pa do 00401166) jer<br />

je nase ime dugacko cetiri slova. Dakle zakljucujemo da program racuna<br />

serijski broj na osnovu svih unetih slova imena. Pratite vrednost registra EAX<br />

i nacin na koji se ona povecava za svaki od ova cetiri prolaza. Posto se<br />

konacno izvrsi i cetvrti prolaz izvrsice se i sledeci kod koji ce dodatno izmeniti<br />

vrednost EAX registra:<br />

00401168 . BA 28000000 MOV EDX,28<br />

0040116D . F7E2<br />

MUL EDX<br />

0040116F . 83C0 19<br />

ADD EAX,19<br />

ali ovo i nije bitno posto sada samo trazimo tacan serijski broj. Ako pogledate<br />

malo dole videcete da se ova vrednost iz EAXa pretvara pomocu wsprintfa<br />

APIa u decimalni oblik, ovde:<br />

00401172 . 50 PUSH EAX ; /<br />

00401173 . 68 64334000 PUSH KeyGen-m.00403364 ; |Format = "%d"<br />

00401178 . 68 9A334000 PUSH KeyGen-m.0040339A ; |s = KeyGen-m.0040339A<br />

0040117D . E8 7C000000 CALL ; \wsprintfA<br />

00401185 . BA 9A334000 MOV EDX,KeyGen-m.0040339A ; ASCII "15105"<br />

a rezultat ovog APIa je vise nego ocigledan. 15105 moze biti tacan serijski<br />

broj za uneto ime ap0x. Ovo mozete proveriti posle ali pogledajte prvo deo<br />

koda za poredjenje serijskih brojeva koji se ocigledno nalazi ovde:<br />

004011A5 . 8B06<br />

004011A7 . 8B1A<br />

004011A9 . 3BC3<br />

004011AB . 75 15<br />

MOV EAX,DWORD PTR DS:[ESI]<br />

MOV EBX,DWORD PTR DS:[EDX]<br />

CMP EAX,EBX<br />

JNZ SHORT KeyGen-m.004011C2

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

Saved successfully!

Ooh no, something went wrong!