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: ASPack 1.x - 2.x<br />

Posto je pored UPXa veoma cesto koriscen packer je i ASPack. Stoga<br />

je izuzetno bitno naci nacin kako patchovati ovaj paker tako da se velicina<br />

patchovanog fajla ne poveca ni za jedan bajt. Ovo moze izgledati<br />

komplikovano ali ako se drzimo osnovnih principa patchovanja zapakovanih<br />

executable fajlova uspecemo, dakle:<br />

• Pronaci komandu koja se poslednja izvrsava a pripada samom<br />

packeru. Ova komanda se izvrsava odmah pre skoka na otpakovan<br />

OEP stoga nju treba izmeniti tako da ona pokazuje ka nasem<br />

patchovanom kodu.<br />

• Ako ovo prvo ne uspe treba pronaci mesto u kodu posle koga je ceo<br />

kod glavne .code sekcije otpakovan u memoriju i tu treba ubaciti<br />

pointer ka patch kodu.<br />

• Osloboditi mesto za ubaceni kod<br />

• Ubaciti kod za patchovanje<br />

• U slucaju ‘ostecenja’ packerovog koda izvrsiti popravku<br />

• Vratiti kontrolu ili pravom OEPu ili nastaviti sa otpakivanjem koda<br />

Posto znamo da otpakujemo ASPack onda znamo i kako izgledaju poslednje<br />

komande pre prelaska na pravi OEP:<br />

004073B0 /75 08<br />

004073B2 |B8 01000000<br />

004073B7 |C2 0C00<br />

004073BA \68 C0124000<br />

JNZ SHORT crackme_.004073BA<br />

MOV EAX,1<br />

RET 0C<br />

PUSH crackme_.004012C0<br />

004073BF C3 RET<br />

Ovo znaci da bismo trebali da izmenimo poslednju RET komandu u neki skok<br />

ka patch kodu, ali da li je to bas tako Restartujte metu sa CTRL+F2 i<br />

pogledajte sta se to nalazi na adresi:<br />

004073B0 /75 08<br />

004073B2 |B8 01000000<br />

004073B7 |C2 0C00<br />

JNZ SHORT crackme_.004073BA<br />

MOV EAX,1<br />

RET 0C<br />

004073BA \68 00000000 PUSH 0<br />

004073BF C3 RET<br />

Kao sto vidimo kod je veoma slican ali nema onog PUSH 004012C0. Ovo<br />

znaci da se OEP prosledjuje na ovu adresu, a ovo znaci da se ovaj deo koda<br />

ne moze patchovati! Dakle potrebno je pronaci neki drugi deo koda koji se<br />

nece menjati i kojem ce se pristupiti odmah nakon otpakivanja glavne<br />

sekcije. Da biste ovo mesto nasli mozete traziti modifikaciju bajtova pomocu<br />

Memory Access opcije u Ollyju, ali posto bi ovo objasnjenje bilo presiroko<br />

preci cemo odmah na patchovanje. Dakle pronadjite ovo u kodu fajla<br />

crackme.aspacked.original.exe<br />

00407180 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS><br />

00407182 8BC8 MOV ECX,EAX<br />

00407184 83E1 03 AND ECX,3<br />

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

Izmenite ga u sledeci kod:<br />

00407180 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS><br />

00407182 - E9 AC91FFFF JMP inline_a.00400333 <br />

Sta smo ovde uradili Jednostavno smo zamenili komande MOV ECX,EAX i<br />

AND ECX,3 komandom koja ce izvrsiti patch naseg koda. Ali zasto bas adresa<br />

00400333 Zato sto se ova adresa nalazi u PE headeru fajla gde ima vise<br />

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

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

Saved successfully!

Ooh no, something went wrong!