The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
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