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.

Inline patching: PeX 0.99<br />

Posto su prethodni primeri bili “previse” laki vreme je da konacno<br />

uradimo nesto ozbiljno i da inlineujemo jedan jako tezak paker. Sta je to<br />

tako tesko kod ovog pakera Tesko je to sto se JMP koji vodi na OEP nalazi u<br />

delu koji se modifikuje iz memorije koja se dinamicki alocira. Ovo znaci da se<br />

deo koda koji vodi do OEPa generise uvek na istom mestu ali posto se<br />

memorija sa koje se on generise uvek drugacije alocira, to jest uvek ima<br />

drugu adresu, stoga patchovanje ovakve aplikacije predstavlja problem. Na<br />

svu srecu po nas ovaj problem nije neresiv.<br />

Prvi u nizu problema sa kojim moramo da se suocimo je problem<br />

odredjivanja mesta na koje cemo da ubacimo redirekciju ka nasem patch<br />

kodu. Ovo mesto cemo pronaci tako sto cemo postaviti break-point on write<br />

na glavnu .code sekciju. Posle pritiska na F9 zavrsicemo ovde:<br />

0012FF91 - FFE2 JMP NEAR EDX ; crackme_.00407154<br />

Posto se ovde ne vrsi pisanje u glavnu sekciju pritisnucemo SHIFT+F9, kako<br />

bismo presli preko ovog exceptiona, posle cega cemo zavrsiti ovde:<br />

004071EE 0F0B<br />

UD2<br />

Posto je i ovo jedna od nevaznih ASM komandi, ponovo cemo pritisnuti<br />

SHIFT+F9 posle cege cemo se naci bas tamo gde treba:<br />

02AB006B F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]<br />

02AB006D 5F POP EDI<br />

02AB006E 83C7 28 ADD EDI,28<br />

Dakle to je jedna od onih adresa koje se dinamicki alociraju pomocu<br />

VirtualAlloc APIja. Na zalost postavljanje bilo kakvog break-pointa na ovaj<br />

API nam nece pomoci iz razloga sto se memorija alocira malo drugacije.<br />

Ostaje nam samo da pomocu traceinga kroz kod pronadjemo komande<br />

STOS, MOVS ili REP koje se koriste za pisanje u memoriju. Naravno<br />

uporedjivacemo adrese na koje se pise sa 02AB0068 (ovo je vrednost za moj<br />

kompjuter i za ovaj start programa) i naci cemo bas ono sto smo trazili na<br />

adresi:<br />

004072CD . 8BF7<br />

004072CF . 2BF0<br />

004072D1 . F3:A4<br />

004072D3 . 5E<br />

MOV ESI,EDI<br />

SUB ESI,EAX<br />

REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]<br />

POP ESI<br />

Ovde cemo uraditi redirekciju ka patch kodu. Za uspesno preusmeravanje<br />

potreban nam je jos sadrzaj registara kada se izvrsava REP komanda tako da<br />

cemo ih zapisati negde kako bismo ih kasnije koristili.<br />

EAX 00000001<br />

ECX 00000002<br />

EDX 00407308 crackme_.00407308<br />

EBX 00006473<br />

ESP 0012FF58<br />

EBP 00000001<br />

ESI 009B0003<br />

EDI 009B0004<br />

EIP 004072D1 crackme_.004072D1<br />

Kada smo ovo zapisali naisli smo na jos jedan problem. Naime problem je sto<br />

se adrese koje su vec zapisane u memoriji pomocu REP komande ponovo<br />

koriste pomocu MOVS komande na adresi:<br />

00407268 > /A4 MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]<br />

00407269 > |E8 68000000 CALL crackme_.004072D6<br />

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

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

Saved successfully!

Ooh no, something went wrong!