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