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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

oj koji moze biti pravi serijski broj. Ako pogledate malo ispod videcete<br />

CALL koji poredi ovaj broj sa nasim unetim 111111, stoga je sadrzaj EAXa<br />

pravi serijski broj. Uspeli smo, tacan serijski je ED0C68403977013312.<br />

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

Prosli primer je bio jednostavan posto je program poredio serijske<br />

brojeve kao stringove. Ali sta da radimo kada ovo nije slucaj, sta kada se<br />

porede brojevne vrednosti U ovom slucaju resenje nije uvek lako uocljivo ali<br />

mi cemo kao i uvek uspeti da resimo sve nase probleme sa lakocom. Primer<br />

za ovaj deo knjige se nalazi u folderu Cas3 a zove se KeyGen-me#1.exe i njega<br />

cemo otvoriti sa Olly-jem.<br />

Posto smo odlucili da vezbamo postavljanje break-pointa na APIje i<br />

ovde cemo otici u Executable modules window i tamo cemo pronaci sve APIje<br />

u nasem programu selekcijom glavnog exe fajla koji reversujemo i klikom na<br />

CTRL+N. Od APIja u fajlu ce se nalaziti samo sledece:<br />

Address Section Type ( Name<br />

0040200C .rdata Import ( USER32.DialogBoxParamA<br />

00402010 .rdata Import ( USER32.EndDialog<br />

00402004 .rdata Import ( KERNEL32.ExitProcess<br />

00402018 .rdata Import ( USER32.GetDlgItem<br />

0040201C .rdata Import ( USER32.GetDlgItemTextA<br />

00402000 .rdata Import ( KERNEL32.GetModuleHandleA<br />

00402020 .rdata Import ( USER32.LoadIconA<br />

00402024 .rdata Import ( USER32.MessageBoxA<br />

00402028 .rdata Import ( USER32.SendMessageA<br />

00402014 .rdata Import ( USER32.wsprintfA<br />

Posto je ocigledno da se za uzimanje teksta iz prozora koristi API<br />

GetDlgItemTextA (jer se GetDlgItem koristi za pristupanje objektima koji se nalaze<br />

u formi [prozoru] a ne za citanje teksta iz njih) postavicemo break-point na njega<br />

klikom na desno dugme i selekcijom opcije Set break-point on every<br />

reference. Kada smo ovo uradili ostaje nam da startujemo program klikom<br />

na F9 u Olly-ju i da u nasu metu unesemo sledece podatke: kao ime cemo<br />

uneti ap0x a kao serijski broj 111111. Naravno ovi podaci su pogresni ali mi<br />

cemo posle klika na Okey! dugme biti na pravom putu da pronadjemo tacan<br />

serijski broj jer smo postavili break-point na API koji se koristi za citanje<br />

unetih podataka. Dakle posle klika na dugme Okey! mi cemo se naci ovde:<br />

004010EE . E8 23010000 CALL ; GetDlgItemTextA<br />

Posle klika na F8 posto zelimo da predjemo preko ovog poziva, to jest zelimo<br />

da se ovaj API izvrsi, zavrsicemo ovde:<br />

00401216 JMP NEAR DWORD PTR DS:[; USER32.GetDlgItemTextA<br />

Posto je ovo direktan poziv ka user32.dll uklonicemo ovaj break-point klikom<br />

na F2. Iako smo ovo uradili klikom na F8 dolazimo u user32.dll fajl ali ovo ce<br />

se desiti samo ovaj put zbog cega je potrebno izvrsiti sve komande u ovom<br />

.dll fajlu sa F8 sve dok ne izvrsimo i poslednju RET komandu i vratimo se iz<br />

.dll fajla u kod .exe fajla, to jest ovde:<br />

004010F3 . 0BC0<br />

004010F5 . 75 19<br />

OR EAX,EAX<br />

JNZ SHORT KeyGen-m.00401110<br />

A kao sto vidimo ovde se samo proverava da li smo uneli nase ime u prozor.<br />

Posto smo ovo uradili pritiskacemo F8 sve dok ne izvrsimo sve komande i<br />

dok se ne nadjemo ovde:<br />

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

0040111F . E8 F2000000 CALL ; \GetDlgItemTextA<br />

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

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

Saved successfully!

Ooh no, something went wrong!