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.

Patching a .dll<br />

Cesto sretani problem prilikom reversinga je problem ubijanja NAGova<br />

ili pecanja serijskih brojeva na osnovu .dll fajla. Naime cesto se desava da se<br />

razne procedure za proveru ili obavestenje smestaju u .dll fajlove iz razloga<br />

sto ovi podaci mogu pozivati iz veceg broja .exe fajlova pa je ekonomicnije<br />

ovaj deo programa pisati samo jednom u nekom .dll fajlu. Ovaj deo poglavlja<br />

cemo podeliti na dva dela.<br />

Deo I - Patching a NAG in .exe file<br />

Prvi deo ovog dela poglavlja ce vas nauciti kako da pronadjete NAG. Kazem<br />

pronadjete NAG jer ce ovo trazenje biti malo drugacije od onoga na sta ste<br />

do sada navikli. Otvoricemo metu ...\Casovi\Cas08\Keygen.exe pomocu Ollya i<br />

startovacemo je pritiskom na F9. Ono sto cemo videti je sledeci NAG na<br />

ekranu. Nas sledeci korak je logican,<br />

potrazicemo sve string reference u fajlu klikom<br />

na desno dugme -> Search for -> All referenced<br />

text strings... ali kao sto vidimo sam NAG tekst<br />

se ne nalazi u ovom fajlu. To nas dovodi do<br />

zakljucka da ili je sam tekst NAGa enkriptovan<br />

u samom fajlu, ili se cita iz nekog drugog fajla<br />

ili se u fajlu nalazi kao neka enkriptovana hex<br />

tabela. Bilo kako bilo postavicemo jedan break-point na MessageBoxA API jer<br />

se on sigurno koristi za prikaz samog NAGa. Dakle, otici cemo u Executable<br />

modules prozor (ALT+E), onda cemo izabrati Keygen.exe i pritisnucemo CTRL<br />

+ N a onda cemo u sledecem prozoru pronaci MessageBoxA API i<br />

postavicemo break-point on every reference na taj API. Posto smo ovo uradili<br />

ostaje nam da restartujemo program sa CTRL+F2 i da ga ponovo pokrenemo<br />

klikom na F9. Kao sto vidimo NAG se i dalje pojavljuje. Posto program nije<br />

zastao ni na jednom nasem break-pointu, uklonicemo ih sve klikom na ALT+B<br />

i njihovom pojedinacnom selekcijom i klikom na DELETE. Sada nam preostaje<br />

ili da pretrazimo sve .dll fajlove koje program poziva (u nekim slucajevima ovo<br />

je komplikovanije zbog velikog broja samih .dll fajlova) ili da traceujemo kroz .exe<br />

fajl sve dok sam program ne pozove NAG. Mi cemo iskoristiti ovu drugu<br />

opciju.<br />

Posto se sam NAG pojavljuje pre pojavljivanja samog CrackMea zakljucujemo<br />

da se on nalazi u DLGProcu DialogBoxParamA APIja koji je zasluzan za<br />

prikazivanje .res dialoga. Dakle ako analiziramo samo OEP nase mete<br />

videcemo:<br />

00407F72 . 6A 00 PUSH 0 ; /lParam = NULL<br />

00407F74 . 68 F47D4000 PUSH Keygen.00407DF4 ; |DlgProc = Keygen.00407DF4<br />

00407F79 . 6A 00 PUSH 0 ; |hOwner = NULL<br />

00407F7B . 6A 64 PUSH 64 ; |pTemplate = 64<br />

00407F7D . FF35 4C984000 PUSH DWORD PTR DS:[40984C]<br />

00407F83 . E8 84C5FFFF CALL <br />

A posto znamo da se DLGProc koristi za obradu poruka koje dobija od mete<br />

postavicemo jedan break-point na DLGProc adresu, postavicemo break-point<br />

na 00407DF4, restartovacemo Olly i pritiskom na F9 naci cemo se na nasem<br />

break-pointu. Sada nam samo ostaje da pritiskamo F8 sve dok se ne pojavi<br />

nas trazeni NAG. Ali posto se sam DLGProc ponavlja veci broj puta lakse ce<br />

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

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

Saved successfully!

Ooh no, something went wrong!