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.

Iz tog razloga moramo da uradimo proveru da li je adresa prosla MOVS<br />

komandu. Ovo je malo komplikovaniji deo ali je takodje izvodljivo.<br />

Komplikovanije je u smislu da treba da odredimo koja je to bezbedna<br />

vrednost na kojoj nece doci do ponovnog koriscenja vec zapisanih bajtova.<br />

Recimo da je ta vrednost 0x400. Ovo znaci da cemo moci da ubacimo nas<br />

patch u memoriju na trenutno otpakovanu lokaciju tek kada program<br />

otpakuje sledecih 0x400 bajtova. Zbog ovoga ce nas patch biti program u<br />

programu u kojem cemo prvo morati da uradimo redirekciju ka nasem patch<br />

kodu koji cemo smestiti na adresu 00400333:<br />

004072C9 95 XCHG EAX,EBP<br />

004072CA 8BC5 MOV EAX,EBP<br />

004072CC - E9 6290FFFF JMP patch.00400333<br />

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

Originalni kod koji se nalazi na ovoj adresi je:<br />

004072C9 95 XCHG EAX,EBP<br />

004072CA 8BC5 MOV EAX,EBP<br />

004072CC 56 PUSH ESI<br />

004072CD 8BF7 MOV ESI,EDI<br />

004072CF 2BF0 SUB ESI,EAX<br />

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

Dakle zamenili smo komande PUSH ESI; MOV ESI,EDI; SUB ESI,EAX skokom<br />

ka nasem buducem patchu koji ce se nalaziti na adresi 00400333. Ovaj patch<br />

ce biti pravi mali program i tu cemo morati da uradimo sledece:<br />

- vratimo ukradeni kod<br />

- proverimo da li je trenutno otpakovana adresa veca za 0x400 od prve<br />

otpakovane adrese na dinamicki alociranoj sekciji memorije<br />

- da ubacimo redirekciju OEPa ka nasem patch kodu<br />

- da patchujemo nasu metu<br />

Ali pre nego sto uradimo bilo sta od ovoga potrebno je da saznamo kako to<br />

PeX skace na OEP. To jest moramo da znamo gde treba da ubacimo<br />

redirekciju PeXovog koda ka nasem patch kodu. Ovo cemo uraditi tako sto<br />

cemo prvo restartovati nasu metu u Ollyju i onda cemo postaviti memorijski<br />

break-point on write na glavnu .code sekciju. Nakon prelaska preko<br />

exceptiona doci cemo do dela koda koji smo vec upoznali i koji se nalazi na<br />

virtualno alociranom mestu. Sada treba ukloniti prethodno postavljen breakpoint<br />

i postaviti novi, isti, ali ovaj put na poslednju sekciju koja sadrzi SFX<br />

kod i importe. Posle ponovnog pritiska na F9 doci cemo do REP komande koja<br />

vrsi pisanje u PeX unpacker sekciju. Ponovo cemo ukloniti nas memorijski<br />

break-point i posle 2x klika na F8 naci cemo se na adresi 00407001. Ovo je<br />

prva adresa u PeXovoj sekciji i ona se razlikuje od pocetne, od one koju<br />

mozete videti kada prvobitno otvorite PeXovan fajl sa Ollyjem i ne izvrsite ni<br />

jednu komandu, jer je PeX ovde izvrsio pisanje novog sadrzaja prilikom<br />

izvrsavanja poslednje REP komande. Iz ovog razloga cemo traceovati kroz<br />

ovaj kod sa F7 sve dok ne dodjemo do:<br />

00407032 68 BF124000 PUSH crackme_.004012BF<br />

00407037 EB 01 JMP SHORT crackme_.0040703A<br />

00407039 C7 ; Unknown command<br />

0040703A 58 POP EAX<br />

0040703B 40 INC EAX ; crackme_.004012BF<br />

0040703C 50 PUSH EAX

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

Saved successfully!

Ooh no, something went wrong!